JP3735438B2 - Risc計算機 - Google Patents

Risc計算機 Download PDF

Info

Publication number
JP3735438B2
JP3735438B2 JP03754097A JP3754097A JP3735438B2 JP 3735438 B2 JP3735438 B2 JP 3735438B2 JP 03754097 A JP03754097 A JP 03754097A JP 3754097 A JP3754097 A JP 3754097A JP 3735438 B2 JP3735438 B2 JP 3735438B2
Authority
JP
Japan
Prior art keywords
data
word
operand
instruction
register
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP03754097A
Other languages
English (en)
Other versions
JPH10240528A (ja
Inventor
郁夫 内堀
陽一郎 竹内
慎一郎 鈴木
晃智 山田
隆二 境
誠 渡邊
禎 石川
浩太郎 遠藤
展行 森本
純恵 福田
研一 溝口
量志 佐藤
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP03754097A priority Critical patent/JP3735438B2/ja
Publication of JPH10240528A publication Critical patent/JPH10240528A/ja
Application granted granted Critical
Publication of JP3735438B2 publication Critical patent/JP3735438B2/ja
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Images

Landscapes

  • Advance Control (AREA)
  • Executing Machine-Instructions (AREA)

Description

【0001】
【発明の属する技術分野】
本発明は、各種処理を1命令により実行可能であり、並列化に好適なRISC計算機に関するものである。
【0002】
【従来の技術】
RISC計算機は、命令セットを単純なものにして、実行の高速化を図った計算機である。RISC計算機においては、ほとんどの命令が、1マシンサイクルで実行終了するように、レジスタ間の単純な演算を指示するもので構成されている。また、メモリのアクセスをロード命令とストア命令のみで行うことにより、CISCに比べてパイプラインの単純化が図られている。
【0003】
更に、RISC計算機としてはVLIW(Very Long Instruction Word)方式を採用し、命令レベルの並列性を利用して高速処理が可能に構成されたものが知られている。このVLIW方式は、長命令形式と呼ばれる「長い命令語」の中に、通常のRISC命令を複数個配置して命令レベルの並列実行を可能としてある。
【0004】
【発明が解決しようとする課題】
しかしながら、従来のRISC計算機においては、命令やレジスタの多くが、32bit長、64bit長であるのに対し、ビット列やバイト列やパック10進数などのデータは、夫々、1bit、8bit、4bitが単位であるから、これらのデータを扱う処理においては、32bit長や64bit長のレジスタを効率的に利用することができない場合があった。
【0005】
また、VLIW方式を採用したものにあっては、並列命令実行の妨げとなる要因として、▲1▼分岐による制御依存関係、▲2▼機能ユニット数による制限、▲3▼命令間のデータ依存関係、が挙げられる。VLIW方式を採用した従来のRISC計算機は、係る要因によって並列度が向上せず、十分な性能が得られないという問題点があった。
【0006】
本発明は上記従来のRISC計算機の問題点を解決せんとしてなされたもので、その目的は、レジスタ長より短い長さのデータ処理にあっても、当該レジスタをより効率的に利用することのできるRISC計算機を提供することである。更に、レジスタ長にあったデータを処理することで、ビット列やバイト列やパック10進数などを、同時に複数並列実行して処理の高速化を図ることができるRISC計算機を提供することを目的とする。また、他の目的は、VLIW方式を採用した場合に、命令の並列度を上げ、VLIWの性能を最大限に引き出し、高速処理が可能となるRISC計算機を提供することである。
【0007】
【課題を解決するための手段】
本発明の請求項1に記載のRISC計算機は、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを検出する手段を備える演算回路を具備し、前記算出手段は、1ワードデータを同一ビット数からなる複数のブロックに分けた場合の各ブロック夫々にセットされたビットがあるか否かの検出を行う検出手段と、この検出手段による検出結果に基づき、前記複数のブロック中の1ブロックの全ビットより少ない所定ビットのデータを選択する選択手段と、この選択手段により選択された結果に基づき、1ワードデータ中の、最上位側から最初にセットされているビットが、最下位ビットから数えて何ビット目であるかの数値を作成する数値作成手段と、を具備することを特徴とする。これによって、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを検出でき、有効ビット長の検出等に適用可能である。
【0010】
本発明の請求項2に記載のRISC計算機は、複数ワードのデータについて、ワード単位に当該ワード内が全て0であるか否かに基づき、複数ワードの内のセットされたビットが存在する最上位有効ワードを検出する最上位有効ワード検出手段と、この最上位有効ワード検出手段により検出された結果に対して請求項1に記載の演算回路を用いて、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを算出し、更に、この結果を用いて当該ワードの位置を示す数値を得るワード位置検出手段と、前記有効最上位ワード検出手段により検出された最上位有効ワードに係る1ワードデータに対して請求項1に記載の演算回路を用いて、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを示す数値を得るビット位置検出手段と、このビット位置検出手段及びワード位置検出手段の検出結果に基づき、複数ワードからなるデータの有効ビット長データを得る有効ビット長取得手段とを備えることを特徴とする。これにより、複数ワードからなるデータの有効ビット長データの計算を行うことができる。
【0011】
本発明の請求項3に記載のRISC計算機は、演算回路を複数有し、各命令を並列実行するVLIW方式を採用することを特徴とする。これにより、位置検出が、fsbit命令によりなされ、条件判定と分岐命令とが使用されないので、並列性が向上し、高速化が図られる。
【0012】
本発明の請求項4に記載のRISC計算機は、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを4ビット単位に比較して、第2オペランドの4ビットデータが第1オペランドの4ビットデータより大きいか否か検出し、各4ビット単位の比較結果である各1ビットをディスティネーションオペランドの下位側に格納する比較手段を備える演算回路を具備することを特徴とする。これにより、1ワードのデータを4ビットに分割して各4ビット毎の大小比較をする演算が1命令により実行される。つまり、4ビットのデータを大小比較を複数同時に実行可能である。
【0013】
本発明の請求項5に記載のRISC計算機は、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを4ビット単位に比較して、第2オペランドの4ビットデータが第1オペランドの4ビットデータと等しいか否か検出し、各4ビット単位の比較結果である各1ビットをディスティネーションオペランドの下位側に格納する比較手段を備える演算回路を具備することを特徴とする。これにより、1ワードのデータを4ビットに分割して各4ビット毎に等しいか否か比較する演算が1命令により実行される。つまり、4ビットのデータの一致検出を複数同時に実行可能である。
【0014】
本発明の請求項6に記載のRISC計算機は、複数ワードのパック10進数データについて、請求項4に記載の、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを4ビット単位に比較して、第2オペランドの4ビットデータが第1オペランドの4ビットデータより大きいか否か検出し、各4ビット単位の比較結果をディスティネーションオペランドの下位側に格納するcmplt.p命令を実行する演算回路を用いてワード単位に処理を行うワード単位処理手段と、このワード単位処理手段による処理結果を前記複数ワードのワードデータ順に並べる処理を行う2次処理処理手段と、この2次処理手段による処理結果について、請求項1に記載の演算回路を用いて、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを示す数値を得る最先セットビット値検出手段と、この最先セットビット値検出手段の検出結果に基づきパック10進数の有効桁数を得る有効桁数取得手段とを具備することを特徴としている。これによって、パック10進数の有効桁数を効率的に計算することができる。
【0015】
本発明の請求項7に記載のRISC計算機は、演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、cmplt.p命令を1サイクルに1命令実行することを特徴とする。これによって、条件判定及び分岐命令を使用することなく、fsbit命令及びcmplt.p命令によりパック10進数の有効桁数を得ることができ、並列性が向上し、高速化が図られる。
【0016】
本発明の請求項8に記載のRISC計算機は、演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、cmplt.p命令を1サイクルに複数命令実行することを特徴とする。これにより、cmplt.p命令が1サイクルに複数命令実行され、並列性の向上により処理サイクル数を減少させて高速処理を可能とする。
【0017】
本発明の請求項9に記載のRISC計算機は、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、第2オペランドの1バイトデータが第1オペランドの1バイトデータより大きいか否か検出し、各1バイト単位の比較結果である各1ビットをディスティネーションオペランドの下位側に格納する比較手段を備える演算回路を具備することを特徴とする。これにより、1ワードのデータを1バイトに分割して各1バイト毎の大小比較をする演算が1命令により実行される。つまり、1バイトのデータの大小比較を複数同時に実行可能である。
【0018】
本発明の請求項10に記載のRISC計算機は、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、第2オペランドの1バイトデータが第1オペランドの1バイトデータと等しいか否か検出し、各1バイト単位の比較結果である各1ビットをディスティネーションオペランドの下位側に格納する比較手段を備える演算回路を具備することを特徴とする。これにより、1ワードのデータを1バイトに分割して各1バイト毎に等しいか否か比較する演算が1命令により実行される。つまり、1バイトのデータの一致検出を複数同時に実行可能である。
【0019】
本発明の請求項11に記載のRISC計算機は、複数ワードのデータについて、請求項9に記載の、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、第2オペランドの1バイトデータが第1オペランドの1バイトデータより大きいか否か検出し、各1バイト単位の比較結果をディスティネーションオペランドの下位側に格納するcmplt.b命令を実行する演算回路を用いてワード単位に処理を行うワード単位処理手段と、このワード単位処理手段による処理結果を前記複数ワードのワードデータ順に並べる処理を行う2次処理処理手段と、この2次処理手段による処理結果について、請求項1に記載の演算回路を用いて、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを示す数値を得る最先セットビット値検出手段と、この最先セットビット値検出手段の検出結果に基づき有効バイト長を得る有効バイト長取得手段とを具備することを特徴としている。これによって、複数ワードのデータの有効バイト長を効率的に計算することができる。
【0020】
本発明の請求項12に記載のRISC計算機は、演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、cmplt.b命令を1サイクルに1命令実行することを特徴とする。これによって、条件判定及び分岐命令を使用することなく、fsbit命令及びcmplt.b命令によりデータの有効バイト長を得ることができ、並列性が向上し、高速化が図られる。
【0021】
本発明の請求項13に記載のRISC計算機は、演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、cmplt.b命令を1サイクルに複数命令実行することを特徴とする。これにより、cmplt.b命令が1サイクルに複数命令実行され、並列性の向上により処理サイクル数を減少させて高速処理を可能とする。
【0022】
本発明の請求項14に記載のRISC計算機は、ゾーン10進数の複数ワードからなる演算結果データについて、請求項10に記載の、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、第2オペランドの1バイトデータが第1オペランドの1バイトデータと等しいか否か検出し、各1バイト単位の比較結果をディスティネーションオペランドの下位側に格納するcmpeq.b命令を実行する演算回路を用いてワード単位に処理を行うワード単位処理手段と、このワード単位処理手段による処理結果を前記複数ワードのワードデータ順に並べ、この並べたデータに対して使用されているバイトと使用されていないバイトとを識別する処理を行う2次処理処理手段と、この2次処理手段による処理結果について、請求項1に記載の演算回路を用いて、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを示す数値を得る最先セットビット値検出手段と、この最先セットビット値検出手段の検出結果と与えられる正規のバイト数に基づきゾーン10進数のデータがオーバーフローか否か検出するオーバーフロー検出手段と、を具備することを特徴とする。これによって、ゾーン10進数からなる複数ワードのデータのオーバーフローを効率的に計算することができる。
【0023】
本発明の請求項15に記載のRISC計算機は、演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、cmpeq.b命令を1サイクルに1命令実行することを特徴とする。これによって、条件判定及び分岐命令を使用することなく、fsbit命令及びcmpeq.b命令により演算結果において使用されているバイト長を得てオーバーフローを検出することができ、並列性が向上し、高速化が図られる。
【0024】
本発明の請求項16に記載のRISC計算機は、演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、cmpeq.b命令を1サイクルに複数命令実行することを特徴とする。これにより、cmpeq.b命令が1サイクルに複数命令実行され、並列性の向上により処理サイクル数を減少させて高速処理を可能とする。
【0025】
本発明の請求項17に記載のRISC計算機は、命令に対する演算を実行する演算回路を複数有し、各命令を並列実行するVLIW方式を採用したRISC計算機であって、前記複数の演算回路の所要の演算回路が、第3ソースオペランドを取り込む経路と、第2ディスティネーションオペランド出力用の経路とを備え、3つのソースオペランドに対して演算を行い、その結果を2つのディスティネーションオペランドへ出力する5オペランド型命令を実行する演算回路であり、前記複数の演算回路の残りの演算回路が、第2ソースオペランドを取り込む経路と、第1ディスティネーションオペランド出力用の経路とを備え、2つのソースオペランドに対して演算を行い、その結果を1つのディスティネーションオペランドへ出力する3オペランド型命令を実行する演算回路であることを特徴とする。これによって、一時に3つのソースオペランドを与えることができ、第3ソースオペランドの待ち合わせの必要がなく、また、一時に2つのディスティネーションオペランドのライトバックが可能であり、第2ディスティネーションオペランドのライトバック待ちが不要となる。
【0026】
本発明の請求項18に記載のRISC計算機は、5オペランド型命令を実行する演算回路の第3ソースオペランドを取り込む経路へソースオペランドを供給するか、3オペランド型命令を実行する演算回路の第1ソースオペランドを取り込む経路へソースオペランドを供給するか切り換えるソースオペランド切換スイッチと、前記5オペランド型命令を実行する演算回路の第2ディスティネーションオペランド出力用の経路からのディスティネーションオペランドか、前記3オペランド型命令を実行する演算回路の第1ディスティネーションオペランド出力用の経路からのディスティネーションオペランドかを選択するためのディスティネーションオペランド選択スイッチと、上記2つのスイッチを命令に基づき切り換えるデコ−ダとを具備することを特徴とする。これにより、3オペランド型命令のみにより構成される命令列に対しても、また、5オペランド型命令を含む命令列に対しても、処理を行うことが可能である。
【0027】
本発明の請求項19に記載のRISC計算機は、4つの演算回路が備えられており、第1、第3の演算回路が、5オペランド型命令を実行する演算回路で構成され、第2、第4の演算回路が、3オペランド型命令を実行する演算回路で構成されていることを特徴とする。これによって、第0、第1命令フィールド、第2、第3命令フィールドに亘って、それぞれ2ワード長の5オペランド型のRISC命令を配置して実行させることができる。
【0028】
本発明の請求項20に記載のRISC計算機は、RISC命令に拡張用コードがセットされている場合に、デコ−ダは、5オペランド型命令を実行する演算回路へ第3ソースオペランドを供給し、出力される第2ディスティネーションオペランドを選択するように、ソースオペランド切換スイッチとディスティネーションオペランド選択スイッチとの切換制御を行うことを特徴とする。これによって、RISC命令に拡張用コードがセットされている場合に対応して、5オペランド型命令を実行する形態となって処理が行われる。
【0029】
本発明の請求項21に記載のRISC計算機は、第1オペランドの1ワード長のデータと第2オペランドの1ワード長のデータとを夫々4ビット幅のブロックに区分し、第1オペランド各ブロックと第2オペランドの各ブロックとを先頭から順に組み合わせるシャッフル手段と、このシャッフル手段により組み合わされたブロック対における2ブロックの前後配置関係を、第3オペランドの1ワード長のデータに基づき制御する対交換手段と、を具備する演算回路を備えることを特徴とする。これによって、2つの1ワードに存在する4ビット単位のデータを各ワードにまたがって交換して配置を制御して並べ換え、所望の2ワードに変換することが可能となる。
【0030】
本発明の請求項22に記載のRISC計算機は、第1オペランドの1ワード長のデータと第2オペランドの1ワード長のデータとを夫々4ビット幅のブロックに区分し、第1オペランドと第2オペランドのブロックを一列に並べた状態で1ブロックおきに組み合わせ、奇数ブロックの組み合わせの並びの後に偶数ブロックの組み合わせの並びを配置する逆シャッフル手段と、この逆シャッフル手段により組み合わされたブロック対における2ブロックの前後配置関係を、第3オペランドの1ワード長のデータに基づき制御する対交換手段と、を具備する演算回路を備えることを特徴とする。これによって、2つの1ワードに存在する4ビット単位のデータを4ビットの1ブロックおきに組み合わせて交換して配置を制御して並べ換え、所望の2ワードに変換することが可能となる。
【0031】
本発明の請求項23に記載のRISC計算機は、複数ワードのパック10進数データについて、請求項4に記載の、1ワードのデータを4ビット単位に不正閾値データと比較して、各4ビット単位の比較結果をディスティネーションオペランドの下位側に格納するcmplt.p命令を実行する演算回路を用いてワード単位に処理を行う不正パック10進数検出手段と、前記複数ワードのパック10進数データと0とを第1オペランド及び第2オペランドとし、前記不正パック10進数検出手段の結果を第3オペランドとして、請求項21に記載のshx命令を実行する演算回路を用いてshx命令による結果を得るデータ混合手段と、このデータ混合手段による混合結果を第1オペランド及び第2オペランドとし、0を第3オペランドとして、請求項22に記載のishx命令を実行する演算回路を用いて不正データを抽出する不正データ抽出手段と、を具備しパック10進数の不正データを除去することを特徴とする。これによって、パック10進数の不正データの除去を効率良く行うことができる。
【0032】
本発明の請求項24に記載のRISC計算機は、1ワード単位に、不正パック10進数検出手段、データ混合手段、不正データ抽出手段を用いて処理を行い、複数ワード分の処理を繰り返すことを特徴とする。これによって、複数ワードのパック10進数に対しては、そのワード数に対応した繰り返し処理によりパック10進数の不正データの除去を行うことができる。
【0033】
本発明の請求項25に記載のRISC計算機は、演算回路を複数有し、各命令を並列に実行するVLIW方式を採用すると共に、cmplt.p命令を1サイクルに複数命令実行することを特徴とする。これによって、cmplt.p命令が1サイクルに複数命令実行され、並列性の向上により処理サイクル数を減少させて高速処理を可能とする。
【0034】
本発明の請求項26に記載のRISC計算機は、2つのジェネラルレジスタで指定された倍語データを1本に連なった如くの2つのレジスタに配置した状態で、ジェネラルレジスタまたは即値で指定された数だけ左に論理シフトし、この結果前記連なった如くの2つのレジスタにおいて空いた下位ビットに0を挿入する倍語・左論理シフト手段を備える演算回路を具備することを特徴とする。これにより、1命令で倍語単位の左論理シフトを行うことができる。
【0035】
本発明の請求項27に記載のRISC計算機は、2つのジェネラルレジスタで指定された倍語データを1本に連なった如くの2つのレジスタに配置した状態で、ジェネラルレジスタまたは即値で指定された数だけ右に論理シフトし、この結果前記連なった如くの2つのレジスタにおいて空いた上位ビットに0を挿入する倍語・右論理シフト手段を備える演算回路を具備することを特徴とする。これにより、1命令で倍語単位の右論理シフトを行うことができる。
【0036】
本発明の請求項28に記載のRISC計算機は、2つのジェネラルレジスタで指定された倍語データを1本に連なった如くのレジスタに配置した状態で、ジェネラルレジスタまたは即値で指定された数だけ右に算術シフトし、この結果前記連なった如くの2つのレジスタにおいて空いた上位ビットに符号ビットを挿入する倍語・右算術シフト手段を備える演算回路を具備することを特徴とする。これにより、1命令で倍語単位の右算術シフトを行うことができる。
【0037】
本発明の請求項29に記載のRISC計算機は、メモリに記憶されているパック10進数データをレジスタへ転送するRISC計算機であって、上記パック10進数データが記憶されているメモリ上の最上位と最下位のワード境界を検出すると共に、ワード境界と当該パック10進数データの終端との差を検出するワード境界・境界差検出手段と、このワード境界・境界差検出手段により検出されたワード境界を単位として、前記パック10進数が記憶されている範囲のワードをレジスタに読み出すワード単位読出手段と、上記レジスタに読み出されたデータを、上記ワード境界・境界差検出手段により検出された差のデータに応じて、請求項26に記載の倍語・左論理シフト手段を備え、sll.l命令を実行する演算回路によりシフトするシフト手段とを具備することを特徴とする。これによって、メモリ内のパック10進数データをレジスタに転送する場合に、メモリ内からワード単位に読み出してレジスタに適切にセットでき、処理の効率化を図ることができる。
【0038】
本発明の請求項30に記載のRISC計算機は、ワード単位読出手段による読み出しの後に、シフト手段によるシフトを行う動作を繰り返して、所要のパック10進数をレジスタに転送することを特徴とする。これにより、読み出しとシフト、更に読み出しとシフトという繰り返しで、メモリ内のパック10進数データをレジスタに適切に転送してセット可能である。
【0039】
本発明の請求項31に記載のRISC計算機は、演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、ワード単位読出手段による読み出しと、sll.l命令を1サイクルにて並列実行することを特徴とする。これによって、各命令が並列実行され、処理の高速化を図ることができる。
【0040】
本発明の請求項32に記載のRISC計算機は、命令に対する演算を実行する演算回路を複数有し、各命令を並列実行するVLIW方式を採用したRISC計算機において、前記複数の演算回路の所要の演算回路が、第3ソースオペランドを取り込む経路と、第2ディスティネーションオペランド出力用の経路とを備え、3つのソースオペランドに対して演算を行い、その結果を2つのディスティネーションオペランドへ出力する5オペランド型命令を実行する演算回路であり、前記複数の演算回路の残りの演算回路が、第2ソースオペランドを取り込む経路と、第1ディスティネーションオペランド出力用の経路とを備え、2つのソースオペランドに対して演算を行い、その結果を1つのディスティネーションオペランドへ出力する3オペランド型命令を実行する演算回路であり、前記5オペランド型命令を実行する演算回路が、2つのジェネラルレジスタで指定された固定小数点1ワードデータを、第3のジェネラルレジスタで指定されたキャリーと共に加算し、加算結果を第1のディスティネーションレジスタに格納し、加算結果のキャリーを第2のディスティネーションレジスタに格納する加算手段を備えることを特徴とする。これにより、固定小数点1ワードデータのキャリー付加算を行うことができる。
【0041】
本発明の請求項33に記載のRISC計算機は、命令に対する演算を実行する演算回路を複数有し、各命令を並列実行するVLIW方式を採用したRISC計算機において、前記複数の演算回路の所要の演算回路が、第3ソースオペランドを取り込む経路と、第2ディスティネーションオペランド出力用の経路とを備え、3つのソースオペランドに対して演算を行い、その結果を2つのディスティネーションオペランドへ出力する5オペランド型命令を実行する演算回路であり、前記複数の演算回路の残りの演算回路が、第2ソースオペランドを取り込む経路と、第1ディスティネーションオペランド出力用の経路とを備え、2つのソースオペランドに対して演算を行い、その結果を1つのディスティネーションオペランドへ出力する3オペランド型命令を実行する演算回路であり、前記5オペランド型命令を実行する演算回路が、第1のジェネラルレジスタで指定された固定小数点1ワードデータから第2のジェネラルレジスタで指定された固定小数点1ワードデータを減算すると共に、第3のジェネラルレジスタで指定されたキャリーの反転値を減算し、減算結果を第1のディスティネーションレジスタに格納し、減算結果のキャリーの反転値を第2のディスティネーションレジスタに格納する減算手段を備えることを特徴とする。これにより、固定小数点1ワードデータのキャリー付減算を行うことができる。
【0042】
本発明の請求項34に記載のRISC計算機は、命令に対する演算を実行する演算回路を複数有し、各命令を並列実行するVLIW方式を採用したRISC計算機において、前記複数の演算回路の所要の演算回路が、第3ソースオペランドを取り込む経路と、第2ディスティネーションオペランド出力用の経路とを備え、3つのソースオペランドに対して演算を行い、その結果を2つのディスティネーションオペランドへ出力する5オペランド型命令を実行する演算回路であり、前記複数の演算回路の残りの演算回路が、第2ソースオペランドを取り込む経路と、第1ディスティネーションオペランド出力用の経路とを備え、2つのソースオペランドに対して演算を行い、その結果を1つのディスティネーションオペランドへ出力する3オペランド型命令を実行する演算回路であり、前記5オペランド型命令を実行する演算回路が、2つのジェネラルレジスタで指定されたパック10進数1ワードデータを、第3のジェネラルレジスタで指定されたキャリーと共に加算し、加算結果を第1のディスティネーションレジスタに格納し、加算結果のキャリーを第2のディスティネーションレジスタに格納する加算手段を備えることを特徴とする。これにより、パック10進数1ワードデータのキャリー付加算を行うことができる。
【0043】
本発明の請求項35に記載のRISC計算機は、命令に対する演算を実行する演算回路を複数有し、各命令を並列実行するVLIW方式を採用したRISC計算機において、前記複数の演算回路の所要の演算回路が、第3ソースオペランドを取り込む経路と、第2ディスティネーションオペランド出力用の経路とを備え、3つのソースオペランドに対して演算を行い、その結果を2つのディスティネーションオペランドへ出力する5オペランド型命令を実行する演算回路であり、前記複数の演算回路の残りの演算回路が、第2ソースオペランドを取り込む経路と、第1ディスティネーションオペランド出力用の経路とを備え、2つのソースオペランドに対して演算を行い、その結果を1つのディスティネーションオペランドへ出力する3オペランド型命令を実行する演算回路であり、前記5オペランド型命令を実行する演算回路が、第1のジェネラルレジスタで指定されたパック10進数1ワードデータから第2のジェネラルレジスタで指定されたパック10進数1ワードデータを減算すると共に、第3のジェネラルレジスタで指定されたキャリーの反転値を減算し、減算結果が負数の場合には10の補数として、減算結果を第1のディスティネーションレジスタに格納し、減算結果のキャリーの反転値を第2のディスティネーションレジスタに格納する減算手段を備えることを特徴とする。これにより、パック10進数1ワードデータのキャリー付減算を行うことができる。
【0044】
本発明の請求項36に記載のRISC計算機は、複数ワードのパック10進数からなる第1のデータと複数ワードのパック10進数からなる第2のデータのそれぞれの符号の一致不一致を検出する一致不一致手段と、前記符号が一致していることが検出された場合に、addc.p命令を実行する請求項34に記載の演算回路を用いて前記第1のデータと第2のデータとをワード単位に加算する加算手段と、前記符号が不一致であることが検出された場合に、subc.p命令を実行する請求項35に記載の演算回路を用いて前記第1のデータと第2のデータとをワード単位に減算する減算手段とを具備し、加減算の各段階で生じたキャリーを次段階にて用いて複数ワードのパック10進数の加算を行うことを特徴とする。これによって、複数ワードのパック10進数データの加算が1ワード単位に実行されることから、複数ワードのパック10進数データの加算が高速処理されることになる。
【0045】
本発明の請求項37に記載のRISC計算機は、複数ワードのパック10進数からなる第1のデータと複数ワードのパック10進数からなる第2のデータのそれぞれの符号の一致不一致を検出する一致不一致手段と、前記符号が不一致であることが検出された場合に、addc.p命令を実行する請求項34に記載の演算回路を用いて前記第1のデータと第2のデータとをワード単位に加算する加算手段と、前記符号が一致していることが検出された場合に、subc.p命令を実行する請求項35に記載の演算回路を用いて前記第1のデータと第2のデータとをワード単位に減算する減算手段とを具備し、加減算の各段階で生じたキャリーを次段階にて用いて複数ワードのパック10進数の減算を行うことを特徴とする。これによって、複数ワードのパック10進数データの減算が1ワード単位に実行されることから、複数ワードのパック10進数データの減算が高速処理されることになる。
【0046】
本発明の請求項38に記載のRISC計算機は、第1の1ワードデータの最下位4ビットから4ビット間隔をおいて、パック10進数を取り出し、この複数のパック10進数データと第2の1ワードデータの最下位4ビットのパック10進数データとを掛け合わせて、2桁のパック10進数データを上記第1の1ワードデータに存在するパック10進数データと同個数得て、ディスティネーションオペランドに出力する乗算手段を備える演算回路を具備することを特徴とする。これによって、パック10進数を1桁おきに並べて被乗数を構成し、これに1桁のパック10進数データを掛けて、2桁単位のパック10進数による乗算結果を得ることが可能である。
【0047】
本発明の請求項39に記載のRISC計算機は、1ワードのパック10進数からなる被乗数データと、パック10進数の0が1ワード集合されてなるデータとをshx命令を実行する請求項21に記載の演算回路を用いて完全シャッフル処理する前処理手段と、この前処理手段により完全シャッフル処理された結果の2桁毎に対し、mul.p命令を実行する請求項38に記載の演算回路を用いて乗数を構成する1桁のパック10進数データを掛け合わせて2桁単位の結果を得る乗算手段と、上記乗算手段により得られた結果に対しishx命令を実行する請求項22に記載の演算回路を用いて逆完全シャッフル処理して上位桁と下位桁に分離する桁分離手段と、上記桁分離手段により分離された上位桁の結果に対しsll.l命令を実行する請求項26に記載の演算回路を用いて4ビットの左シフトを生じさせて、桁上がりによる桁位置との一致を図る桁位置補正手段と、この桁位置補正手段により補正された結果と、上記桁分離手段により分離された下位桁の結果とをaddc.p命令を実行する請求項34に記載の演算回路を用いて加算すると共に、加算の結果生じたキャリーを前記桁位置補正手段により上位ワードへシフトされた数値に加算して、パック10進数データの乗算結果を得る加算手段と、を具備することを特徴とする。これによって、1ワードのパック10進数からなる被乗数データと1桁のパック10進数からなる乗数データとの乗算が行われ、結果を得ることができる。
【0048】
本発明の請求項40に記載のRISC計算機は、複数ワードのパック10進数の被乗数と複数ワードのパック10進数の乗数との乗算を行う場合には、乗数の各桁のデータ毎に、被乗数の各ワードに対して、請求項39に記載の各手段による演算を繰り返して結果を得て、更に、乗数の桁数を進めて同様の演算を繰り返して行い、それぞれの結果に必要なシフトを生じさせて最終結果とすることを特徴とする。これによって、複数ワードのパック10進数の被乗数と複数ワードのパック10進数の乗数との乗算演算を行うことが可能である。
【0049】
【発明の実施の形態】
以下添付図面を参照して、本発明の実施例に係るRISC計算機を説明する。各図において同一の構成要素には、同一の符号を付して重複する説明を省略する。図1に本発明の実施の形態に係るRISC計算機の要部ブロック図が示されている。RISC計算機は、オペランドデータがセットされるレジスタ及びディスティネーションレジスタが複数設けられているレジスタファイル1と、このレジスタファイル1の所要のレジスタのデータを用いてアンド(and)、オア(or)、イクスクルーシブオア(xor)、ノット(not)等の論理演算、更に、加算、減算等の従来からの算術演算と、シフト、ローテートなどの処理を行う演算回路2とを有し、演算回路2とレジスタファイル1との間には、入力ポート3、出力ポート4とが設けられている。
【0050】
主メモリ5には、命令およびデータが記憶されており、プログラムカウンタ(PC)6の指示アドレスの命令が読み出され、デコ−ダ7に与えられる。デコ−ダ7は、命令をデコードし、結果を演算回路2へ与えて所要の論理演算、算術演算やデータ処理を行わせる。主メモリ5内のデータは演算回路2を介してレジスタファイル1へロードされ、逆に、レジスタファイル1内のデータが主メモリ5へストアされる。プログラムカウンタ6は、通常はインクリメンタ8により歩進され、ジャンプ命令等の場合に、ジャンプ先アドレス等が演算回路2から、または、加算器からセットされる。
【0051】
本実施の形態の演算回路2は、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを検出する手段を備える。別言すると、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを検出し、結果をディスティネーションオペランドへ書き込む命令(以下、fsbit命令)を備える。
【0052】
fsbit命令は、図2の101に示されるように、括弧内に処理対象のデータが格納されているジェネラルレジスタ(%rs1)と、結果を書き込むディスティネーションレジスタ(%rd1)とを指定して記述される。この101の表記の右には、ジェネラルレジスタ(rs1)にfsbit命令の処理を施した結果を、ディスティネーションレジスタ(rd1)に書き込むことを示す表記102が対応付けられている。実際の例を図2により説明すると、ジェネラルレジスタ(rs1)に、図2に記載の通り32ビットのデータが格納されているときには、先頭から4番目の「1」を検出して、このビットをLSBから数えてビット番号「28」を得て、この28(=1c)をディスティネーションレジスタ(rd1)に書き込む。また、検索の結果、セットされているビットが見つからなかった場合(つまり、指定データが全ビット「0」の場合)には、ディスティネーションレジスタ(rd1)に「#ffffffff」を書き込む。
【0053】
図3には、上記fsbit命令を実現するため、図1の演算回路2に搭載される構成が示されている。同図に示されるように、1ワード32ビットのデータを8ビット単位にブロック分けして、各ブロック夫々にセットされたビットがあるか否かの検出をオアゲート10−1〜10−4からなる検出手段11にて行う。そして、上記オアゲート10−1〜10−4の出力を4入力オアゲート12へ導き、更にその反転信号をインバータ13により得て、ディスティネーションレジスタ(rd1)に書き込むデータ中の上位27ビットのデータを作成する。つまり、オアゲート10−1〜10−4の出力の全てが「0」であれば、上記27ビットにはオール「1」が書き込まれ、その他の場合には、オール「0」が書き込まれる。また、8ビット単位にブロック分けした上位2ブロックに関するオアゲート10−1、10−2の出力の論理和をオアゲート14により得てマルチプレクサ15へ選択信号s0として与える。また、8ビット単位にブロック分けした上位3ブロックに関し、そのブロック内にセットされているビットがあるか否かに応じた信号を、インバータとアンドゲート及びオアゲートからなる論理回路16により得て、マルチプレクサ15へ選択信号s1として与える。マルチプレクサ15には、上記各ブロックの夫々の上位7ビットが入力され、上記の選択信号s0、s1によりいずれかの7ビットが選択されて出力される。
【0054】
上記選択信号s0、s1は、上記ブロックを左から第3、2、1、0パートとし、これらのパートを左からサーチしたとき、どのパートの論理和に初めて否(「0」)が現れるのかを示す。つまり、(s0,s1)が(1,1)のときは第3パート、(1,0)のときは第2パート、(0,1)のときは第1パートの論理和に初めて否(「0」)が現れることを示す。なお、第0パートの論理和に初めて否(「0」)が現れるとき及び、全てのパートの論理和が「0」であるときに、(s0,s1)=(0,0)となるが、インバータ13の出力信号により区別可能である。上記選択信号s0、s1により、どのパートの論理和に初めて否(「0」)が現れるのかが示され、これに対応するブロックの上位7ビットのデータがマルチプレクサ15において選択される。
【0055】
上記で選択された7ビットのデータは、オアゲート、アンドゲート及びインバータにより構成される論理回路17に導かれて、最初に「1」が現れるのが8ビット中のいずれの位置であるかを示す3ビットの数値とされる。そして、この3ビットの数値と、選択信号s0,s1は、イクスクルーシブオアゲート18−1〜18−5に導かれて、インバータ13の出力との排他的論理和が作成されて、オール「0」のときに対応した結果がえられるようにされる。そして、選択信号s0,s1は、第5ビット目及び第4ビット目を構成し、最初に「1」が現れるのが4つのパート中のいずれの位置であるかを示す数値とされる。
【0056】
図4には、上記fsbit命令を実現するため、図1の演算回路2に搭載される他の構成例が示されている。同図に示されるように、1ワード32ビットのデータを4ビット単位にブロック分けして、各ブロック夫々にセットされたビットがあるか否かの検出を複数のオアゲートからなる第1の検出手段にて行う。そして、各ブロックの論理和演算結果を順次オアゲートにより加えて、最終的にその反転信号をインバータ13により得て、ディスティネーションレジスタ(rd1)に書き込むデータ中の上位27ビットのデータを作成する。図3における論理回路16と同一の構成の回路によって、各ブロックの上位3ビットの第1ビットがセットされているか否か、または、各ブロックの上位3ビットの第2ビットと第3ビットが(0,1)の組み合わせになっているかを検出する第2の検出手段を構成する。そして、上記検出結果に基づき、図3に示される如く結線されたオアゲートとアンドゲート及びインバータを用いて1ワードデータ中の、最上位側から最初にセットされているビットが、最下位ビットから数えて何ビット目であるかの数値を作成する数値作成手段を構成する。イクスクルーシブオアゲート18−1〜18−5は、インバータ13の出力との排他的論理和を作成して、オール「0」のときに対応した結果が得られるようにされている。
【0057】
以上の通り、本実施の形態によって、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかの数値が、1命令によって得られる。
【0058】
上記の演算回路2を備えたRISC計算機は、複数ワードからなるデータの有効ビット長を計算するRISC計算機として機能する。従来のRISC計算機においては、例えば、図5に示すように、4ワード(1ワード=32ビット)からなるデータの有効ビット長を計算する場合には、図6に示すフローチャートのプログラムにより処理を行っていた。つまり、レジスタr0に、4ワード長を示す128をセットし、レジスタr1に最上位ワードの読み出しアドレスEAをセットする(S1)。次に、レジスタr0の値(ここでは、128)が0より大であるか否かを検出し(S2)、ここでは、T(真)へ分岐する。次に、レジスタr1のアドレスにより指示された1ワードの内容をレジスタr2へセットし(S3)、このレジスタr2の内容である最初の1ワードが、オール0であるか否かを検出する(S4)。この例では、最初の1ワードはオール0であるから、T(真)へ分岐する。次に、レジスタr0の内容である128から1ワードに対応する32を引いた数96をレジスタr0へセットするとともに、レジスタr1の内容であるEAに4を加えて、第2番目の1ワードを指定するアドレスとしてレジスタr1へセットする(S5)。
【0059】
これにより、ステップS2〜S4へと進むと、第2番目の1ワードが図5に示されるように、オール0ではないので、F(偽)へ分岐し、レジスタr3へ16をセットし(S6)、このレジスタr3の内容が1以上であるか否かを検出する(S7)。ここでは、T(真)へ分岐して、レジスタr2の内容をレジスタr3の内容である16右シフトしてレジスタr4にセットする(S8)。この結果、第2番目の1ワード中の上位16ビットが下位16ビットに残され、上位16ビットに0が埋められたデータがレジスタr4にセットされる。次に、このr4のデータがオール0であるか否か検出される(S9)。この例では、図5から明らかなようにオール0ではなく、F(偽)へ分岐し、レジスタr4のデータをレジスタr2へセットして(S10)、上記レジスタr3の内容である16を1右シフト(つまり、1/2)することにより、8へ変換する(S12)。
【0060】
更に、ステップS6からS12の処理を3回繰り返すと、レジスタr3の内容は1となると共に、レジスタr4の内容はオール0となる。この結果、ステップS9においてT(真)へ分岐し、レジスタr0の内容である96からレジスタr3の内容である1を引いて95を得てレジスタr0にセットする(S11)。そして、次のステップS12におけるレジスタ3の内容の1右シフトにより、レジスタr3の内容は0となり、再び戻るステップS7においてF(偽)へ分岐して、エンドとなる。即ち、レジスタr0にセットされている95が有効ビット長ということになる。
【0061】
図7には、上記図6のフローチャートに対応するニーモニック表記の命令コード列が示されている。この様な従来のRISC計算機による処理では、1ワード内がオール0か否かの処理においては、1ワード単位で行われているものの、図6、図7の破線枠内に示される処理では、16ビット、8ビット、4ビット、2ビット、1ビットと処理単位を小さくして検出を行う繰り返し処理が必要であり、最終的な検出までの処理回数が多くなるという問題点がある。更に、図6、図7の破線枠内に示される処理は、制御依存関係が強く、16ビット、8ビット、4ビット、2ビット、1ビットと処理単位が小さくなるにも拘らず、並列実行できない問題がある。
【0062】
本実施の形態に係るfsbit命令を実行するRISC計算機により上記問題点が解決される。つまり、図8に示されるように、最上位有効ワード検出手段31、ワード位置検出手段32、ビット位置検出手段33、有効ビット長取得手段34を具備する。上記最上位有効ワード検出手段31は、複数ワードのデータについて、ワード単位に当該ワード内が全て0であるか否かに基づき、複数ワードの内のセットされたビットが存在する最上位有効ワードを検出する。ワード位置検出手段32は、上記最上位有効ワード検出手段31により検出された結果に対して図1に記載のfsbit命令を実行可能な演算回路2を用いて、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを算出し、更に、この結果を用いて当該ワードの位置を示す数値を得る。更に、ビット位置検出手段33は、上記有効最上位ワード検出手段31により検出された最上位有効ワードに係る1ワードデータに対して図1に記載のfsbit命令を実行可能な演算回路2を用いて、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを示す数値を得る。そして、有効ビット長取得手段34は、上記ビット位置検出手段33及びワード位置検出手段32の検出結果に基づき、複数ワードからなるデータの有効ビット長データを得る。
【0063】
具体的には、図3または図4に記載の構成を有する演算回路2を備える本発明のRISC計算機は、図9に示されるフローチャートの処理を行う。ここで処理される複数ワードのデータは図5に示されたデータである。まず、レジスタr1に最上位ワードの読み出しアドレスEAに3ワードのバイト数(12バイト)に対応する12を加えて最下位の1ワードの読み出しアドレスとしてセットし、どのワードまでオール0となっていないかを検出した回数を置数するためのレジスタr2に1をセットし、初めてセットされたデータが現れた位置を置数するためのレジスタr0を初期化して0をセットする(S21)。次に、レジスタr1のアドレスにより指示された1ワードの内容をレジスタr3へセットし(S22)、このレジスタr3の内容である最下位の1ワードが、オール0でないか否かを検出する(S23)。この図5の例では、オール0ではないので、T(真)へ分岐してレジスタr0の内容である0とレジスタr2の内容である1との論理和(オア)を作成して、その結果である1をレジスタr0へセットすると共に、レジスタr3の内容である最下位の1ワードの内容をレジスタr4へセットする(S24)。更に、レジスタr2の内容である1を1左シフトして2倍の2とし、これをレジスタr2へセットすると共に、レジスタr1の内容である(EA+12)から1ワードのバイト数に相当する4を引いて(EA+8)として、これをレジスタr1へセットする(S25)。そしてレジスタr2の内容が8以下であることを検出する(S26)。ここでは、2であるからT(真)へ分岐し、ステップS22へ戻って、アドレス(EA+8)により読み出される最下位から2番目の1ワードについて上記と同様の処理を行う。このようなループ処理を3回繰り返すと、レジスタr0の内容は最下位ワードから3つ目を示す111となり、レジスタr4の内容は最上位から2番目の1ワードとなり、3回の繰り返しによりレジスタr2の値は1000(=8)となる。このため、次のループ処理でにおけるステップS23では、最上位の1ワードがオール0であるか否かが判別され、図5から明らかなようにオール0であるためにF(偽)へ分岐し、ステップ25の処理の結果、レジスタr2の内容は10000(=16)となり、次のステップS26においてF(偽)へ分岐する。ここまでの処理において、レジスタr0には、何ワードまでにデータがセットされているかを示すデータ(ここでは、r0=111)がセットされ、レジスタr4には最上位側から最初にセットされているデータが存在する1ワードが(ここでは、第2番目の1ワード)がセットされている。
【0064】
次に、レジスタr0が0であるか否かを判別する(S27)。この図5の例では、レジスタr0の内容は111となっているためにF(偽)へ分岐し、ステップS28において、fsbit命令を用いて、レジスタr0内の111について処理を行い、結果である「2」をレジスタr0へセットし、これを5左シフトし32倍して64を得てレジスタr0へセットする(S29)。つまり、第2バイトまでセットされたデータがあることに対応して、1ワードが32ビットであるから、これの2倍の64ビットまでセットされたデータがあるというデータが得られ、レジスタr0に「64」がセットされている。次に、fsbit命令を用いて、レジスタr4にセットされている図5のデータにおける最上位から2番目の1ワードについて処理を行い、30を得てレジスタr1へセットする(S30)。つまり、最先のセットされた1ワード内では、ビット番号30に、最初にセットされたデータ(つまり、1)が現れることが示される。そして、次にレジスタr0の内容の64とレジスタr1の内容の30と1とを加えて95を得て、これをレジスタr0にセットして有効ビット長とする(S31)。ここで、1を加えるのは、ステップS30において、fsbit命令を用いるため、ビット位置と検出結果のビットの番号とに1のずれが生じるためである。
【0065】
図10に、上記図9のフローチャートに対応するニーモニック表記の命令コード列が示されている。このように、本実施の形態においては、1ワード内における処理及び有効ビットの数値を作成する処理にて、ループによる繰り返し処理ではなく、fsbit命令を用いて処理が可能であり、その分処理の簡素化と高速化が図られる。
【0066】
本発明の次の実施の形態に係るRISC計算機は、VLIW方式を採用しており、その要部は図11に示されるようである。つまり、図1の演算回路2と等しい構成を有する演算回路2−1〜2−4が並列処理を行う。デコ−ダ21は、各演算回路2−1〜2−4に命令のデコード結果を与えて夫々に所定の演算を行わせる。演算処理すべきオペランドデータはレジスタ22から入力ポート23を介して各演算回路2−1〜2−4に取り出され、演算処理結果は各演算回路2−1〜2−4から出力ポート24を介してレジスタファイル22へ戻される。
【0067】
この様な構成のRISC計算機により、図10に示される命令コード列の処理を並列実行させる場合には、図12に示される命令コード列の処理を行わせることになる。この図12の命令コード列においては(以降の説明でもそうであるが)、セミコロン「;」の前に記載されている0〜3の記号は、それぞれ演算回路2−1〜2−4において実行される命令であることを示し、0〜3の記号が抜けている場合には該当する演算回路(2−1〜2−4の1つ)がその前の命令の実行のために用いられていることを示す。また、括弧[ ]内のtは真への分岐先を、fは偽の分岐先を示し、mov命令の前に付された[0t]〜[3t]は、tstne命令等のテスト命令が真となるときのそれぞれ@0〜@3に対応する処理であることを示し、add命令の前に付された[0f]はtstbz命令等のテスト命令が偽となるときに対応する処理であることを示す。この表記は、以下の実施の形態においても同様な意味に用いている。
【0068】
この様に、本発明の実施例に係るRISC計算機によれば、演算回路2−1〜2−4がfsbit命令を実行可能であり、セットされているビット位置の検出を条件判定と分岐命令で行う必要がないので、有効ビット長計算機として動作させたときに、並列性の向上を図ることができ、高速な処理が可能である。
【0069】
従来のRISC計算機は、前述の通り、レジスタ長は64ビットや32ビットであり、これらをビット単位に操作する命令として、and、or、xor、notなどの論理演算やシフト、ローテートなどを用いて処理を行っている。そして、これらの命令を用いれば、4ビット単位の処理を32ビット長や64ビット長のワード単位での処理として同時複数実行できる。しかし、比較処理に関しては、比較の後に分岐命令が配置されているのが通例である等の理由で、4ビットのデータを複数同時に大小比較、または、一致検出することは困難であった。
【0070】
本実施の形態に係るRISC計算機は、図1の構成を有する。そして演算回路2は、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを4ビット単位に比較して、第2オペランドの4ビットデータが第1オペランドの4ビットデータより大きいか否か検出し、各4ビット単位の比較結果をディスティネーションオペランドの下位側に格納する比較手段を備える。また、演算回路2は、1ワードのデータを4ビット単位に比較して、第2オペランドの4ビットデータが第1オペランドの4ビットデータと等しいか否か検出し、各4ビット単位の比較結果をディスティネーションオペランドの下位側に格納する比較手段を備える。
【0071】
別言すると、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを4ビット単位に比較して、第2オペランドの4ビットデータが第1オペランドの4ビットデータより大きいか否か検出し、各4ビット単位の比較結果をディスティネーションオペランドの下位側に格納する命令(以下、cmplt.p命令)を備える。また、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを4ビット単位に比較して、第2オペランドの4ビットデータが第1オペランドの4ビットデータと等しいか否か検出し、各4ビット単位の比較結果をディスティネーションオペランドの下位側に格納する命令(以下、cmpeq.p命令)を備える。
【0072】
cmplt.p命令は、図13の103に示されるように、括弧内に処理対象のデータが格納されている2つのジェネラルレジスタ(%rs1)、(%rs2)と、結果を書き込むディスティネーションレジスタ(%rd1)とを指定して記述される。この103の表記の右には、ジェネラルレジスタ(%rs2)のデータがジェネラルレジスタ(%rs1)のデータより大であることを条件に、ディスティネーションレジスタ(%rd1)に1を書き込むことを示す表記104が対応付けられている。また、図13における105の表記は、ディスティネーションレジスタ(%rd1)のビット位置と、比較結果及び比較対象のビット位置との関係を示すものである。例えば、表記105の第1行目は、ジェネラルレジスタ(%rs2)の位置28から31までの4ビットのデータがジェネラルレジスタ(%rs1)の位置28から31までの4ビットのデータより大であることを条件に、ディスティネーションレジスタ(%rd1)の位置31に1を書き込むことを示す。この条件が成り立たないときには、ディスティネーションレジスタ(%rd1)には、0がセットされる。
【0073】
また、cmpeq.p命令は、図14の106に示されるように、括弧内に処理対象のデータが格納されている2つのジェネラルレジスタ(%rs1)、(%rs2)と、結果を書き込むディスティネーションレジスタ(%rd1)とを指定して記述される。この106の表記の右には、ジェネラルレジスタ(%rs1)のデータとジェネラルレジスタ(%rs2)のデータとが等しいことを条件に、ディスティネーションレジスタ(%rd1)に1を書き込むことを示す表記107が対応付けられている。また、図14における108の表記は、ディスティネーションレジスタ(%rd1)のビット位置と、比較結果及び比較対象のビット位置との関係を示すものである。例えば、表記108の第1行目は、ジェネラルレジスタ(%rs1)の位置28から31までの4ビットのデータがジェネラルレジスタ(%rs2)の位置28から31までの4ビットのデータと等しいことを条件に、ディスティネーションレジスタ(%rd1)の位置31に1を書き込むことを示す。この条件が成り立たないときには、ディスティネーションレジスタ(%rd1)には、0がセットされる。
【0074】
なお、上記cmplt.p命令、cmpeq.p命令を実現するために、4ビット比較器を8個備えさせて、演算回路2を構成する。4ビット比較器の内部構成は、例えば、SN7485等の論理回路に準じた構成とする。以上の通りの本発明の実施の形態によって、1ワードのデータを4ビットに分割して各4ビット毎に等しいか否か比較する演算、または、1ワードのデータを4ビットに分割して各4ビット毎の大小比較をする演算が1命令により実行される。
【0075】
上記演算回路2を備えたRISC計算機は、複数ワードのパック10進数データについて有効桁数を計算するRISC計算機として機能する。従来のRISC計算機においては、例えば、図15に示されるように、4ワードからなるパック10進数の有効桁数を計算する場合には、図17に示すフローチャートのプログラムにより処理を行っていた。なお、図15に示される数字は、1つ1つがパック10進数を示す(従って、本来は4ビットの2進データ)が、ここでは、簡略化して示している。さて、有効桁数を計算する処理においては、レジスタr0に4ワードに対するパック10進数の桁数である32をセットし、レジスタr1に4ワードのデータの最上位の1ワードの読み出しアドレスをセットする(S33)。次に、レジスタr0の内容が0より大であるか否かを検出する(S34)。ここでは、レジスタr0の内容は32であるから、T(真)へ分岐して、レジスタr1により示されるアドレスに対応する最上位の1ワードのデータをレジスタr2にセットし(S35)、このレジスタr2にセットされたデータがオール0であるか否か検出する(S36)。図15から明らかなように、この例では最上位の1ワードはオール0であるから、T(真)へ分岐して、レジスタr0の内容である32から8(1ワード内のパック10進数の桁数)を引いてレジスタr0にセットすると共に、レジスタr1の内容であるEAに4を加えて最上位から2番目のワードの読み出しアドレスを得て、これをレジスタr1へセットし(S37)、ステップS34からS37を繰り返す。つまり、このステップS34からS37の繰り返しによって、1ワード内のパック10進数がオール0ではない1ワードを最上位側から検出する。
【0076】
この例では、最上位から第3番目の1ワードに初めて0以外のパック10進数が現れるので、そのとき、ステップS36においてF(偽)へ分岐する。このとき、レジスタr0の内容は16となっている。また、レジスタr2には、最上位から第3番目の1ワードのデータ(パック10進数で、00035021)がセットされている。そして、レジスタr3に1ワード(32ビット)の半分である16(ビット)をシフト量としてセットすると共に、このシフト量16(ビット)に対応するパック10進数の桁数である4をレジスタr5にセットし(S38)、次に、レジスタr3の内容が4以上であるか否かを検出する(S39)。ここでは、レジスタr3の内容は16であるので、T(真)へ分岐し、レジスタr2の内容である最上位から第3番目の1ワードのデータをレジスタr3にセットされている16右シフトし、レジスタr4へセットする(S40)。
【0077】
この結果、最上位から第3番目の1ワードに初めて現れる0以外のパック10進数である「3」が1ワード内の最下位の4ビットを構成するようになり、それより上位のパック10進数は0となる。次に、レジスタr4の内容が0か否か検出され(S41)、ここでは、上述の通り0ではないので、F(偽)へ分岐して、レジスタr4の上記内容をレジスタr2へセットし(S42)、更に、レジスタr3の内容を1右シフトしてセットされていた数値16を半分の8へ変更してレジスタr3へセットすると共に、レジスタr5の内容である4も1右シフトしてその半分の2へ変更してこの2をレジスタr5へセットして(S44)、ステップS39へ戻る。そして、ステップS39ではT(真)へ分岐し、ステップS40において、レジスタr2の内容をレジスタr3の内容である8右シフトするとオール0となり、ステップS41においてTへ分岐し、レジスタr0の内容である16からレジスタr5の内容である2を引き14を得てレジスタr0へセットして(S43)、更に、レジスタr3の内容を1右シフトしてセットされていた数値8を半分の4へ変更してレジスタr3へセットすると共に、レジスタr5の内容である2も1右シフトしてその半分の1へ変更してこの1をレジスタr5へセットして(S44)、ステップS39へ戻る。
【0078】
そして、ステップS39では、レジスタr3の内容がまだ4であるからT(真)へ分岐し、ステップS40において、レジスタr2の内容(パック10進数である「3」が1ワード内の最下位の4ビットを構成するデータ)をレジスタr3の内容である4右シフトするとオール0となり、ステップS41においてTへ分岐し、レジスタr0の内容である14からレジスタr5の内容である1を引き13を得てレジスタr0へセットして(S43)、更に、レジスタr3の内容を1右シフトしてセットされていた数値4を半分の2へ変更してレジスタr3へセットすると共に、レジスタr5の内容である1も1右シフトして0へ変更してこの0をレジスタr5へセットして(S44)、ステップS39へ戻る。この結果、ステップS39ではレジスタr3の内容が2であるからF(偽)へ分岐して終了となる。つまり、レジスタr0にセットされている13がパック10進数の有効桁数である。
【0079】
図18には、上記図17のフローチャートに対応するニーモニック表記の命令コード列が示されている。この様な従来のRISC計算機による処理では、当初の1ワード内のパック10進数がオール0か否かの処理においては、1ワード単位で行われているものの、図17、図18の破線枠内に示される処理では、16ビット、8ビット、4ビットと処理単位を小さくして検出を行う繰り返し処理が必要であり、最終的な検出までの処理回数が多くなるという問題点がある。更に、図17、図18の破線枠内に示される処理は、制御依存関係が強く、16ビット、8ビット、4ビットと処理単位が小さくなるにも拘らず、並列実行できない問題がある。
【0080】
本実施の形態に係るfsbit命令及びcmplt.p命令を実行するRISC計算機により上記問題点が解決される。つまり、本実施の形態に係るRISC計算機は図16に示されるように、ワード単位処理手段41、2次処理処理手段42、最先セットビット値検出手段43、有効桁数取得手段44を具備する。ワード単位処理手段41は、複数ワードのパック10進数データについて、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを4ビット単位に比較して、第2オペランドの4ビットデータが第1オペランドの4ビットデータより大きいか否か検出し、各4ビット単位の比較結果をディスティネーションオペランドの下位側に格納するcmplt.p命令を実行する図1の演算回路2を用いてワード単位に処理を行う。2次処理処理手段42は、上記ワード単位処理手段41による処理結果を上記複数ワードのワードデータ順に並べる処理を行う。また、最先セットビット値検出手段43は、上記2次処理手段42による処理結果について、fsbit命令を実行可能な演算回路2を用いて、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを示す数値を得る。更に、有効桁数取得手段44は、この最先セットビット値検出手段43の検出結果に基づきパック10進数の有効桁数を得る。
【0081】
以上のように、fsbit命令及びcmplt.p命令を実行可能な演算回路2を備える本発明のRISC計算機は、図19に示されるフローチャートの処理を行う。ここで処理されるデータは図15に示されているパック10進数のデータである。まず、レジスタr1に最上位ワードの読み出しアドレスEAに12を加えて最下位の1ワードの読み出しアドレスとしてセットする(S45)。次に、レジスタr1のアドレスにより指示された1ワードの内容をレジスタr2へセットし(S46)、このレジスタr2の内容である最下位の1ワードに対して、cmplt.p命令を用いて0と比較し、結果をレジスタr0へセットすると共に、レジスタr1の内容から4を引いて最下位から2番目の1ワードの読み出しアドレスを得てこれをレジスタr1へセットする(S47)。これによって、レジスタr0の下位8ビットには、上記最下位の1ワードのパック10進数のそれぞれに対応して、パック10進数が0でなければ1がセットされ、パック10進数が0であれば0がセットされる。
【0082】
次に、レジスタr1のアドレスにより指示された1ワードの内容をレジスタr2へセットし(S48)、このレジスタr2の内容である最下位から2番目の1ワードに対して、cmplt.p命令を用いて0と比較し、結果をレジスタr2へセットする(S49)。これによって、レジスタr2の下位8ビットには、上記最下位から2番目の1ワードのパック10進数のそれぞれに対応して、パック10進数が0でなければ1がセットされ、パック10進数が0であれば0がセットされる。更に、このレジスタr2の内容を8左シフトして最下位から2番目のワードについての結果位置に位置付け(S50)、レジスタr0とr2との内容の論理和を作成して、処理結果を上記2ワードのワードデータ順に並べ、これをレジスタr0へセットし、また、レジスタr1の内容から4を引いて最上位から2番目の1ワードの読み出しアドレスを得てこれをレジスタr1へセットする(S51)。以下ステップS52からステップS59までにおいて、残りの2ワードについてcmplt.p命令を用いてパック10進数の数値毎に0か否かのデータを得て、シフト及び論理和を用いて図15の4ワードのワードデータ順に並べ、これをレジスタr0へセットする(S59)。以上により、図15から明らかなようにレジスタr0内のデータは、最上位から18個の0が続き、その次は1で、以下、パック10進数が0でない限りにおいて1となる。
【0083】
次に、レジスタr0の内容が0であるか否かを判別する(S60)。この例(図15)では、上記のように、レジスタr0の内容が0ではないから、F(偽)へ分岐してfsbit命令を用いてレジスタr0の内容について処理を行い、これをレジスタr0へセットする(S61)。このとき、図15から判るように、13ビット目が最先頭位置であるから、fsbit命令の性格から、上記13から1を引いた12がレジスタr0にセットされる。次に、レジスタr0の内容である12に1を加えてパック10進数の有効桁数13が得られる(S62)。
【0084】
図20に、上記図19のフローチャートに対応するニーモニック表記の命令コード列が示されている。このように、本実施の形態においては、ワード単位の処理についてはcmplt.p命令を用いて、更に、1ワード内における処理及び有効桁数を作成する処理においてはfsbit命令を用いて、ループによる繰り返し処理をなくし、その分処理の簡素化と高速化が図られる。
【0085】
本発明の他の実施の形態に係るRISC計算機は、VLIW方式を採用しており、その要部は図11に示されるようである。つまり、図1の演算回路2と等しい構成を有する演算回路2−1〜2−4が並列処理を行う。演算回路2−1〜2−4は、cmplt.p命令、fsbit命令を実行可能である。この様な構成のRISC計算機により、図20に示される命令コード列の処理を並列実行させる場合には、図21に示される命令コード列の処理を行わせることになる。この例では、第3番目の演算回路(例えば、2−3)が、cmplt.p命令を1サイクルに1命令実行して4回繰り返す。このようにして、本発明の実施例に係るRISC計算機によれば、演算回路2−1〜2−4がfsbit命令及びcmplt.p命令を実行可能であり、0でないパック10進数がセットされている位置の検出、その処理結果に対し、セットされているビット位置の検出を条件判定と分岐命令で行う必要がないので、有効桁数計算機として動作させたときに、並列性の向上を図ることができ、高速な処理が可能である。
【0086】
上記構成のRISC計算機により、図20に示される命令コード列の処理を並列実行させる場合の別の命令コード列を図22に示す。上記図21の例では、第3番目の演算回路(例えば、2−3)が、cmplt.p命令を1サイクルに1命令実行して4回繰り返すようにしたが、この図22の例では、cmplt.p命令を1サイクルに複数命令実行する。つまり、それぞれ演算回路2−1〜2−4が、第2サイクルにおいて並列的にcmplt.p命令を実行している。これにより、図21の構成では、10サイクル必要であったのに対し、本実施例では7サイクルで済むようになっており、処理の高速化が図られている。
【0087】
従来のRISC計算機は、前述の通り、レジスタ長は64ビットや32ビットであり、これらをビット単位に操作する命令として、and、or、xor、notなどの論理演算やシフト、ローテートなどを用いて処理を行っている。そして、これらの命令を用いれば、1バイト単位の処理を32ビット長や64ビット長のワード単位での処理として同時複数実行できる。しかし、比較処理に関しては、比較の後に分岐命令が配置されているのが通例である等の理由で、1バイトのデータを複数同時に大小比較、または、一致検出することは困難であった。
【0088】
本実施の形態に係るRISC計算機は、図1の構成を有する。そして演算回路2は、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、第2オペランドの1バイトデータが第1オペランドの1バイトデータより大きいか否か検出し、各1バイト単位の比較結果をディスティネーションオペランドの下位側に格納する比較手段を備える。また、演算回路2は、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、第2オペランドの1バイトデータが第1オペランドの1バイトデータと等しいか否か検出し、各1バイト単位の比較結果をディスティネーションオペランドの下位側に格納する比較手段を備える。
【0089】
別言すると、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、第2オペランドの1バイトデータが第1オペランドの1バイトデータより大きいか否か検出し、各1バイト単位の比較結果をディスティネーションオペランドの下位側に格納する命令(以下、cmplt.b命令)を備える。また、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、第2オペランドの1バイトデータが第1オペランドの1バイトデータと等しいか否か検出し、各1バイト単位の比較結果をディスティネーションオペランドの下位側に格納する命令(以下、cmpeq.b命令)を備える。
【0090】
cmplt.b命令は、図23の110に示されるように、括弧内に処理対象のデータが格納されている2つのジェネラルレジスタ(%rs1)、(%rs2)と、結果を書き込むディスティネーションレジスタ(%rd1)とを指定して記述される。この110の表記の右には、ジェネラルレジスタ(%rs2)のデータがジェネラルレジスタ(%rs1)のデータより大であることを条件に、ディスティネーションレジスタ(%rd1)に1を書き込むことを示す表記111が対応付けられている。また、図23における112の表記は、ディスティネーションレジスタ(%rd1)のビット位置と、比較結果及び比較対象のビット位置との関係を示すものである。例えば、表記112の第1行目は、ジェネラルレジスタ(%rs2)の位置24から31までの1バイトのデータがジェネラルレジスタ(%rs1)の位置24から31までの1バイトのデータより大であることを条件に、ディスティネーションレジスタ(%rd1)の位置31に1を書き込むことを示す。この条件が成り立たないときには、ディスティネーションレジスタ(%rd1)には、0がセットされる。
【0091】
また、cmpeq.b命令は、図24の113に示されるように、括弧内に処理対象のデータが格納されている2つのジェネラルレジスタ(%rs1)、(%rs2)と、結果を書き込むディスティネーションレジスタ(%rd1)とを指定して記述される。この113の表記の右には、ジェネラルレジスタ(%rs1)のデータとジェネラルレジスタ(%rs2)のデータとが等しいことを条件に、ディスティネーションレジスタ(%rd1)に1を書き込むことを示す表記114が対応付けられている。また、図24における115の表記は、ディスティネーションレジスタ(%rd1)のビット位置と、比較結果及び比較対象のビット位置との関係を示すものである。例えば、表記115の第1行目は、ジェネラルレジスタ(%rs1)の位置24から31までの1バイトのデータがジェネラルレジスタ(%rs2)の位置24から31までの1バイトのデータと等しいことを条件に、ディスティネーションレジスタ(%rd1)の位置31に1を書き込むことを示す。この条件が成り立たないときには、ディスティネーションレジスタ(%rd1)には、0がセットされる。
【0092】
なお、上記cmplt.b命令、cmpeq.b命令を実現するために、1バイト(8ビット)比較器を4個備えさせて、演算回路2を構成する。1バイト比較器の内部構成は、例えば、SN7485等の論理回路に準じた構成とする。以上の通りの本発明の実施の形態によって、1ワードのデータを1バイトに分割して各1バイト毎に等しいか否か比較する演算、または、1ワードのデータを1バイトに分割して各1バイト毎の大小比較をする演算が1命令により実行されることになる。
【0093】
上記演算回路2を備えたRISC計算機は、複数ワードのデータについて有効バイト長を計算するRISC計算機として機能する。従来のRISC計算機においては、例えば、図25(a)に示されるように、4ワードからなるデータの有効バイト長を計算する場合には、図27に示すフローチャートのプログラムにより処理を行っていた。なお、図25(a)に示される数字は、1つ1つが4ビット分に対応する数を示し、2つの数値により1バイトが構成されているものである。さて、有効バイト長を計算する処理においては、レジスタr0に、4ワードに対応するバイト数16をセットし、レジスタr1に4ワードのデータの最上位の1ワードの読み出しアドレスEAをセットする(S65)。次に、レジスタr0の内容が0より大であるか否かを検出する(S66)。ここでは、レジスタr0の内容は16であるから、T(真)へ分岐して、レジスタr1により示されるアドレスに対応する最上位の1ワードのデータをレジスタr2にセットし(S67)、このレジスタr2にセットされたデータがオール0であるか否か検出する(S68)。図25(a)から明らかなように、この例では最上位の1ワードはオール0であるから、T(真)へ分岐して、レジスタr0の内容である16から4(1ワード内に含まれるバイト数)を引いて12を得て、これをレジスタr0にセットすると共に、レジスタr1の内容であるEAに4を加えて最上位から2番目のワードの読み出しアドレスを得て、これをレジスタr1へセットし(S69)、ステップS66からS69を繰り返す。つまり、このステップS66からS69の繰り返しによって、1ワード内がオール0ではない1ワードを最上位側から検出する。
【0094】
この例では、最上位から第3番目の1ワードに初めて0以外の数3が現れるので、そのとき、ステップS68においてF(偽)へ分岐する。このとき、レジスタr0の内容は8となっている。また、レジスタr2には、最上位から第3番目の1ワードのデータ(00035021)がセットされている。そして、レジスタr3に1ワード(32ビット)の半分である16(ビット)をシフト量としてセットすると共に、このシフト量16(ビット)に対応するバイト数である2をレジスタr5にセットし(S70)、次に、レジスタr3の内容が8以上であるか否かを検出する(S71)。ここでは、レジスタr3の内容は16であるので、T(真)へ分岐し、レジスタr2の内容である最上位から第3番目の1ワードのデータをレジスタr3にセットされている数だけ、つまり16右シフトし、レジスタr4へセットする(S72)。
【0095】
この結果、最上位から第3番目の1ワードに初めて現れる0以外の数である「3」が1ワード内の最下位の4ビットを構成するようになり、それより上位の数は0となる。次に、レジスタr4の内容が0か否か検出され(S73)、ここでは、上述の通り0ではないので、F(偽)へ分岐して、レジスタr4の上記内容をレジスタr2へセットし(S74)、更に、レジスタr3の内容を1右シフトしてセットされていた数値16を半分の8へ変更してレジスタr3へセットすると共に、レジスタr5の内容である2も1右シフトしてその半分の1へ変更してこの1をレジスタr5へセットして(S76)、ステップS71へ戻る。そして、ステップS71ではT(真)へ分岐し、ステップS72において、レジスタr2の内容をレジスタr3の内容である8だけ右シフトするとオール0となり、ステップS73においてT(真)へ分岐し、レジスタr0の内容である8からレジスタr5の内容である1を引き7を得てレジスタr0へセットする(S75)。更に、レジスタr3の内容を1右シフトしてセットされていた数値8を半分の4へ変更してレジスタr3へセットすると共に、レジスタr5の内容である1も1右シフトして0へ変更してこの1をレジスタr5へセットして(S76)、ステップS71へ戻る。
【0096】
この結果、ステップS71ではレジスタr3の内容が4であるからF(偽)へ分岐して終了となる。つまり、レジスタr0にセットされている7が図25(a)に示される当該4ワードの有効バイト長である。
【0097】
図28には、上記図27のフローチャートに対応するニーモニック表記の命令コード列が示されている。この様な従来のRISC計算機による処理では、当初の1ワード内がオール0か否かの処理においては、1ワード単位で行われているものの、図27、図28の破線枠内に示される処理では、16ビット、8ビットと処理単位を小さくして検出を行う繰り返し処理が必要であり、最終的な検出までの処理回数が多くなるという問題点がある。更に、図27、図28の破線枠内に示される処理は、制御依存関係が強く、16ビット、8ビットと処理単位が小さくなるにも拘らず、並列実行できない問題がある。
【0098】
本実施の形態に係るfsbit命令及びcmplt.b命令を実行するRISC計算機により上記問題点が解決される。つまり、本実施の形態に係るRISC計算機は図26に示されるように、ワード単位処理手段45、2次処理処理手段46、最先セットビット値検出手段47、有効バイト長取得手段48を具備する。ワード単位処理手段45は、複数ワードのデータについて、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、第2オペランドの1バイトデータが第1オペランドの1バイトデータより大きいか否か検出し、各1バイト単位の比較結果をディスティネーションオペランドの下位側に格納するcmplt.b命令を実行可能な図1の演算回路2を用いてワード単位に処理を行う。2次処理処理手段46は、上記ワード単位処理手段45による処理結果を上記複数ワードのワードデータ順に並べる処理を行う。また、最先セットビット値検出手段47は、上記2次処理手段46による処理結果について、fsbit命令を実行可能な演算回路2を用いて、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを示す数値を得る。更に、有効バイト長取得手段48は、上記の最先セットビット値検出手段48の検出結果に基づき有効バイト長を得る。
【0099】
以上のように、fsbit命令及びcmplt.b命令を実行可能な演算回路2を備える本発明のRISC計算機は、図29に示されるフローチャートの処理を行う。ここで処理されるデータは図25(a)に示されている4ワードのデータである。まず、レジスタr1に最上位ワードの読み出しアドレスEAに12を加えて最下位の1ワードの読み出しアドレスとしてセットする(S81)。次に、レジスタr1のアドレスにより指示された1ワードの内容をレジスタr2へセットし(S82)、このレジスタr2の内容である最下位の1ワードに対して、cmplt.b命令を用いて0と比較し、結果をレジスタr0へセットすると共に、レジスタr1の内容から4を引いて最下位から2番目の1ワードの読み出しアドレスを得てこれをレジスタr1へセットする(S83)。これによって、レジスタr0の下位4ビットには、上記最下位の1ワードの各バイトのそれぞれに対応して、そのバイトの数値が0でなければ1がセットされ、そのバイトの数値が0であれば0がセットされる。
【0100】
次に、レジスタr1のアドレスにより指示された1ワードの内容をレジスタr2へセットし(S84)、このレジスタr2の内容である最下位から2番目の1ワードに対して、cmplt.b命令を用いて0と比較し、結果をレジスタr2へセットする(S85)。これによって、レジスタr2の下位4ビットには、上記最下位から2番目の1ワードの各バイトのそれぞれに対応して、そのバイトの数値が0でなければ1がセットされ、そのバイトの数値が0であれば0がセットされる。更に、このレジスタr2の内容を4左シフトして最下位から2番目のワードについての結果位置に位置付け(S86)、レジスタr0とr2との内容の論理和を作成して、処理結果を上記2ワードのワードデータ順に並べ、これをレジスタr0へセットし、また、レジスタr1の内容から4を引いて最上位から2番目の1ワードの読み出しアドレスを得てこれをレジスタr1へセットする(S87)。以下ステップS88からステップS95までにおいて、残りの2ワードについてcmplt.b命令を用いて各バイト毎に0か否かのデータを得て、シフト及び論理和を用いて図25の4ワードのワードデータ順に並べ、これをレジスタr0へセットする(S95)。以上により、図25(b)に示すステップS95までの処理結果から明らかなようにレジスタr0内上位17ビットは未使用のため、0がセットされており、第16ビット目からは第8ビット目までは、原データの各バイトの数値が0(00)であるため、0がセットされ、以降は、数値(03、50,21、……)の各バイトの数値に応じて1または0がセットされる。
【0101】
次に、レジスタr0の内容が0であるか否かを判別する(S96)。この例(図25では、上記のように、レジスタr0の内容が0ではないから、F(偽)へ分岐してfsbit命令を用いてレジスタr0の内容について処理を行い、これをレジスタr0へセットする(S97)。このとき、図25から分るように、7ビット目が最先頭位置であるから、fsbit命令の性格から、上記7から1を引いた6がレジスタr0にセットされる。次に、レジスタr0の内容である6に1を加えて図25の4ワードのデータの有効バイト長7が得られることになる(S98)。
【0102】
図30に、上記図29のフローチャートに対応するニーモニック表記の命令コード列が示されている。このように、本実施の形態においては、ワード単位の処理についてはcmplt.b命令を用いて、更に、1ワード内における処理及び有効バイト長を作成する処理においてはfsbit命令を用いて、ループによる繰り返し処理をなくし、その分処理の簡素化と高速化が図られる。
【0103】
本発明の他の実施の形態に係るRISC計算機は、VLIW方式を採用しており、その要部は図11に示されるようである。つまり、図1の演算回路2と等しい構成を有する演算回路2−1〜2−4が並列処理を行う。演算回路2−1〜2−4は、cmplt.b命令、fsbit命令を実行可能である。この様な構成のRISC計算機により、図30に示される命令コード列の処理を並列実行させる場合には、図31に示される命令コード列の処理を行わせることになる。この例では、第3番目の演算回路(例えば、2−3)が、cmplt.b命令を1サイクルに1命令実行して4回繰り返す。このようにして、本発明の実施例に係るRISC計算機によれば、演算回路2−1〜2−4がfsbit命令及びcmplt.b命令を実行可能であり、0でない1バイトデータがセットされている位置の検出、その処理結果に対し、セットされているビット位置の検出を条件判定と分岐命令で行う必要がないので、有効バイト長計算機として動作させたときに、並列性の向上を図ることができ、高速な処理が可能である。
【0104】
上記構成のRISC計算機により、図30に示される命令コード列の処理を並列実行させる場合の別の命令コード列を図32に示す。上記図31の例では、第3番目の演算回路(例えば、2−3)が、cmplt.b命令を1サイクルに1命令実行して4回繰り返すようにしたが、この図32の例では、cmplt.b命令を1サイクルに複数命令実行する。つまり、それぞれ演算回路2−1〜2−4が、第2サイクルにおいて並列的にcmplt.b命令を実行している。これにより、図31の構成では、10サイクル必要であったのに対し、本実施例では7サイクルで済むようになっており、処理の高速化が図られている。
【0105】
上記演算回路2を備えたRISC計算機は、ゾーン10進数からなる複数ワードの演算結果データについてオーバーフローを検出するRISC計算機として機能する。ゾーン10進数は、例えば、図33に示されるように、1バイトを単位に数値を表す形式であり、1バイトの上位4ビットに所定のゾーンビット(ここでは、「0011」)をセットし、1バイトの下位4ビットに数値をセットして構成する。なお、最下位バイトでは、上位4ビットに符号(正または負)のビットがセットされる。係るゾーン10進数のデータを用いた演算結果にオーバーフローが生じたか否かの検出は、従来、バイト単位に比較と分岐とを繰り返す処理により行っていた。例えば、演算結果の最下位バイトから使用未使用を比較により検出して、その結果に応じて分岐して上位方向のバイトについて同様の処理を繰り返す。従って、基本的には、有効バイト長計算の場合の従来例と同様な処理が必要であり、16ビット、8ビットと処理単位を小さくして検出を行う繰り返し処理が必要であり、最終的な検出までの処理回数が多くなるという問題点がある。更に、上記の比較と分岐による処理は、制御依存関係が強く、16ビット、8ビットと処理単位が小さくなるにも拘らず、並列実行できない問題がある。
【0106】
本実施の形態に係るfsbit命令及びcmpeq.b命令を実行するRISC計算機により上記問題点が解決される。つまり、本実施の形態に係るRISC計算機は図34に示されるように、ワード単位処理手段50、2次処理処理手段51、最先セットビット値検出手段52、オーバーフロー検出手段53を具備する。ワード単位処理手段50は、ゾーン10進数の複数ワードからなる演算結果データについて、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、第2オペランドの1バイトデータが前記第1オペランドの1バイトデータと等しいか否か検出し、各1バイト単位の比較結果をディスティネーションオペランドの下位側に格納するcmpeq.b命令を実行可能な図1の演算回路2を用いてワード単位に処理を行う。2次処理処理手段51は、上記のワード単位処理手段50による処理結果を上記複数ワードのワードデータ順に並べ、この並べたデータに対して使用されているバイトと使用されていないバイトとを識別する処理を行う。最先セットビット値検出手段52は、上記の2次処理手段51による処理結果について、fsbit命令を実行可能な図1の演算回路2を用いて、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを示す数値を得る。更に、オーバーフロー検出手段53は、上記の最先セットビット値検出手段52の検出結果と与えられる正規のバイト数に基づき演算結果であるゾーン10進数のデータがオーバーフローか否か検出する。
【0107】
以上のように、fsbit命令及びcmpeq.b命令を実行可能な演算回路2を備える本発明のRISC計算機は、図35に示されるフローチャートの処理を行う。ここで処理されるデータは図36、図37に示されている4ワード(1ワードが4バイトにより構成される。)のデータである。この4ワードのデータはゾーン10進数による演算結果のデータであり、最上位ワードがHIGH、次の1ワードがMIDH、第3番目の1ワードがMIDL、最下位ワードがLOWにより示されている。この演算結果データは、図37に記載の通り、前処理において1桁分を表す8ビットのうちの上位4ビット(ゾーンビット及び符号ビット)が0(オール0)とされている。その結果、図37に示される4ワード16桁(各桁は1ワードのデータ)が得られる。具体的には、最上位ワードHIGHが「0000」、次の1ワードMIDHが「0757」、第3番目の1ワードMIDLが「3014」、最下位ワードLOWが「6706」である。
【0108】
まず、レジスタw0に最上位ワード(HIGH)の読み出しアドレスEAに12を加えて最下位の1ワード(LOW)の読み出しアドレスとしてセットする(S101)。次に、レジスタw0のアドレスにより指示された1ワードの内容をレジスタw2へセットし(S102)、このレジスタw2の内容である最下位の1ワードに対して、cmpeq.b命令を用いて0と比較し、結果をレジスタw3へセットすると共に、レジスタw0の内容から4を引いて最下位から2番目の1ワード(MIDL)の読み出しアドレスを得てこれをレジスタw0へセットする(S103)。以上の処理によって、レジスタw3の下位4ビットには、上記最下位の1ワード(MIDL)の各バイトのそれぞれに対応して、そのバイトの数値が0であれば1がセットされ、そのバイトの数値が1であれば0がセットされる。従って、最上位ワードに対応して下位4ビットに「0010」がセットされたデータがレジスタw3にセットされることになる。
【0109】
次に、レジスタw0のアドレスにより指示された1ワードの内容をレジスタw2へセットし(S104)、このレジスタw2の内容である最下位から2番目の1ワード(MIDL)に対して、cmpeq.b命令を用いて0と比較し、結果をレジスタw2へセットする(S105)。これによって、レジスタw2の下位4ビットには、上記最下位から2番目の1ワードの各バイトのそれぞれに対応して、そのバイトの数値が0であれば1がセットされ、そのバイトの数値が1であれば0がセットされる。従って、図37の例の数値に対しては、下位4ビットに「0100」がセットされたデータがレジスタw2にセットされる。更に、このレジスタw2の内容を4左シフトして最下位から2番目のワードについての結果位置に位置付け(S106)、レジスタw3とw2との内容の論理和を作成して、処理結果を上記2ワードのワードデータ順に並べ、これをレジスタw3へセットし、また、レジスタw0の内容から4を引いて最上位から2番目の1ワードの読み出しアドレスを得てこれをレジスタw0へセットする(S107)。
【0110】
以下ステップS108からステップS115までにおいて、残りの2ワードについてcmpeq.b命令を用いて各バイト毎に0か否かのデータを得て、シフト及び論理和を用いて図37の4ワードのワードデータ順に並べ、これをレジスタw3へセットする(S115)。以上により、ステップS115までの処理結果は図37に示されるw12〜w9の下位4ビットのデータが並べられてレジスタw3へセットされることになる。次に、このレジスタw3のデータと16ビットのオール1との排他的論理和を作成し、つまり、レジスタw3のデータを反転し、これをレジスタw8にセットする(S116)。
【0111】
次に、レジスタw0の内容が0であるか否かを判別する(S117)。この例(図37)では、上記の記載から明らかなように、レジスタw8の内容が0ではないから、F(偽)へ分岐してfsbit命令を用いてレジスタw8の内容について処理を行い、これをレジスタw1へセットする(S118)。このとき、図37から判るように、最下位から11ビット目が、セットされたデータ(つまり、1)が出現する最先頭ビット位置であるから、fsbit命令の性格から、上記11(ビット目)から1を引いた10がレジスタw1にセットされる。次において、レジスタw1の内容である10に1を加えて、この結果である11がレジスタw3にセットされ、図37の4ワードのデータの使用されているバイト長11が得られることになる(S119)。
【0112】
更に、このレジスタw3の内容である11とユーザから与えられたサイズ(size)とが比較され(S120)、レジスタw3のデータがサイズより大きければT(真)となってオーバーフローへ進み(S121)、レジスタw3のデータがサイズより大きくなければF(偽)へ分岐しオーバーフローではないことになる(122)。斯して、ゾーン10進数の演算結果についてのオーバーフロー検出が行われる。
【0113】
上記から明らかなように、本実施の形態においては、ワード単位の処理についてはcmpeq.b命令を用いて、更に、1ワード内における処理及び使用されたバイト長を検出する処理においてはfsbit命令を用いて、ループによる繰り返し処理をなくし、その分オーバーフロー検出処理の簡素化と高速化が図られる。
【0114】
本発明の他の実施の形態に係るRISC計算機は、VLIW方式を採用しており、その要部は図11に示されるようである。つまり、図1の演算回路2と等しい構成を有する演算回路2−1〜2−4が並列処理を行う。演算回路2−1〜2−4は、cmpeq.b命令、fsbit命令を実行可能である。この様な構成のRISC計算機により、図35のフローチャートに示されるゾーン10進数の演算結果データのオーバーフロー処理を並列実行させる場合には、図38に示されるフローチャートによる処理を行う。
【0115】
即ち、まず図37に示した16桁の4桁ずつにcmpeq.b命令を用いて、それぞれ0と比較する(S125)。勿論、図35においても説明したように、この処理の前に、前処理において1桁分を表す8ビットのうちの上位4ビット(ゾーンビット及び符号ビット)が0(オール0)とされる。そして、上記16桁の4桁ずつにcmpeq.b命令を用いて、それぞれ0と比較した結果は、対象の数値が0であれば1に、また、1であれば0となるから、図37のレジスタw12、w11、w10、w9に示すような数値となる。つまり、各レジスタw12〜w9の下4ビットに、それぞれ、「1111」、「1000」、「0100」、「0010」がセットされ、これより上位ビットに0がセットされる。次に、各レジスタw12〜w9にセットされたデータそれぞれが、最上位ビットから第5ビット目まで0であり、下位4ビットがオール1であるかを検出する(S126)。そして、レジスタw12についてT(真)であれば判断4のtureへ分岐し、F(偽)であれば判断4のfaulへ分岐する。また、レジスタw11についてT(真)であれば判断5のtureへ分岐し、F(偽)であれば判断5のfaulへ分岐し、また、レジスタw10についてT(真)であれば判断6のtureへ分岐し、F(偽)であれば判断6のfaulへ分岐し、更に、レジスタw9についてT(真)であれば判断7のtureへ分岐し、F(偽)であれば判断7のfaulへ分岐する。
【0116】
判断4からfaulへ分岐した場合においては、レジスタw12内の右から4ビット(下位4ビット)について、1を0に、0を1に変換してレジスタw8にセットすると共に、レジスタw2に対し、下位12ビットまでが使用中であることに対応して13(fsbitを使用することに対応して、12に1を加えて13とする)をセットする(S127)。また、判断5からfaulへ分岐した場合においては、レジスタw11内の右から4ビット(下位4ビット)について、1を0に、0を1に変換してレジスタw8にセットすると共に、レジスタw2に対し、下位8ビットまでが使用中であることに対応して9(fsbitを使用することに対応して、8に1を加えて9とする)をセットする(S128)。
【0117】
更に、判断6からfaulへ分岐した場合においては、レジスタw10内の右から4ビット(下位4ビット)について、1を0に、0を1に変換してレジスタw8にセットすると共に、レジスタw2に対し、下位4ビットまでが使用中であることに対応して5(fsbitを使用することに対応して、4に1を加えて5とする)をセットする(S129)。また、判断7からfaulへ分岐した場合においては、レジスタw9内の右から4ビット(下位4ビット)について、1を0に、0を1に変換してレジスタw8にセットすると共に、レジスタw2に対し、最下位ビットより上位が使用中であることに対応して1(fsbitを使用することに対応して、0に1を加えて1とする)をセットする(S130)。
【0118】
以上のようにして、レジスタw8にセットされたデータに対しfsbit命令を用いてレジスタw8内のデータについて、右から何ビット使用しているかを求め、レジスタw1にセットする(S131)。図37の例では、w12の下位4ビットがオール1であり、w11の下位4ビットが「1000」であるから、判断5においてfaulへ分岐し、レジスタw8に下位4ビットが「0111」のデータがセットされる。そして、このデータに対しfsbit命令が適用され、レジスタw1には最下位から3ビット目までが使用されていることを示す「2」がセットされる。そして、次にレジスタw1とレジスタw2とのデータが加えられ、レジスタw3にセットされる(S132)。この結果、図37の例では、w1=2、w2=9であるからレジスタw3には、「11」がセットされる。この「11」がゾーン10進数の演算結果のデータ(16バイト)において使用されたバイト数を示す。そして、次にユーザ指示のバイト数との比較処理へと進む。
【0119】
上記図38に示したフローチャートの処理は、図39に示される命令コード列に対応する。この場合、先の有効バイト長計算のときと同様に、第3番目の演算回路(例えば、2−3)が、cmpeq.b命令を1サイクルに1命令実行して4回繰り返すようにしてもステップS125(図39)の処理が可能である。これに対し、cmpeq.b命令を1サイクルに複数命令実行するとより高速化できる。つまり、それぞれ演算回路2−1〜2−4が、第1サイクルにおいて並列的にcmpeq.b命令を実行する。このようにした命令コード列を図40に示す。図40の構成では、14サイクル、分岐数2で処理が終了するようになっており、処理の高速化が図られている。なお、図39のステップS133において、レジスタw3のデータがユーザから与えられた(予めセットされた)サイズ(size)より大かを検出しているが、その結果の分岐は、図40の第13クラスタに示される。つまり、S133が成立であるときには[8t]へ分岐し、レジスタvalに1をセットしてオーバーフロー発生を示し、S133が不成立のときには[8f]へ分岐し、エンドとなる。
【0120】
既に説明してきた各実施の形態において用いられている演算回路2は、1ワード長の命令フォーマットに、2つのソースオペランドと1つのディスティネーションオペランドを分離して指定できる3オペランド型のRISC命令を実行するように構成されている。係る構成の演算回路2に3つのソースオペランドと2つのディスティネーションオペランドを指定する命令、つまり、5オペランド型命令を実行させようとすると、演算回路2は2つのソースオペランドを入力し、1つのディスティネーションオペランドを出力するだけの物理的構成しか有していないため、次のような障害が生じる。
【0121】
まず、第1から第3の3つのソースオペランドを一時に取り込むことができないため、第3ソースオペランドの待ち合わせが必要となる。同様に、第1及び第2ディスティネーションオペランドを一時にライトバックすることができないため、第2ディスティネーションオペランドのライトバック待ち等により、パイプラインハザードが生じる(フェッチ、デコード、実行、ライトバックのパイプライン処理に空きができる)。このため、性能低下が生じることになる。
【0122】
本発明の実施の形態では、上記問題点を解決べく、図11の構成のVLIW方式を採用したRISC計算機を、図41に示すように変更する。即ち、演算回路2−1、2−3に代えて、演算回路20−1、20−3を用いる。演算回路20−1、20−3は、第3ソースオペランドを取り込む経路55−1、55−3と、第2ディスティネーションオペランド出力用の経路56−1、56−3とを備え、3つのソースオペランドに対して演算を行い、その結果を2つのディスティネーションオペランドへ出力する5オペランド型命令を実行する演算回路である。また、図41のVLIW方式RISC計算機においては、5オペランド型命令を実行する演算回路20−1、20−3の第3ソースオペランドを取り込む経路55−1、55−3へソースオペランドを供給するか、3オペランド型命令型命令を実行する演算回路2−2、2−4の第1ソースオペランド取り込む経路へソースオペランドを供給するか切り換えるソースオペランド切換スイッチSW1、SW3と、上記5オペランド型命令を実行する演算回路20−1、20−3の第2ディスティネーションオペランド出力用の経路56−1、56−3からのディスティネーションオペランドか、上記3オペランド型命令を実行する演算回路2−2、2−4の第1ディスティネーションオペランド出力用の経路からのディスティネーションオペランドかを選択するためのディスティネーションオペランド選択スイッチSW2、SW4とが設けられている。
【0123】
また、デコ−ダ21Aは、各演算回路2−2、2−4、20−1、20−3に命令のデコード結果を与えて所要の演算を行わせると共に、上記スイッチSW1〜SW4を切り換える。なお、当然のことではあるが、演算回路20−1、20−3は、3オペランド型命令も実行する。
【0124】
このように構成されたVLIW方式を採用したRISC計算機では、例えば、図42に示されるような命令が命令フィールドにセットされると、演算回路20−1が5オペランド型命令を実行する。つまり、命令フィールド0には3オペランド型命令0がセットされ、命令フィールド1には命令0を拡張して5オペランド型とするオペランド拡張命令がセットされ、命令フィールド2には3オペランド型命令2がセットされ、命令フィールド3には3オペランド型命令3がセットされる。
【0125】
図43には、3オペランド型命令のフォーマットが示されている。3オペランド型命令は、先頭にオペコード1がセットされ、以下、条件実行制御情報、ディスティネーションレジスタ番号1、オペコード2、ソースレジスタ番号1、ソースレジスタ番号2がセットされている。一方、図44には、オペランド拡張命令のフォーマットが示されている。このオペランド拡張命令には、先頭に所定のビットパターンからなる5オペランド型拡張コードがセットされ、次いで、5ビットの0(ヌルデータ)、ディスティネーションレジスタ番号2、4ビットの0(ヌルデータ)、ソースレジスタ番号3、6ビットの1(ヌルデータまたはオペランド拡張命令の終了コード)がセットされている。
【0126】
図42の例では、デコ−ダ21Aが、命令フィールド1にオペランド拡張命令があることを、5オペランド型拡張コードに基づき検出し、ソースオペランド切換スイッチSW1、ディスティネーションオペランド選択スイッチSW2を図41の実線に示すように切り換える。一方、ソースオペランド切換スイッチSW3、ディスティネーションオペランド選択スイッチSW4は、図41の実線に示される通りに演算回路20−3、2−4が3オペランド型命令を実行可能なように切り換えられている。そして、演算回路2−2は、斜線を施して示すように、演算を実行することはない。
【0127】
このように本実施の形態によれば、従来のレジスタファイル1、入出力ポート23、24の構成を変更することなく、5オペランド型命令を実行するVLIW方式のRISC計算機を構成できる。そして、レジスタファイル1から入力ポート23を介して一時に3ソースオペランドが与えられる構成であるので、待ちが生じない。また、レジスタファイル1へ出力ポート24を介して一時に2ディスティネーションオペランドをライトバックできる構成であるので、待ちが生じない。また、ソースオペランド切換スイッチSW1、SW3、ディスティネーションオペランド選択スイッチSW2、SW4の切り換えをデコードステージで行えるため、待ちが生じない。以上により、速度を犠牲にすることなく、RISC型命令であるにも拘らず5オペランド型命令を実行することが可能である。
【0128】
なお、上記の例では、第1番目の演算回路20−1が5オペランド型命令を実行する例を示したが、第3番目の演算回路20−3も5オペランド型命令を実行可能であり、この第3番目の演算回路20−3に5オペランド型命令を実行させる場合には、命令フィールド3にオペランド拡張命令を配置すればよい。また、4つの命令フィールド0〜3全てに3オペランド型命令を配置した場合には、4つの演算回路20−1、2−2、20−3、2−4全てが、3オペランド型命令を実行する。
【0129】
上記図41の演算回路20−1、20−3は、第1オペランドの1ワード長のデータと第2オペランドの1ワード長のデータとを夫々4ビット幅のブロックに区分し、第1オペランドの各ブロックと第2オペランドの各ブロックとを先頭から順に組み合わせるシャッフル手段と、このシャッフル手段により組み合わされたブロック対における2ブロックの前後配置関係を、第3オペランドの1ワード長のデータに基づき制御する対交換手段と、を具備する。また、上記演算回路20−1、20−3は、第1オペランドの1ワード長のデータと第2オペランドの1ワード長のデータとを夫々4ビット幅のブロックに区分し、第1オペランドと第2オペランドのブロックを一列に並べた状態で1ブロックおきに組み合わせ、奇数ブロックの組み合わせの並びの後に偶数ブロックの組み合わせの並びを配置する逆シャッフル手段と、この逆シャッフル手段により組み合わされたブロック対における2ブロックの前後配置関係を、第3オペランドの1ワード長のデータに基づき制御する対交換手段とを具備する。
【0130】
別言すると、上記演算回路20−1、20−3は、第1オペランドの1ワード長のデータと第2オペランドの1ワード長のデータとを夫々4ビット幅のブロックに区分し、第1オペランドの各ブロックと第2オペランドの各ブロックとを先頭から順に組み合わせるシャッフルと、このシャッフルにより組み合わされたブロック対における2ブロックの前後配置関係を、第3オペランドの1ワード長のデータに基づき制御する対交換を行うことからなる命令(以下、shx命令)を実行する。また、第1オペランドの1ワード長のデータと第2オペランドの1ワード長のデータとを夫々4ビット幅のブロックに区分し、第1オペランドと第2オペランドのブロックを一列に並べた状態で1ブロックおきに組み合わせ、奇数ブロックの組み合わせの並びの後に偶数ブロックの組み合わせの並びを配置する逆シャッフルと、この逆シャッフルにより組み合わされたブロック対における2ブロックの前後配置関係を、第3オペランドの1ワード長のデータに基づき制御する対交換を行うことからなる命令(以下、ishx命令)を実行する。
【0131】
shx命令は、図45の115に示されるように、括弧内にシャッフル処理対象のデータが格納されている2つのジェネラルレジスタ(%rs3)、(%rs1)と、シャッフル処理された4ビットの対のデータの前後関係を指示するビットが格納されているジェネラルレジスタ(%rs2)と、結果を書き込む2つのディスティネーションレジスタ(%rd2)、(%rd1)とを指定して記述される。この115の表記の右には、2つのジェネラルレジスタ(%rs3)、(%rs1)で指定された2ワードのデータを4ビット単位で完全シャッフルを行った後、117で示されるジェネラルレジスタ(%rs2)の下位8ビットで指定された対交換を行い、これをディスティネーションレジスタ(%rd2)、(%rd1)に書き込むことを示す表記116が対応付けられている。
【0132】
上記において、完全シャッフルとは、図47に示されているように、1ワードの各4ビットのデータa0〜a7と、1ワードの各4ビットのデータb0〜b7とを、交互に並べること、つまり、a0,b0,a1,b1,・・・b6,a7,b7と並べることである。そして、(a0,b0)、(a1,b1)・・・(a7,b7)が夫々対となっている。この各対の2つのデータの交換をex0,ex1,・・・ex7で示す。この対交換ex0,ex1,・・・ex7における前後配置を117に示されるように、レジスタrs2のビット24〜31により夫々指定する。
【0133】
この動作は、図46に示されるように、例えば、レジスタrs3の4ビットデータa0とレジスタrs1の4ビットデータb0とが、1対とされる。この1対は、レジスタrs2のビット24が0のときには、下左欄に示されるようにa0,b0の順に並べられ、レジスタrs2のビット24が1のときには、下右欄に示されるようにb0,a0の順に並べられる。
【0134】
図48には、上記shx命令に対応する演算回路20−1、20−3の要部構成を示す。図に示されているように、レジスタrs3の4ビットデータa0とレジスタrs2の4ビットデータb0とは、例えば、それぞれ結線(ワイヤー)56、55によってゲート57−1〜57−4に導かれる。各ゲート57−1〜57−4は、例えば、それぞれ4個のアンドゲートから構成される。ゲート57−1、57−4はレジスタrs2からのビット24の信号がLレベル(0)で与えられると、4ビットデータa0、b0を通過させ、Hレベル(1)で与えられると、不通過とする。また、ゲート57−2、57−3はレジスタrs2からのビット24の信号がHレベル(1)で与えられると、4ビットデータa0、b0を通過させ、Lレベル(0)で与えられると、不通過とする。
【0135】
一方、ishx命令は、図49の118に示されるように、括弧内に逆シャッフル処理対象のデータが格納されている2つのジェネラルレジスタ(%rs3)、(%rs1)と、逆シャッフル処理された4ビットの対のデータの前後関係を指示するビットが格納されているジェネラルレジスタ(%rs2)と、結果を書き込む2つのディスティネーションレジスタ(%rd2)、(%rd1)とを指定して記述される。この119の表記の右には、2つのジェネラルレジスタ(%rs3)、(%rs1)で指定された2ワードのデータを4ビット単位で逆完全シャッフルを行った後、120で示されるジェネラルレジスタ(%rs2)の下位8ビットで指定された対交換を行い、これをディスティネーションレジスタ(%rd2)、(%rd1)に書き込むことを示す表記119が対応付けられている。
【0136】
上記において、逆完全シャッフルとは、図47に示されているように、1ワードの各4ビットのデータa0,b0,a1,b1,・・・,b3と、1ワードの各4ビットのデータa4,b4,a5,・・・,b7とを、1ブロックおきに組み合わせ、奇数ブロックの組み合わせの並びの後に偶数ブロックの組み合わせの並びを配置する交互に並べることである。つまり、完全シャッフルを行った結果を、逆完全シャッフルを行うと、元に戻る。そして、奇数ブロックでは、(a0,a1)、(a2,a3)・・・(a6,a7)が夫々対となり、偶数ブロックでは、(b0,b1)、(b2,b3)、・・・(b6,b7)が夫々対となっている。この対の交換をex0,ex1,・・・ex7で示す。この対交換ex0,ex1,・・・ex7における前後配置を120に示されるように、レジスタrs2のビット24〜31により夫々指定する。
【0137】
この動作は、図50に示されるように、例えば、レジスタrs3の4ビットデータa0,a1が、1対とされる。この1対は、レジスタrs2のビット24が0のときには、下左欄に示されるようにa0,a1の順に並べられ、レジスタrs2のビット24が1のときには、下右欄に示されるようにa1,a0の順に並べられる。
【0138】
このishx命令は、図48に示される構成により実現される。逆完全シャッフルは、結線(ワイヤー)56、55によって実行される。以上のような、shx命令及びishx命令を実行する演算回路20−1、20−3によって、2つの1ワードに存在する4ビット単位のデータを交互混合し、または、その逆に混合し、所望するように配置された2ワードのデータを得ることができる。
【0139】
上記演算回路20−1、20−3を備えたRISC計算機は、パック10進数の不正データの除去を行う。従来のRISC計算機においてパック10進数の不正データの除去処理は、4ビット単位にエラーチェックを行い、チェック結果に応じてエラールーチンへ分岐することに行われていた。4ビット単位の繰り返し処理のため、かなり多くの時間を要していた。また、エラーチェック毎に分岐するために、エラーがない場合でも並列化することができず、並列化が困難であり、VLIW方式による処理はできないという問題があった。
【0140】
この問題点は、本発明の実施の形態に係る、cmplt.p命令、shx命令、ishx命令を実行する演算回路20−1(20−3)を具備するRISC計算機により解決される。つまり、本発明の実施の形態に係るRISC計算機は、図51に示されるように、不正パック10進数検出手段57、データ混合手段58、不正データ抽出手段59を有する。不正パック10進数検出手段57は、複数ワードのパック10進数データについて、1ワードのデータを4ビット単位に不正閾値データと比較して、各4ビット単位の比較結果をディスティネーションオペランドの下位側に格納するcmplt.p命令を実行する演算回路2または20−1(20−3)を用いてワード単位に処理を行う。データ混合手段58は、上記複数ワードのパック10進数データと0とを第1オペランド及び第2オペランドとし、上記不正パック10進数検出手段57の結果を第3オペランドとして、shx命令を実行する演算回路20−1(20−3)を用いてshx命令による結果を得る。不正データ抽出手段59は、上記データ混合手段58による混合結果を第1オペランド及び第2オペランドとし、0を第3オペランドとして、ishx命令を実行する演算回路20−1(20−3)を用いて不正データを抽出する。不正データがないときには、0が出力される。
【0141】
図41に示されるような演算回路20(20−1、20−3)を備え、演算回路20(20−1、20−3)がcmplt.p命令を実行し、演算回路20(20−1、20−3)がshx命令及びishx命令を実行するRISC計算機は、図52に示されるフローチャートの処理によりパック10進数の不正データを除去する。すなわち、パック10進数データが図51に示されるように、4ワードから構成され、1ワードが32ビットであるとする。すると、1ワード毎に処理を行い、これを4回繰り返す。
【0142】
まず、最初の1ワード(例えば、図51の最上位1ワードhighを取り出し、4ビット毎にcmplt.p命令を用いて(0x99999999)と比較する(S135)。つまり、4ビット毎に比較を行うから、図53に示されるように、レジスタrs1内の比較対象の8桁のデータと、レジスタrs2内の8桁の9とが比較され、9より大きいとき(つまり、0xa、0xb、0xc、0xd、0xe、0xfの不正データであるとき)には1が、また、9以下であるときには0が、レジスタrd1の下位8ビットにセットされる。図52の例では、8桁のデータが「14636a45」であり、第6桁目のaが不正データであるから、レジスタrd1の内容がX=00・・・00000100となる。
【0143】
次に、上記パック10進数の最上位ワードに対し、shx命令を用いて8桁の0と完全シャッフルをとり、このとき、上記で得たレジスタrd1の下位8ビットに基づき、対の2データの前後配置関係を決定する(S136)。つまり、図54に示されるように、レジスタrs1のデータ(図53のレジスタrs1のデータと同一)とレジスタrs2の8桁の0とが交互に配置されるよう対にし、対とされた原データ(レジスタrs1のデータの4ビット毎)と0との前後配置関係をレジスタrs2の下位8ビット(図53のレジスタrd1の下位8ビット)に基づき決定する。図52の例では、8桁のデータが「14636a45」であり、先のレジスタrd1のデータがX=00・・・00000100であるから、図52のステップS136内に示されるように、X=1である最下位から3つ目に対応する対(a,0)に関し、その前後順が(0,a)に逆転されて配置され、その他の対は0が後に配置される。
【0144】
次に、上記shx命令の結果得られた16桁の数値列をishx命令を用いて8桁ずつの2データに分ける(S137)。つまり、図55に示されるように、レジスタrs3、rs1のデータ(shx命令により得られた16桁のデータ)に対して、1桁おきに8桁のデータを取り出してレジスタrd2にセットし、残りの8桁をレジスタrd1にセットする。これは、第3オペランドにはレジスタrs2(図55)に示されているように、下位8ビットに0がセットされているためである。図52の例では、ステップS136において、X=1である最下位から3つ目に対応する対(a,0)に関し、その前後順が(0,a)に逆転されて配置されたため、レジスタrd2には元のaの位置に0がセットされ、レジスタrd1の下位から桁目に不正データであるaがセットされる。不正データでなければ、原データがレジスタrd2に戻り、レジスタrd1に0がセットされる。つまり、1ワード内に存在した不正データaがレジスタrd1に抽出され、除去されて出力される。
【0145】
以上の処理を4回繰り返したときのフローチャートに対するニーモニック表記の命令コード列を図56に示す。この命令コード列では、最初にレジスタQに9(0x99999999)をセットし、以降、枠にて囲って示すように、最上位の1ワードhighの処理、次の1ワードmidhの処理、更に次1ワードmidlの処理、最後に最下位の1ワードlowの処理を行うことが示されている。このような処理は、図41の演算回路20−1(または、20−3)のみを用いて、繰り返し処理により実行可能である。このようにしても、分岐が無いために処理が高速化され、従来に比べて効率良く、パック10進数の不正データを除去できる。
【0146】
上記図41の構成のRISC計算機により、図56に示される命令コード列の処理を並列実行させる場合の命令コード列を図57に示す。上記図56の例では1つの演算回路(例えば、20−1)が、cmplt.p命令を1サイクルに1命令実行して4回繰り返すようにしたが、この図57の例では、cmplt.p命令を1サイクルに複数命令実行する。つまり、それぞれ演算回路20−1、2−2、20−3、2−4が、第2サイクルにおいて並列的にcmplt.p命令を実行している。これにより、図56の構成では、13サイクル必要であったのに対し、本実施例では6サイクルで済むようになっており、処理の高速化が図られている。
【0147】
上記図41の演算回路20−1、20−3は、2つのジェネラルレジスタで指定された倍語データを、ジェネラルレジスタまたは即値で指定された数だけ左に論理シフトし、この結果空いた下位ビットに0を挿入する倍語・左論理シフト手段を備える。また、演算回路20−1、20−3は、2つのジェネラルレジスタで指定された倍語データを、ジェネラルレジスタまたは即値で指定された数だけ右に論理シフトし、この結果空いた上位ビットに0を挿入する倍語・右論理シフト手段を備える。更に、演算回路20−1、20−3は、2つのジェネラルレジスタで指定された倍語データを、ジェネラルレジスタまたは即値で指定された数だけ右に算術シフトし、この結果空いた上位ビットに符号ビットを挿入する倍語・右算術シフト手段を備える。
【0148】
別言すれば、上記演算回路20−1、20−3は、2つのジェネラルレジスタで指定された倍語データを、ジェネラルレジスタまたは即値で指定された数だけ左に論理シフトし、この結果空いた下位ビットに0を挿入する倍語・左論理シフトに係る命令、即ち、sll.l命令を実行する。また、演算回路20−1、20−3は、2つのジェネラルレジスタで指定された倍語データを、ジェネラルレジスタまたは即値で指定された数だけ右に論理シフトし、この結果空いた上位ビットに0を挿入する倍語・右論理シフトに係る命令、即ち、srl.l命令を実行する。更に、演算回路20−1、20−3は、2つのジェネラルレジスタで指定された倍語データを、ジェネラルレジスタまたは即値で指定された数だけ右に算術シフトし、この結果空いた上位ビットに符号ビットを挿入する倍語・右算術シフトに係る命令、即ち、sra.l命令を実行する。
【0149】
sll.l命令は、図58の121に示されるように、左論理シフトの対象が格納されている2つのレジスタ(%rs3)、(%rs1)と、シフトするビット数が格納されたジェネラルレジスタ(%rs2)と、結果を書き込む2つのディスティネーションレジスタ(%rd2)、(%rd1)とを指定して記述される。または、図58の122に示されるように、左論理シフトの対象が格納されている2つのレジスタ(%rs3)、(%rs1)と、シフトするビット数の即値(例えば、6)を示す(%i6)と、結果を書き込む2つのディスティネーションレジスタ(%rd2)、(%rd1)とを指定して記述することも可能である。
【0150】
上記表記121の右には、2つのジェネラルレジスタ(rs3)、(rs1)で指定された2ワードのデータを、ジェネラルレジスタ(rs2)で指定されるビット数だけ左シフトし、これをディスティネーションレジスタ(rd2)、(rd1)に書き込むことを示す表記が対応付けられている。また、表記122の右には、2つのジェネラルレジスタ(rs3)、(rs1)で指定された2ワードのデータを、即値(例えば、i6)の数6だけ左シフトし、これをディスティネーションレジスタ(rd2)、(rd1)に書き込むことを示す表記が対応付けられている。なお、シフトの結果、空きとなった下位ビットには、シフトしたビット数に応じて0が挿入され、また、上位側においてシフトアウトされたシフトビット数に対応するビットは失われる。
【0151】
srl.l命令は、図59の123に示されるように、右論理シフトの対象が格納されている2つのレジスタ(%rs3)、(%rs1)と、シフトするビット数が格納されたジェネラルレジスタ(%rs2)と、結果を書き込む2つのディスティネーションレジスタ(%rd2)、(%rd1)とを指定して記述される。または、図59の124に示されるように、右論理シフトの対象が格納されている2つのレジスタ(%rs3)、(%rs1)と、シフトするビット数の即値(例えば、6)を示す(%i6)と、結果を書き込む2つのディスティネーションレジスタ(%rd2)、(%rd1)とを指定して記述することも可能である。
【0152】
上記表記123の右には、2つのジェネラルレジスタ(rs3)、(rs1)で指定された2ワードのデータを、ジェネラルレジスタ(rs2)で指定されるビット数だけ右シフトし、これをディスティネーションレジスタ(rd2)、(rd1)に書き込むことを示す表記が対応付けられている。また、表記124の右には、2つのジェネラルレジスタ(rs3)、(rs1)で指定された2ワードのデータを、即値(例えば、i6)の数6だけ右シフトし、これをディスティネーションレジスタ(rd2)、(rd1)に書き込むことを示す表記が対応付けられている。なお、シフトの結果、空きとなった上位ビットには、シフトしたビット数に応じて0が挿入され、また、下位においてシフトアウトされたシフトビット数に対応するビットは失われる。
【0153】
sra.l命令は、図60の125に示されるように、右論理シフトの対象が格納されている2つのレジスタ(%rs3)、(%rs1)と、シフトするビット数が格納されたジェネラルレジスタ(%rs2)と、結果を書き込む2つのディスティネーションレジスタ(%rd2)、(%rd1)とを指定して記述される。または、図60の126に示されるように、右論理シフトの対象が格納されている2つのレジスタ(%rs3)、(%rs1)と、シフトするビット数の即値(例えば、6)を示す(%i6)と、結果を書き込む2つのディスティネーションレジスタ(%rd2)、(%rd1)とを指定して記述することも可能である。
【0154】
上記表記125の右には、2つのジェネラルレジスタ(rs3)、(rs1)で指定された2ワードのデータを、ジェネラルレジスタ(rs2)で指定されるビット数だけ右シフトし、これをディスティネーションレジスタ(rd2)、(rd1)に書き込むことを示す表記が対応付けられている。また、表記126の右には、2つのジェネラルレジスタ(rs3)、(rs1)で指定された2ワードのデータを、即値(例えば、i6)の数6だけ右シフトし、これをディスティネーションレジスタ(rd2)、(rd1)に書き込むことを示す表記が対応付けられている。なお、シフトの結果、空きとなった上位ビットには、シフトしたビット数に応じて符号ビットsが挿入され、また、下位においてシフトアウトされたシフトビット数に対応するビットは失われる。
【0155】
以上のsll.l命令、srl.l命令、sra.l命令を実行するために、演算回路20−1、20−3は、従来有している1ワード長に対する論理シフト、算術シフトのハードウェアを倍語に応じて拡張したハードウェア、例えば、SN74198を2段接続した構成等を有する。これにより、本実施の形態に係るRISC計算機は、1命令によって倍語の左論理シフト、右論理シフト、右算術シフトを行うことができる。
【0156】
上記演算回路20−1、20−3を備えたRISC計算機は、パック10進数データをメモリからレジスタへワード単位に適切に転送する。従来のRISC計算機において、メモリからパック10進数データをレジスタへ転送する場合には、1バイト単位でロードを行っていた。この手法によると、1ワードの転送を行うためには、数サイクルの処理が必要となり非効率的である。また、VLIW方式を採用したRISC計算機においても、ロード命令は通常1サイクルに1つ発行できるだけであるから、ロード命令が多いと並列化が妨げられるという問題点が生じる。
【0157】
この問題点は、本発明の実施の形態に係る、sll.l命令を実行する演算回路20−1(20−3)を具備するRISC計算機により解決される。つまり、本発明の実施の形態に係るRISC計算機は、図61に示されるように、ワード境界・境界差検出手段61、ワード単位読出手段62、シフト手段63を有する。ワード境界・境界差検出手段61は、パック10進数データが記憶されているメモリ5上の最上位と最下位のワード境界を検出すると共に、ワード境界と当該パック10進数データの終端との差を検出する。つまり、パック10進数データは、メモリ5のワード境界とは一致しない位置から、この例では11バイト記憶されているので、メモリ5のワード境界を検出して、このワード境界から次のワード境界までのワード単位(パック10進数データ以外を含んで1ワードとなることもある)で読み出し可能とする。また、パック10進数データの終端とワード境界(この終端以前のもの)との差(この例では、1バイト)を検出する。ワード単位読出手段62は、上記ワード境界・境界差検出手段61により検出されたワード境界を単位として、上記パック10進数が記憶されている範囲のワードをレジスタ1−1〜1−4に読み出す。つまり、メモリ5のワード単位のデータがレジスタ1−1〜1−4にセットされる。シフト手段63は、上記レジスタ1−0〜1−3に読み出されたデータを、上記ワード境界・境界差検出手段61により検出された差のデータに応じて、sll.l命令を実行する演算回路20−1(20−3)によりシフトする。つまり、境界差は1バイトであるから、sll.l命令によって1バイトシフトを行い、終端がレジスタ1−3の終端に合致させられてレジスタ1−1〜1−3にパック10進数データが格納される。なお、上記により、読み出すべきパック10進数データ以外のデータがレジスタ1−1に残ることもあるが、このデータは削除する。
【0158】
上記RISC計算機による処理をニーモニック表記による命令コード列として示すと、図62のようになる。この命令コード列では、sはメモリ5から読み出すべきパック10進数データのサイズ(長さ)、つまり「引数サイズ」であり、pは上記パック10進数データの先頭アドレス、つまり「引数アドレス」であり、実際の例では、図63のS141に示されるようになっている。上記図62の命令コード列による処理は、図63〜図68のフローチャートに対応しているので、これらを対応付けながら処理を説明する。なお、図63〜図68のフローチャートは連続している。
【0159】
図62の命令コード列のブロックB1は、パック10進数データが記憶されているメモリ5上の最上位と最下位のワード境界を検出すると共に、ワード境界と当該パック10進数データの終端との差を検出する処理である。これを詳述すると、最初のadd命令は、図63のステップS141に対応しており、引数アドレスpと引数サイズsを加えてパック10進数データの終端アドレスQを求める。次のand命令は、ステップS142に対応しており、上記終端アドレスQと3(3バイトに対応する値)との論理積を求めて、終端アドレスQの下位2ビットが1ワードの内の何バイト目を指しているか検出し、パック10進数データの終端とワード境界との差Hを求める。ここでは、図63に明らかなように、Hは1(バイト)となる。次のsub命令は、ステップ143に対応しており、終端アドレスQから上記差Hを引き、ワード境界とQとを一致させる。次のand命令は、ステップ144に対応しており、上記先頭アドレスpと3(3バイトに対応する値)との論理積を求めて、先頭アドレスpの下位2ビットが1ワードの内の何バイト目を指しているか検出し、パック10進数データの先頭とワード境界との差Iを求める。ここでは、差Iは2(バイト)として求まる。
【0160】
次のsub命令は、図64のステップS145に対応しており、先頭アドレスpから上記差Iを引き、ワード境界とpとを一致させる。次に記載のsll命令は、ステップS146に対応しており、パック10進数データの終端とワード境界との差Hを3左シフトして8倍し、ビット単位の値に変換する。この結果、Hは8(ビット)となる。
【0161】
図62の命令コード列のブロックB2、B3は、パック10進数データが存在するメモリ5における最下位の1ワードのロード処理である。まず、最初のtsteq命令は、図64のステップS147に対応しており、上記ステップS142において求めた差Hが0であるか否か検出し、Hが0であれば判断0のtureへ分岐し、Hが0でなければ判断0のfaulへ分岐する。そして、次にmov命令によりレジスタw0に0をセットして初期化する。この初期化処理は、図63〜図68においては、図63の脚注に示すように、省略してある。
【0162】
そして、ブロックB3のld命令によって、アドレスQにより最下位の1ワードをメモリ5から読み出し、レジスタw0へロードする。これは、図64のステップS148に対応しており、パック10進数データの最下位部分を含む1ワードW0(ワード境界から1ワードのデータ)が読み出されてロードされることを示している。
【0163】
次の命令コード列のブロックB4、B5は、パック10進数データのメモリ5における最下位の次の1ワードのロード処理である。その最初のsub命令は、図65のステップS149に対応しており、アドレスQから4(バイト数に対応)を引いて次の1ワードを読み出すためのアドレスQ1を得る。次のtstltu命令は、図65のステップS150に対応しており、上記で求めたアドレスQ1が、パック10進数データの先頭アドレスが含まれるメモリ5上の1ワードエリアのワード境界アドレスpを越えた(Q1>p)か否かを検出し、Q1>pであれば「判断1」のtureへ分岐し、Q1>pでなければ「判断1」のfaulへ分岐する。そして、次にmov命令によりレジスタw1に0をセットして初期化する。この初期化処理は、図63〜図68においては、図63の脚注に示すように、省略してある。更に、ブロックB5のld命令によって、アドレスQ1により最下位の次の1ワードをメモリ5から読み出し、レジスタw1へロードする。これは、図65のステップS151に対応しており、パック10進数データの最下位部分を含む1ワードW0(ワード境界から1ワードのデータ)の次の1ワードW1が読み出されてロードされることを示している。
【0164】
次の命令コード列のブロックB6は、上記で読み出してあるレジスタw0、w1内のデータW0、W1を、上記で求めた差H(8ビット)だけ左シフトして、レジスタlowにセットする処理を示し、図65のS152に対応している。上記ブロックB6の処理の結果、ステップS152に示されるように、レジスタlowには、斜線により示される4バイトのデータ(パック10進数データの終端から4バイトのデータ)がセットされることになる。
【0165】
次の命令コード列のブロックB7、B8は、パック10進数データが存在するメモリ5における最下位から2番目の1ワードのロード処理である。その最初のsub命令は、図66のステップS153に対応しており、アドレスQから8(バイト数に対応)を引いて次の1ワード(最下位から2番目の1ワード)を読み出すためのアドレスQ2を得る。次のtstltu命令は、図66のステップS154に対応しており、上記で求めたアドレスQ2がパック10進数の先頭アドレスが含まれるメモリ5上のワードエリアのワード境界アドレスpを越えた(Q2>p)か否かを検出し、Q2>pであれば「判断2」のtureへ分岐し、Q2>pでなければ「判断2」のfaulへ分岐する。そして、次にmov命令によりレジスタw2に0をセットして初期化する。この初期化処理は、図63〜図68においては、図63の脚注に示すように、省略してある。更に、ブロックB8のld命令によって、アドレスQ2により最下位から2番目の1ワードをメモリ5から読み出し、レジスタw2へロードする。これは、図66のステップS155に対応しており、パック10進数データの最下位部分を含む1ワードW0(ワード境界から1ワードのデータ)から2番目の1ワードW2が読み出されてロードされることを示している。
【0166】
次の命令コード列のブロックB9は、上記で読み出してあるレジスタw1、w2内のデータW1、W2を、上記で求めた差H(8ビット)だけ左シフトして、レジスタmidlにセットする処理を示し、図66のS156に対応している。上記ブロックB8の処理の結果、ステップS156に示されるように、レジスタmidlには、斜線により示される4バイトのデータ(パック10進数データの終端から2ワード目のデータ、つまり、データW1の最上位1バイトとデータW2の下位3バイトのデータ)がセットされることになる。
【0167】
次の命令コード列のブロックB10、B11は、パック10進数データが存在するメモリ5における最下位から3番目の1ワードのロード処理である。その最初のsub命令は、図67のステップS157に対応しており、アドレスQから12(バイト数に対応)を引いて次の1ワード(最下位から3番目の1ワード)を読み出すためのアドレスQ3を得る。次のtstltu命令は、図67のステップS158に対応しており、上記で求めたアドレスQ3がパック10進数の先頭アドレスが含まれるメモリ5上のワードエリアのワード境界アドレスpを越えた(Q3>p)か否かを検出し、Q3>pであれば「判断3」のtureへ分岐し、Q3>pでなければ「判断3」のfaulへ分岐する。そして、次にmov命令によりレジスタw3に0をセットして初期化する。この初期化処理は、図63〜図68においては、図63の脚注に示すように、省略してある。更に、ブロックB11のld命令によって、アドレスQ3により最下位から3番目の1ワードをメモリ5から読み出し、レジスタw3へロードする。これは、図67のステップS159に対応しており、パック10進数データの最下位部分を含む1ワードW0(ワード境界から1ワードのデータ)から3番目の1ワードW3が読み出されてロードされることを示している。
【0168】
次の命令コード列のブロックB12は、上記で読み出してあるレジスタw2、w3内のデータW2、W3を、上記で求めた差H(8ビット)だけ左シフトして、レジスタmidhにセットする処理を示し、図67のS160に対応している。上記ブロックB12の処理の結果、ステップS160に示されるように、レジスタmidhには、斜線により示される4バイトのデータ(パック10進数データの終端から3ワード目のデータ、つまり、データW2の最上位1バイトとデータW3の下位3バイトのデータ)がセットされることになる。
【0169】
次の命令コード列のブロックB13、B14は、パック10進数データが存在するメモリ5における最上位の1ワードのロード処理である。その最初のsub命令は、図68のステップS161に対応しており、アドレスQから16(バイト数に対応)を引いて次の1ワード(最上位の1ワード)を読み出すためのアドレスQ4を得る。次のtstltu命令は、図68のステップS162に対応しており、上記で求めたアドレスQ4がパック10進数の先頭アドレスが含まれるメモリ5上のワードエリアのワード境界アドレスpを越えた(Q4>p)か否かを検出し、Q4>pであれば「判断4」のtureへ分岐し、Q4>pでなければ「判断4」のfaulへ分岐する。そして、次にmov命令によりレジスタw4に0をセットして初期化する。この初期化処理は、図63〜図68においては、図63の脚注に示すように、省略してある。更に、ブロックB14のld命令によって、アドレスQ4により最上位の1ワードをメモリ5から読み出し、レジスタw4へロードする。これは、図68のステップS163に対応しており、最上位の1ワードW4が読み出されてロードされることを示している。
【0170】
次の命令コード列のブロックB15は、上記で読み出してあるレジスタw3、w4内のデータW3、W4を、上記で求めた差H(8ビット)だけ左シフトして、レジスタhighにセットする処理を示し、図68のS164に対応している。上記ブロックB15の処理の結果、ステップS164に示されるように、レジスタhighには、斜線により示される4バイトのデータ(パック10進数データの終端から4ワード目のデータ、つまり、データW3の最上位1バイトとデータW4の下位3バイトのデータ)がセットされることになる。
【0171】
以上で図62の命令コード列により記載されている処理はENDとなるが、図63のステップS141と図68のステップS165との比較から明らかなように、レジスタhighには、先頭から1バイトの余分なデータがセットされている。そこで、後処理においては、引数サイズsが何ワードと何バイトに対応するかに基づき、レジスタlowからhighまでの内のどの範囲を有効とするか求め、上記何バイトの分以外のバイト、この例ではsが11(バイト)であるから、2ワードと3バイトとなり、レジスタhighの上位1バイトの削除(0との入れ換え)を行う。この入れ換えは、例えば、上位1バイトが0、下位3バイトが1のデータと、レジスタhighのデータのandをとることにより可能である。
【0172】
このようにして、メモリ5のワード境界に係わりなく記憶されているパック10進数のデータをレジスタにロードする場合に、ワード単位の読み出しを用いることができ、バイト単位に読み出しを行う場合に比べて遥かにロード命令の実行回数を減少させ、処理の高速化を図ることができる。このような処理は、図41の演算回路20−1(または、20−3)のみを用いて、繰り返し処理により実行可能である。つまり、図62の処理は、34ステップ、分岐数5で実現されることになる。
【0173】
上記図41の構成のRISC計算機により、図62に示される命令コード列の処理を並列実行させる場合の命令コード列を図69に示す。上記図62の例では1つの演算回路(例えば、20−1)が、各命令を繰り返し実行するようにしたが、この図69の例では、演算回路20−1、2−2、20−3、2−4が、各サイクルにおいて図示のld命令によるワード単位の読み出しと、sll.l命令等の複数命令を並列的に実行している。これにより、図62の構成では、34サイクル必要であったのに対し、本実施例では10サイクル、分岐数0で済むようになっており、処理の高速化が図られている。
【0174】
上記図41の演算回路20−1、20−3は、2つのジェネラルレジスタで指定された固定小数点1ワードデータを、第3のジェネラルレジスタで指定されたキャリーと共に加算し、加算結果を第1のディスティネーションレジスタに格納し、加算結果のキャリーを第2のディスティネーションレジスタに格納する加算手段を備えている。また、演算回路20−1、20−3は、第1のジェネラルレジスタで指定された固定小数点1ワードデータから第2のジェネラルレジスタで指定された固定小数点1ワードデータを減算すると共に、第3のジェネラルレジスタで指定されたキャリーの反転値を減算し、減算結果を第1のディスティネーションレジスタに格納し、減算結果のキャリーの反転値を第2のディスティネーションレジスタに格納する減算手段を備えている。更に、演算回路20−1、20−3は、2つのジェネラルレジスタで指定されたパック10進数1ワードデータを、第3のジェネラルレジスタで指定されたキャリーと共に加算し、加算結果を第1のディスティネーションレジスタに格納し、加算結果のキャリーを第2のディスティネーションレジスタに格納する加算手段を備えている。また、演算回路20−1、20−3は、第1のジェネラルレジスタで指定されたパック10進数1ワードデータから第2のジェネラルレジスタで指定されたパック10進数1ワードデータを減算すると共に、第3のジェネラルレジスタで指定されたキャリーの反転値を減算し、減算結果が負数の場合には10の補数として、減算結果を第1のディスティネーションレジスタに格納し、減算結果のキャリーの反転値を第2のディスティネーションレジスタに格納する減算手段を備えている。
【0175】
別言すれば、上記演算回路20−1、20−3は、2つのジェネラルレジスタで指定された固定小数点1ワードデータを、第3のジェネラルレジスタで指定されたキャリーと共に加算し、加算結果を第1のディスティネーションレジスタに格納し、加算結果のキャリーを第2のディスティネーションレジスタに格納するaddc命令を実行する。また、上記演算回路20−1、20−3は、第1のジェネラルレジスタで指定された固定小数点1ワードデータから第2のジェネラルレジスタで指定された固定小数点1ワードデータを減算すると共に、第3のジェネラルレジスタで指定されたキャリーの反転値を減算し、減算結果を第1のディスティネーションレジスタに格納し、減算結果のキャリーの反転値を第2のディスティネーションレジスタに格納するsubc命令を実行する。更に、上記演算回路20−1、20−3は、2つのジェネラルレジスタで指定されたパック10進数1ワードデータを、第3のジェネラルレジスタで指定されたキャリーと共に加算し、加算結果を第1のディスティネーションレジスタに格納し、加算結果のキャリーを第2のディスティネーションレジスタに格納するaddc.p命令を実行する。また、上記演算回路20−1、20−3は、第1のジェネラルレジスタで指定されたパック10進数1ワードデータから第2のジェネラルレジスタで指定されたパック10進数1ワードデータを減算すると共に、第3のジェネラルレジスタで指定されたキャリーの反転値を減算し、減算結果が負数の場合には10の補数として、減算結果を第1のディスティネーションレジスタに格納し、減算結果のキャリーの反転値を第2のディスティネーションレジスタに格納するsubc.p命令を実行する。
【0176】
addc命令は、図70の128に示されるように、加算する対象が格納されている2つのレジスタ(%rs1)、(%rs2)と、加算すべきキャリーが格納されているレジスタ(%rs3)と、結果を書き込むディスティネーションレジスタ(%rd1)と、加算結果のキャリーを書き込むディスティネーションレジスタ(%rd2)とを指定して記述される。但し、加算対象であるキャリーは、ジェネラルレジスタrs3の最下位ビットであるビット31に格納されており、ビット0〜30は無視される。また、加算結果であるキャリーは、ディスティネーションレジスタrd2の最下位ビットであるビット31に格納され、ビット0〜30は使用されない。上記記述128の右には、コロンを挟んで、addc命令の内容が数式と記号で疑似的に表現されている。
【0177】
subc命令は、図71の129に示されるように、引かれる対象が格納されている第1のレジスタ(%rs1)、引く数値が格納されている第2のレジスタ(%rs2)と、引くべきキャリーが格納されているレジスタ(%rs3)と、結果を書き込むディスティネーションレジスタ(%rd1)と、減算結果のキャリーの反転値を書き込むディスティネーションレジスタ(%rd2)とを指定して記述される。但し、引くべきキャリーは、ジェネラルレジスタrs3の最下位ビットであるビット31に格納されており、ビット0〜30は使用されない。また、減算結果に係るキャリーは、ディスティネーションレジスタrd2の最下位ビットであるビット31に格納され、ビット0〜30は使用されない。上記記述129の右には、コロンを挟んで、subc命令の内容が数式と記号で疑似的に表現されている。
【0178】
上記addc命令に対応して、演算回路20−1、20−3には、図74に示されるような加算手段が備えられている。つまり、32個のフルアダー60−1〜60−32から構成され、a31〜a0 にはレジスタrs1のデータが、b31〜b0 にはレジスタrs2のデータが、CA にはレジスタrs3のデータ(ビット31)が、それぞれセットされる。また、d31〜d0 にはレジスタrd1へ書き込むべきデータが出力され、CB にはレジスタrd2のビット31に書き込まれるデータが出力される。各フルアダーにおける桁上がりは、上位のフルアダーのキャリー入力端子に与えられる。また、上記subc命令に対応して、演算回路20−1、20−3に備えられる減算手段は、上記図74の構成において、フルアダーを全減算器で置き換えた構成を有する。
【0179】
更に、addc.p命令は、図72の130に示されるように、加算する対象が格納されている2つのレジスタ(%rs1)、(%rs2)と、加算すべきキャリーが格納されているレジスタ(%rs3)と、結果を書き込むディスティネーションレジスタ(%rd1)と、加算結果のキャリーを書き込むディスティネーションレジスタ(%rd2)とを指定して記述される。加算はパック10進数毎、つまり、4ビット毎に行われ、4ビット毎の結果がディスティネーションレジスタ(%rd1)に書き込まれる。但し、加算対象であるキャリーは、ジェネラルレジスタrs3の最下位ビットであるビット31に格納されており、ビット0〜30は無視される。また、加算結果であるキャリーは、ディスティネーションレジスタrd2の最下位ビットであるビット31に格納され、ビット0〜30は使用されない。上記記述130の右には、コロンを挟んで、addc.p命令の内容が数式と記号で疑似的に表現されている。
【0180】
subc.p命令は、図73の131に示されるように、引かれる対象が格納されている第1のレジスタ(%rs1)、引く数値が格納されている第2のレジスタ(%rs2)と、引くべきキャリーが格納されているレジスタ(%rs3)と、結果を書き込むディスティネーションレジスタ(%rd1)と、減算結果のキャリーの反転値を書き込むディスティネーションレジスタ(%rd2)とを指定して記述される。減算はパック10進数毎、つまり、4ビット毎に行われ、4ビット毎の結果がディスティネーションレジスタ(%rd1)に書き込まれる。但し、引くべきキャリーは、ジェネラルレジスタrs3の最下位ビットであるビット31に格納されており、ビット0〜30は使用されない。また、減算結果に係るキャリーは、ディスティネーションレジスタrd2の最下位ビットであるビット31に格納され、ビット0〜30は使用されない。上記記述131の右には、コロンを挟んで、subc.p命令の内容が数式と記号で疑似的に表現されている。
【0181】
上記addc.p命令に対応して、演算回路20−1、20−3には、図75に示されるような加算手段が備えられている。つまり、それぞれパック10進数を加算する8個のパック10進数加算器61−1〜61−8と、このパック10進数加算器61−1〜61−8の出力について、必要に応じてキャリーと当該桁の結果とに別けて出力する補正・キャリー出力回路62−1〜61−8とから構成される。パック10進数加算器61−1〜61−8には、入力端子A7 〜A0 、B7 〜B0 が備えられており、それぞれ4ビットのパック10進数データが入力される。但し、入力端子A7 〜A0 、B7 〜B0 へ入力されるデータがパック10進数の不正データ(16進のA〜F)であっても加算を行うので、係る場合の演算結果は保証されず、不正データが出力されることがあり得る。また、補正・キャリー出力回路62−1〜61−8は、加算の結果が16進のA〜Fのときに、キャリーを出力すると共に結果からキャリー分を引くを補正して出力とする。また、結果が負数のときには、これを10の補数に変換して出力する。A31〜A0 にはレジスタrs1のデータが、B31〜B0 にはレジスタrs2のデータが、CA にはレジスタrs3のデータ(ビット31)が、それぞれセットされる。また、D31〜D0 にはレジスタrd1へ書き込むべきデータが出力され、CB にはレジスタrd2のビット31に書き込まれるデータが出力される。各補正・キャリー出力回路62−1〜61−7における桁上がりは、上位の補正・キャリー出力回路のキャリー入力端子に与えられる。また、上記subc.p命令に対応して、演算回路20−1、20−3に備えられる減算手段は、上記図75の構成において、パック10進数加算器61−1〜61−8をそれぞれパック10進数減算器で置き換えた構成を有する。
【0182】
上記演算回路20−1、20−3を備えたRISC計算機は、複数ワードのパック10進数データについて加算、減算を行うRISC計算機として機能する。従来のRISC計算機においては、例えば、図83に示されるような4ワードからなるパック10進数データの加算、減算を実行する場合には、図76〜図78に示されるフローチャートのプログラムにより1バイトずつ処理を行っていた。また、上記図76〜図78の処理は、図79〜図81に示されるC言語による記述に対応しているので、それぞれに同一符号を付して説明する。
【0183】
図79のブロックB161内には、各レジスタ等の定義が記述されている。そして、ブロックB162内では、前処理においてデータ1とデータ2との符号ビット(最下位の4ビット)を削除すると共に、レジスタi、jにデータ1、データ2の大きさ(長さ)から1を引いたデータをセットし、処理の残バイト数を検出可能とし、また、未だキャリーが無いことをレジスタcarry に0をセットして示す。図83のデータ1、2については大きさが16バイトであるから、i=15、j=15となる。
【0184】
次に、データ1とデータ2との符号が一致しているか否かを検出する(S165)。一致すると、レジスタiの値が1より大であるか否かを検出してデータ1に計算すべきバイトが残っているか否かを調べる(S166)。ここでは、i=15よりyesへ分岐し、データ1の最下位バイト(EA1[15])と0xf0との論理積により最下位バイトの上位4ビットを取り出し、4右シフトして最下位4ビットの位置に移動し、これをレジスタEA1hにセットすると共に、データ1の最下位バイト(EA1[15])と0x0fとの論理積により最下位バイトの下位4ビットを取り出し、これをレジスタEA1lにセットする(S167)。ステップS168は、ステップ166でnoへ分岐した場合の処理であり、データ1に計算すべきデータがない場合であるから、レジスタEA1h、レジスタEA1lにそれぞれ0をセットする。ステップS169〜S171の処理は、データ2についての処理であり、データ1についての処理であるステップS166〜S168と同様な処理が行われる。
【0185】
次に、下位1桁の加算を行い(S172)、結果にキャリーが生じたか否かをレジスタclが10を越えていないかを検出することにより調べる(S173)。キャリーがなければ、上位1桁の加算を行い(S174)、キャリーがあると下位1桁の加算結果から10を引くと共に、上位1桁の加算に桁上がりの1を加えて上位1桁の加算結果を得る(S175)。更に、上位1桁の加算結果にキャリーが生じたか否かをレジスタchが10を越えていないかを検出することにより調べる(S176)。ここで、キャリーがなければ、レジスタcarry に0をセットする(S177)、一方、キャリーがあると上位1桁の加算結果から10を引くと共に、上位1桁の加算結果に桁上がりがあったことをレジスタcarry に1をセットして示す(S178)。次に、レジスタchのデータを4左シフトし、レジスタclのデータと論理和を作成することにより上位1桁と下位1桁とを1バイトにし(S179)、次の1バイトの処理へ移るため、レジスタi、jから更に1をそれぞれ引き、レジスタi、jの内容が0より大か否かに応じてステップS166からの処理を繰り返すか、ステップS195の後処理へ進むかを決定する(S180)。ここで、図83のデータ1、データ2については、16バイトゆえに16回の繰り返し処理が行われる。これにより、1ワード32ビットで4ワード分のパック10進数データの絶対値の加算が行われる。
【0186】
一方、ステップS165において、データ1とデータ2の符号が不一致が検出された場合には、それぞれの絶対値を調べて、大きい方のデータをレジスタEA1 にセットする(S181)。つまり、レジスタi、jの値を基に、これが等しいときには、データ1、2の最上位バイトから取り出しそれらが等しい場合には、レジスタk の値を0からインクリメントして順次比較を行い、データ2の或る1バイトがデータ1の対応する1バイトより大きい場合には、work=EA1,EA1=EA2,EA2=work のレジスタ操作によりデータ1とデータ2の入れ換えを行う。また、レジスタi、jの値を基に、データ2のデータ大きさjがデータ1の大きさiより大であるときには、上記と同様のレジスタ操作により、データ1とデータ2の入れ換えを行う。なお、データ1の方が大であると、入れ換えは行われない。
【0187】
次に、データ1の最下位バイト(EA1[15])と0xf0との論理積により最下位バイトの上位4ビットを取り出し、4右シフトして最下位4ビットの位置に移動し、これをレジスタEA1hにセットすると共に、データ1の最下位バイト(EA1[15])と0x0fとの論理積により最下位バイトの下位4ビットを取り出し、これをレジスタEA1lにセットする(S182)。そして、レジスタjの値が1より大であるか否かを検出してデータ2に計算すべきバイトが残っているか否かを調べる(S183)。ここでは、j=15よりyesへ分岐し、データ2の最下位バイト(EA2[15])と0xf0との論理積により最下位バイトの上位4ビットを取り出し、4右シフトして最下位4ビットの位置に移動し、これをレジスタEA2hにセットすると共に、データ1の最下位バイト(EA2[15])と0x0fとの論理積により最下位バイトの下位4ビットを取り出し、これをレジスタEA2lにセットする(S184)。ステップS185は、ステップ183でnoへ分岐した場合の処理であり、データ2に計算すべきデータがない場合であるから、レジスタEA2h、レジスタEA2lにそれぞれ0をセットする。
【0188】
次に、下位1桁の減算を行い(S186)、結果にキャリーが生じたか否かをレジスタclが0より大かを検出することにより調べる(S187)。キャリーがなければ、上位1桁の減算を行い(S188)、キャリーがあると下位1桁の減算結果に10を加えると共に、上位1桁の減算において桁下がりの1を引いて上位1桁の減算結果を得る(S189)。更に、上位1桁の減算結果にキャリーが生じたか否かをレジスタchが0より大かを検出することにより調べる(S190)。ここで、キャリーがなければ、レジスタcarry に0をセットする(S191)、一方、キャリーがあると上位1桁の減算結果に10を加える共に、上位1桁の減算結果に桁下がりがあったことをレジスタcarry に1をセットして示す(S192)。次に、レジスタchのデータを4左シフトし、レジスタclのデータと論理和を作成することにより上位1桁と下位1桁とを1バイトにし(S193)、次の1バイトの処理へ移るため、レジスタi、jから更に1をそれぞれ引き、レジスタiの内容が0より大か否かに応じてステップS182からの処理を繰り返すか、ステップS195の後処理へ進むかを決定する(S194)。ここで、図83のデータ1、データ2については、16バイトゆえに16回の繰り返し処理が行われる。これにより、1ワード32ビットで4ワード分のパック10進数データの絶対値の減算が行われる。
【0189】
上記の絶対値の演算結果を得て、後処理についで符号処理を行うことにより、加算が実行される。なお、パック10進数の減算の場合には、データ1とデータ2の符号が一致のときに絶対値の減算を行い、符号が不一致のときに絶対値の加算を行う。このように、従来のRISC計算機による複数ワードのパック10進数データの加算または減算は、バイト単位に処理が繰り返されていたので、最終的な演算結果が得られるまでに処理回数が多くなるという問題点がある。また、RISC計算機では、レジスタ長が32ビット、64ビット等であり、8ビットずつ処理するのでは、レジスタに空きが生じ効率が悪く、また、並列処理の場合にも効率が上がらないという問題点があった。
【0190】
本発明に係るaddc.p命令及びsubc.p命令を実行する演算回路20−1(20−3)を有するRISC計算機により上記問題点が解決される。つまり、本発明の実施の形態に係るRISC計算機は、図82に示されるように、一致不一致検出手段65、加算手段66、減算手段67を有する。一致不一致検出手段65は、複数ワードのパック10進数からなる第1のデータと複数ワードのパック10進数からなる第2のデータのそれぞれの符号の一致不一致を検出する。パック10進数データの加算を行う場合には、上記検出の結果、符号が一致していることが検出された場合(実線の矢印により示される。)に、また、パック10進数データの減算を行う場合には、上記検出の結果、符号が不一致であることが検出された場合(破線の矢印により示される。)に、それぞれ、加算手段66は、addc.p命令を実行する演算回路20−1(20−3)を用いて上記第1のデータと第2のデータとをワード単位に加算する。このとき、加算の各段階で生じたキャリーを次段階の加算にて用いて複数ワードのパック10進数の加算を行う。つまり、図82のワード1とワード2との加減算の場合には、LOW1とLOW2、MIDL1とMIDL2、MIDH1とMIDH2、HIGH1とHIGH2のそれぞれの1ワード毎のキャリーを含む加算が行われるだけで、結果を得ることができる。パック10進数データの加算を行う場合には、上記検出の結果、符号が不一致であることが検出された場合(実線の矢印により示される。)に、また、パック10進数データの減算を行う場合には、上記検出の結果、符号が一致していることが検出された場合(実線の矢印により示される。)に、それぞれ、減算手段67は、subc.p命令を実行する演算回路20−1(20−3)を用いて上記第1のデータと第2のデータとをワード単位に減算する。このとき、減算の各段階で生じたキャリーを次段階の減算にて用いて複数ワードのパック10進数の減算を行う。つまり、図82のワード1とワード2との減算の場合には、LOW1とLOW2、MIDL1とMIDL2、MIDH1とMIDH2、HIGH1とHIGH2のそれぞれの1ワード毎のキャリーを含む減算が行われるだけで、結果を得ることができる。上記のパック10進数の加減算の結果に対しては、符号処理により適切な符号が与えられる。
【0191】
図41に示されるような演算回路20(20−1、20−3)を備え、演算回路20(20−1、20−3)がaddc.p命令及びsub.p命令を実行するRISC計算機は、図84に示されるフローチャートの処理により、図83に示される4ワードのパック10進数データ1、2の減算を行う。すなわち、パック10進数データが図83に示されるように、4ワードから構成され、1ワードが32ビットであるとする。すると、1ワード毎に減算処理を行い、これを4回繰り返す。この処理は、図85に示されるニーモニック表記と対応しているので、フローチャートと共に参照して説明を行う。
【0192】
まず、前処理において、データ1とデータ2の符号部を削除しておく(S201)。つまり、図83に示されるように、符号部は最下位ワードの下位4ビットにあるから、これを削除(0との置き換え)を行っておく。次に、データ1の符号をレジスタw11にセットし(S202)、データ2の符号をレジスタw12にセットする(S203)。つまり、図85に示されるように、レジスタLOW1にセットされた最下位ワードと下位4ビットのみが1の0xfとの論理積を作成してレジスタw11にセットし、レジスタLOW2にセットされた最下位ワードと下位4ビットのみが1の0xfとの論理積を作成してレジスタw12にセットする。次のmov命令は、図84では、注にあるように、レジスタcarry に0をセットすることに対応している。
【0193】
次に、レジスタw11とレジスタw12との内容が一致するかを検出して、データ1とデータ2の符号が同一ないかを調べる(S204)。ここで、同一でなければ、判断4のtureへ分岐し加算処理となる。つまり、addc.p命令によりレジスタLOW1、LOW2にそれぞれセットされた最下位のワードとレジスタcarry の内容を加えてレジスタLOW1に結果を、キャリーをレジスタcarry にセットする(S205)。更に、addc.p命令によりレジスタMIDL1、MIDL2にそれぞれセットされた最下位から2番目のワードとレジスタcarry の内容を加えてレジスタMIDL1に結果を、キャリーをレジスタcarry にセットする(S206)。更に、addc.p命令によりレジスタMIDH1、MIDH2にそれぞれセットされた最下位から3番目のワードとレジスタcarry の内容を加えてレジスタMIDH1に結果を、キャリーをレジスタcarry にセットする(S207)。次に、addc.p命令によりレジスタHIGH1、HIGH2にそれぞれセットされた最上位のワードとレジスタcarry の内容を加えてレジスタHIGH1に結果を、キャリーをレジスタcarry にセットする(S208)。そして、符号処理(S209)へと進む。
【0194】
一方、符号が一致すると、判断4のfaulへ分岐し、減算処理となる。つまり、subc.p命令によりレジスタLOW1にセットされた最下位のワードからレジスタLOW2にセットされた最下位のワードとレジスタcarry の内容を引いてレジスタLOW1に結果を、キャリーをレジスタcarry にセットする(S210)。更に、レジスタMIDL1にセットされた最下位から2番目のワードからレジスタMIDL2にセットされた最下位から2番目のワードとレジスタcarry の内容を引いてレジスタMIDL1に結果を、キャリーをレジスタcarry にセットする(S211)。更に、レジスタMIDH1にセットされた最下位から3番目のワードからレジスタMIDH2にセットされた最下位から3番目のワードとレジスタcarry の内容を引いてレジスタMIDH1に結果を、キャリーをレジスタcarry にセットする(S212)。そして、レジスタHIGH1にセットされた最上位のワードからレジスタHIGH2にセットされた最上位のワードとレジスタcarry の内容を引いてレジスタHIGH1に結果を、キャリーをレジスタcarry にセットする(S213)。そして、符号処理(S209)へと進む。
【0195】
以上のようにして、4ワードからなるパック10進数データの減算が、図85の命令列のまま実装した場合には、1つの演算回路20−1(または、20−3)において、15ステップ、分岐数1で実行される。つまり、1ワード単位で減算が行われる結果、バイト単位で処理を行っていた従来に比べて、遥かに処理ステップが少なくなると共に、レジスタに1ワードのデータが格納され、効率良く利用処理される。
【0196】
上記図41の構成のRISC計算機により、図85に示される命令コード列の処理を並列実行させる場合の命令コード列を図86に示す。上記図85の例では1つの演算回路(例えば、20−1)が、addc.p命令またはsubc.p命令を1サイクルに1命令実行して4ワード分の4回繰り返すようにしたが、この図86の例では、addc.p命令またはsubc.p命令を1サイクルに複数命令実行する。つまり、演算回路20−1でaddc.p命令を実行し、並列的に演算回路20−3でsubc.p命令を実行している。これにより、図85の構成では、15サイクル必要であったのに対し、本実施例では7サイクル、分岐数0で済むようになっており、処理の高速化が図られている。
【0197】
なお、上記図84〜図86に示す処理では、パック10進数データの減算を例に挙げたが、同様にパック10進数データの加算の処理もaddc.p命令またはsubc.p命令を用いて実行することができる。つまり、ステップS204の分岐(図85、図86も同様)において、tureとfaulを反転させることにより、パック10進数データの加算処理を実行することができる。
【0198】
上記演算回路20−1、20−2、20−3、20−4を備えたRISC計算機は、パック10進数データについて乗算を行うRISC計算機として機能する。従来のRISC計算機においては、例えば、図87の最上位行に示されるような1ワード(4バイト)からなるパック10進数データの乗算を実行する場合には、図87〜図91に示されるフローチャートのプログラムにより1バイトずつ処理を行っていた。また、上記図87〜図91の処理は、図92〜図93に示されるC言語による記述に対応しているので、それぞれに同一符号を付して説明する。
【0199】
図92のブロックB171内には、各レジスタ等の定義が記述されている。そして、ブロックB172内では、前処理においてデータ1とデータ2との符号ビット(最下位の4ビット)の取り出しを行うと共に、レジスタi、jにデータ1、データ2の大きさ(長さ)をセットし、処理の残バイト数を検出可能とし、また、未だキャリーが無いことをレジスタcarry に0をセットして示す。図92のデータ1、2については大きさ(長さ)が4バイトであるから、i=4、j=4となる。
【0200】
次に、i、jについて、大小関係及び所与の桁数内で正常であるかを検出する(S210)。ここで、NOとなるとERRのオーバーフロー処理(S237)へと進む。正常であれば、レジスタEA1sig 、EA2sig にデータ1、2の符号を保存する(S211)。更に、データ1、2の符号を削除して(S212)、データ1のバイト数iの範囲内でkを変化させbuf[k]=0を生成する(S213)。次に、iに対応するデータ1の1バイトの上位桁をEA1Hにセットし、下位桁をEA1Lにセットする(S214)。そして、jが0より大であるか否かに基づいてデータ2に計算するデータがあるかを検出する(S215)。計算すべきデータがあれば、jに対応するデータ2の1バイトの上位桁をEA2Hにセットし、下位桁をEA2Lにセットする(S216)。また、計算すべきデータがなければ、EA2H、EA2Lに0をセットする(S217)。
【0201】
次に、buf[k]にセットされている中間結果の上位桁をbufHへセットすると共に、下位桁をbufLへセットする(S218)。当初は、このbuf[k]の値は0である。次に、レジスタcarry を調べて、その値を10で割った商である桁上がり分のキャリーを上記bufHに加え、10で割った剰余を上記bufLへ加えて、下位桁からのキャリーを中間結果に反映させる(S219)。そして、データ1の下位桁とデータ2の下位桁の掛け算にbufLのデータを加えて、xLにセットする(S220)。この下位桁の乗算結果であるxLが10を越えていないか否か検出して、下位桁の乗算にキャリーが生じたか否かを検出する(S221)。ここで、キャリーがなければ、xLにセットされている結果をレジスタyLへ移し、データ1の下位桁とデータ2の上位桁との掛け算を行い、データ1の上位桁とデータ2の下位桁との掛け算を行い、これら2つの掛け算結果にbufHにセットされているキャリーを加えてxHにセットする(S222)。一方、キャリーが生じていると、xLにセットされている結果を10で割った剰余をレジスタyLへセットし、データ1の下位桁とデータ2の上位桁との掛け算を行い、データ1の上位桁とデータ2の下位桁との掛け算を行い、これら2つの掛け算結果にbufHにセットされているキャリー並びにxLの内容を10で割った商を加えてxHにセットする(S223)。
【0202】
次に、上記xHの値が10を越えていないか否かに基づき、上記で行った2桁目と1桁目の乗算結果にキャリーが発生したのかを検出する(S224)。そして、キャリーが発生していなければ、xHにセットされている結果をyHに移し、データ1のとデータ2の上位桁同志を掛けて結果をcarry にセットする(S225)。一方、キャリーが生じていると、xHにセットされている結果を10で割った剰余をレジスタyHへセットし、データ1のとデータ2の上位桁同志を掛けて、この結果にxHにセットされている結果を10で割った商を加えてcarry にセットする(S226)。次に、yHの結果とyLの結果とを1バイトに並べてbuf[k]にセットして中間結果を得る(S227)。
【0203】
次に、kをディクリメントしたときkが0よりも小となり、かつ、carry があるか、つまり、中間結果をセットする対象のbuf[k]が無いにも拘らず最上位の桁上げがcarry に格納されていることによるオーバーフローを検出し(S228)、Yとなると、ERRへ分岐しオーバーフロー処理が行われる(S237)。上記ステップS228においてNへ分岐すると、jをディクリメントしたとき0以上、または、carry があるか、つまり、データ2に計算すべきデータが残されているとき、または、データ2に計算すべきデータが残されていないが、最上位の桁上げがcarry に格納されていることによるオーバーフローを検出し(S229)、YとなるとステップS215へ戻って処理を継続し、Nとなると、jにデータ2の長さをセットし、iをディクリメントしてkへセットし、データ1の次の1バイトとデータ2の乗算の準備を行い(S230)、上記iが0以上かを検出してデータ1に計算すべきバイトが残っているかを検出して(S231)、YとなるとステップS214へ戻って処理を継続し、Nとなると最上位の桁上げがcarry に格納されていることによるオーバーフローを検出し(S232)、YとなるとERRへ分岐しオーバーフロー処理が行われる(S237)。また、Nとなると、各buf[k](k<i)にセットされた結果を順次EA1に戻して最終結果を得る(S233)。
【0204】
次に、データ1とデータ2の符号は同一かどうかを調べ(S234)、同一であれば、0c(1100)をEA1の最下位桁に符号としてセットし(S235)、同一でなければ、0d(1101)をEA1の最下位桁に符号としてセットする(S236)。
【0205】
上記のように従来のRISC計算機によるパック10進数データの乗算は、バイト単位に処理を行い桁上がりを上位に順送りし、これを繰り返していたので、演算結果が得られるまでに処理回数が多くなるという問題点があった。また、RISC計算機では、レジスタ長が32ビット、64ビット等であり、8ビットずつ処理するのでは、レジスタに空きが生じ効率が悪く、また、並列処理の場合にも効率が上がらないという問題点があった。
【0206】
上記に対し、本発明の実施の形態に係るRISC計算機は、第1の1ワードデータの最下位4ビットから4ビット間隔をおいて、パック10進数を取り出し、この複数のパック10進数データと第2の1ワードデータの最下位4ビットのパック10進数データとを掛け合わせて、2桁のパック10進数データを上記第1の1ワードデータに存在するパック10進数データと同個数得て、ディスティネーションオペランドに出力する乗算手段を備える演算回路を具備する。
【0207】
別言すれば、上記演算回路20−1、20−2、20−3、20−4は、上記乗算手段を用いて、第1の1ワードデータの最下位4ビットから4ビット間隔をおいて、パック10進数を取り出し、この複数のパック10進数データと第2の1ワードデータの最下位4ビットのパック10進数データとを掛け合わせて、2桁のパック10進数データを上記第1の1ワードデータに存在するパック10進数データと同個数得て、ディスティネーションオペランドに出力するmul.p命令を実行する。
【0208】
mul.p命令は、図94の135に示されるように、乗算する対象が格納されている2つのレジスタ(%rs1)、(%rs2)と、結果を書き込むディスティネーションレジスタ(%rd1)とを指定して記述される。この例では、1ワードは32ビットであるから、レジスタrs1のビット0〜3、ビット8〜11、ビット16〜19、ビット24〜27は無視して、4ビット間隔をおいてレジスタrs1のビット4〜7、ビット12〜15、ビット20〜23、ビット28〜31に配置された4つの10進数データを被乗数とし、レジスタrs2のビット0〜27を無視して、最下位のビット28〜31に配置された1桁の10進数データを乗数として上記被乗数に掛ける。掛け算の結果は、レジスタrd1に1バイト単位で図94に示すようにセットする。
【0209】
上記mul.p命令に対応して、演算回路20−1〜20−4には、図95に示されるような乗算手段が備えられている。つまり、レジスタrs1のビット4〜7、ビット12〜15、ビット20〜23、ビット28〜31に配置された4つの10進数データ以外をマスクするマスク回路71、レジスタrs2のビット0〜27をマスクするマスク回路72、マスク回路71から出力されるレジスタrs1のビット4〜7の10進数データとマスク回路72から出力されるレジスタrs2のビット28〜31の10進数データとの掛け算を行うパック10進数乗算器73−1、レジスタrs1のビット12〜15の10進数データとマスク回路72から出力されるレジスタrs2のビット28〜31の10進数データとの掛け算を行うパック10進数乗算器73−2、レジスタrs1のビット20〜23の10進数データとマスク回路72から出力されるレジスタrs2のビット28〜31の10進数データとの掛け算を行うパック10進数乗算器73−3、レジスタrs1のビット28〜31の10進数データとマスク回路72から出力されるレジスタrs2のビット28〜31の10進数データとの掛け算を行うパック10進数乗算器73−4を備える。各パック10進数乗算器73−1〜4は、2つの入力の掛け算を行い、図94のレジスタrd1に示される8ビット単位のパック10進数データを出力する。但し、各パック10進数乗算器73−1〜4の入力端子へ入力されるデータがパック10進数の不正データ(16進のA〜F)であっても乗算を行うので、係る場合の演算結果は保証されず、不正データが出力されることがあり得る。
【0210】
そして、本発明に係るmul.p命令を実行する演算回路20−1〜20−4、shx命令、ishx命令、sll.l命令、add.c命令を実行する演算回路20−1(20−3)を有する本発明の実施の形態に係るRISC計算機により上記従来のRISC計算機でパック10進数の乗算を行う場合の問題点を解決する。つまり、本発明の実施の形態に係るRISC計算機は、図96に示されるように、前処理手段81、乗算手段82、桁分離手段83、桁補正手段84、加算手段85を具備する。前処理手段81は、1ワードのパック10進数からなる被乗数データと、パック10進数の0が1ワード集合されてなるデータとをshx命令を実行する演算回路20−1(20−3)を用いて完全シャッフル処理する。乗算手段82は、前処理手段81により完全シャッフル処理された結果の2桁毎に対し、mul.p命令を実行する演算回路20−2(20−4)を用いて乗数を構成する1桁のパック10進数データを掛け合わせて2桁単位の結果を得る。桁分離手段83は、上記乗算手段82により得られた結果に対しishx命令を実行する演算回路20−1(20−3)を用いて逆完全シャッフル処理して上位桁と下位桁に分離する。桁補正手段84は、上記桁分離手段83により分離された上位桁の結果にsll.l命令を実行する演算回路20−1(20−3)を用いて4ビットの左シフトを生じさせて、桁上がりによる桁位置との一致を図る。加算手段85は、桁位置補正手段84により補正された結果と、上記桁分離手段84により分離された下位桁の結果とをaddc.p命令を実行する演算回路20−1(20−3)を用いて加算すると共に、加算の結果生じたキャリーを上記桁位置補正手段84により上位ワードへシフトされた数値に加算して、パック10進数データの乗算結果を得る。
【0211】
つまり、上記各手段による処理によって、図96の最上位に記載の1ワードの被乗数「89567890」に対し、1ワードの乗数「00000007」を掛ける演算を行うと、同図96の最下位に記載の2ワード分の結果「00000006」、「26975230」を、つまり、連続数字では、「626975230」を得ることができる。
【0212】
上記本発明の実施の形態に係るRISC計算機によりパック10進数の乗算を実行する場合の処理を図97から図104を参照して順を追って説明する。図97には、図96の最上位に記載の1ワードの被乗数「89567890」がレジスタr1に記憶され、1ワードの乗数「00000007」がレジスタr2に記憶され、これらの乗算(%r1×%r2)を行うことが示されている。この場合、レジスタr1、r2に記憶されるパック10進数データは、前処理において符号が除去されている。
【0213】
前処理手段81は、図98に示されるshx命令を実行する。つまり、演算回路20−1(20−3)により、1ワードの0のパック10進数データ(%zero)と上記レジスタr1の1ワードの被乗数「89567890」との完全シャッフル処理を行う。この場合、第3オペランドには%zeroがセットされている結果、対交換は行われない。そして、完全シャッフル処理の結果は、図98に示すように、レジスタw1、w2に記憶される。
【0214】
次に、乗算手段82は、図99に示されるmul.p命令を実行する。例えば、演算回路20−2(20−4)により、上記完全シャッフル処理されレジスタw1にセットされたパック10進数データ「08090506」と、レジスタr2の乗数「00000007」との間でmul.p命令による処理を行う。具体的には、「08090506」の内の「8」、「9」、「5」、「6」と乗数「7」との乗算を行い、結果である「56」、「63」、「35」、「42」を並べてレジスタw1にセットする。従って、レジスタw1の偶数桁はキャリーとなっている。
【0215】
更に、乗算手段82は、図100に示されるmul.p命令を実行する。例えば、演算回路20−2(20−4)により、上記完全シャッフル処理されレジスタw2にセットされたパック10進数データ「07080900」と、レジスタr2の乗数「00000007」との間でmul.p命令による処理を行う。具体的には、「07080900」の内の「7」、「8」、「9」、「0」と乗数「7」との乗算を行い、結果である「49」、「56」、「63」、「00」を並べてレジスタw2にセットする。従って、レジスタw2の偶数桁はキャリーとなっている。
【0216】
次に、桁分離手段83は、図101に示されるishx命令を実行する。つまり、演算回路20−1(20−3)により、レジスタw1にセットされた1ワードのパック10進数データ「56633542」とレジスタw2にセットされた1ワードのパック10進数データ「49566300」との完全逆シャッフル処理を行う。この場合、第3オペランドには%zeroがセットされている結果、対交換は行われない。そして、完全シャッフル処理の結果は、図101に示すように、レジスタw1、w2に記憶される。この結果、レジスタw1には掛け算の結果の2桁の内の桁上がり分(2桁目)のデータが記憶され、レジスタw2には掛け算の結果の2桁の内の1桁目のデータが記憶され、桁分離が行われる。
【0217】
次に、桁補正手段84は、図102に示されるsll.l命令を実行する。つまり、演算回路20−1(20−3)により、%zero及びレジスタw2にセットされた倍語のデータを第3オペランドの4ビット分左シフトする。この結果、レジスタw3の最下位には、掛け算の2桁目が1ワード分セットされたレジスタw1の最上位の「5」がシフトされて現れ、レジスタw3のデータは「00000005」となる。また、レジスタw1には桁上がりに係る7個分のデータが1桁ずつ左シフトされて記憶され、レジスタw1のデータは「63445600」となる。この結果、レジスタw3、w1には、桁上がりの結果に応じた桁へのデータの配置転換、つまり、桁補正がなされる。
【0218】
次に、加算手段85は、図103に示されるaddc.p命令を実行する。つまり、演算回路20−1(20−3)により、レジスタw1にセットされている桁補正された結果の下位1ワードのデータと、レジスタw2にセットされている掛け算結果の1桁目の1ワードのデータとが加算されて、結果がレジスタw2にセットされ、キャリーがレジスタw4の1桁目にセットされる。斯して、レジスタw2のデータは、図97のデータの掛け算結果の内、下位1ワードのデータでとなり、レジスタw4のデータは順次送りの桁上がりの数値となる。
【0219】
次に、加算手段85は、図104に示されるaddc.p命令を実行する。つまり、演算回路20−1(20−3)により、レジスタw3にセットされている桁補正された結果の上位1ワードのデータと、レジスタw4に記憶された順次送りの桁上がりの数値のデータとが加算されて、結果がレジスタw3にセットされる。レジスタw4にはこのときのキャリーである0がセットされる。以上により、レジスタw3とレジスタw2とのデータを並べた倍語のデータが、図97の2つのデータの乗算結果となる。
【0220】
前述の図41の構成のRISC計算機により、図97〜図104に示される処理をVLIW方式により並列実行させる場合の命令コード列を図105に示す。この例では、1つの演算回路(例えば、20−1)が、shx命令、ishx命令、sll.l命令、addc.p命令を実行し、また、他の1つの演算回路(例えば、20−3)がmul.p命令を実行し、8桁×1桁のパック10進数演算結果を7ステップで得ることができる。従来例との対比では、従来が2桁×2桁の乗算に13ステップ必要であったので、上記の本発明の処理が遥かに高速であることが判る。そして、キャリーの伝播手法は、本発明では8桁分のキャリーを一度に求めることができ、従来の1桁毎に計算して順次に加える手法より高速化を図ることができる。
【0221】
図106には、上記のパック10進数データの乗算を行うRISC計算機が、32桁までのパック10進数データを被乗数とする場合の処理のフローチャートが示されている。この処理を説明すると、被乗数と乗数とをレジスタへロードし(S241)、書くフラグ類等の初期化を行う(S242)。次に、符号の決定及び除去を行い(S243)、被乗数と乗数との有効桁数を求める(S244)。以上の処理は、本発明と従来例とも変わらず、図92においては、B171〜S212までに相当している。
【0222】
そして、実際の乗算に入り、乗数の下位桁から有効桁数までの各桁のパック10進数データの繰り返であるか確認する(S245)。つまり、被乗数の最下位8桁(本実施の形態では1ワード)と上記乗数の下位桁のパック10進数データを上述の図97から図104までの処理により乗算して、被乗数が8桁以下のときには、ステップS250へ進み乗数の次の桁を準備し、ステップS245へ進んで有効桁数までの各桁のパック10進数データを繰り返しを確認して、乗数の全ての桁について乗算を終了すると、乗算結果をメモリへストアする(S251)。また、被乗数が9桁以上16桁以下の場合には、ステップS247へ進み、被乗数の次の8桁について上記と同様に乗算を行う。また、被乗数が17桁以上24桁以下の場合には、ステップS248へ進み、被乗数の次の8桁について上記と同様に乗算を行う。更に、被乗数が25桁以上32桁以下の場合には、ステップS249へ進み、被乗数の次の8桁について上記と同様に乗算を行う。そして、最終結果はメモリへストアする(S251)。このように、図97〜図104に示した処理、つまり、乗数8桁と被乗数1桁の乗算を繰り返し、これらの結果を並べて最終結果を得ることにより、1桁(1バイト)毎に乗算を行っていた場合に比べて高速な乗算を実行することができる。
【0224】
【発明の効果】
以上説明したように本発明の請求項1に記載のRISC計算機によれば、複数ブロック中にセットされたビットがあるか否かに基づいて、所定ブロックが選択され、この選択結果から1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかが検出され、有効ビット長の検出等の高速化を図ることができる効果がある。
【0226】
以上説明したように本発明の請求項2に記載のRISC計算機によれば、fsbit命令を実行して、複数ワードからなるデータの有効ビット長データの計算を行うことができ、セットされているビット位置の検出を条件判定と分岐命令で行う必要がないので、高速な処理が可能である。
【0227】
以上説明したように本発明の請求項3に記載のRISC計算機によれば、演算回路を複数有し、各命令を並列実行するVLIW方式を採用するので、位置検出が、fsbit命令によりなされ、条件判定と分岐命令とが使用されない上に、並列処理がなされ、高速化が図られる。
【0228】
以上説明したように、本発明の請求項4に記載のRISC計算機によれば、1ワードのデータを4ビットに分割して各4ビット毎の大小比較をする演算が1命令により実行されるので、4ビットのデータを大小比較を複数同時に実行可能であり、処理の高速化を図ることができる。
【0229】
以上説明したように、本発明の請求項5に記載のRISC計算機によれば、1ワードのデータを4ビットに分割して各4ビット毎に等しいか否か比較する演算が1命令により実行されるので、4ビットのデータの一致検出を複数同時に実行可能であり、処理の高速化を図ることができる。
【0230】
以上説明したように本発明の請求項6に記載のRISC計算機によれば、条件判定及び分岐命令を使用することなく、fsbit命令及びcmplt.p命令によりパック10進数の有効桁数を得るので、パック10進数の有効桁数を効率的に計算することができる。
【0231】
以上説明したように本発明の請求項7に記載のRISC計算機によれば、条件判定及び分岐命令を使用することなく、fsbit命令及びcmplt.p命令によりパック10進数の有効桁数を得ると共に各命令を並列実行するVLIW方式を採用しているので、並列性が向上し、高速化が図られる。
【0232】
以上説明したように本発明の請求項8に記載のRISC計算機によれば、cmplt.p命令を1サイクルに複数命令実行するので、並列性の向上により処理サイクル数を減少させて高速処理を可能となる効果がある。
【0233】
以上説明したように、本発明の請求項9に記載のRISC計算機によれば、1ワードのデータを1バイトに分割して各1バイト毎の大小比較をする演算が1命令により実行され、1バイトのデータの大小比較を複数同時に実行可能であることから、処理な高速に行われる効果がある。
【0234】
以上説明したように、本発明の請求項10に記載のRISC計算機によれば、1ワードのデータを1バイトに分割して各1バイト毎に等しいか否か比較する演算が1命令により実行され、1バイトのデータの一致検出を複数同時に実行可能であることから、処理な高速に行われる効果がある。
【0235】
以上説明したように本発明の請求項11に記載のRISC計算機によれば、条件判定及び分岐命令を使用することなく、fsbit命令及びcmplt.b命令によりデータの有効バイト長を得るので、複数ワードのデータの有効バイト長を効率的に計算することができる。
【0236】
以上説明したように本発明の請求項12に記載のRISC計算機によれば、条件判定及び分岐命令を使用することなく、fsbit命令及びcmplt.b命令を用いることによりデータの有効バイト長を得ることができ、VLIW方式により並列性が向上し、高速化が図られる効果がある。
【0237】
以上説明したように本発明の請求項13に記載のRISC計算機によれば、cmplt.b命令が1サイクルに複数命令実行され、並列性の向上により処理サイクル数が減少し高速処理がなされる効果がある。
【0238】
以上説明したように請求項14に記載の本発明に係るRISC計算機によれば、条件判定及び分岐命令を使用することなく、ゾーン10進数からなる複数ワードのデータのオーバーフローを効率的に計算することができる。
【0239】
以上説明したように請求項15に記載の本発明に係るRISC計算機によれば、条件判定及び分岐命令を使用することなく、fsbit命令及びcmpeq.b命令により演算結果において使用されているバイト長を得てオーバーフローを検出するようにしているので、並列性の向上、高速化を図ることができる。
【0240】
以上説明したように請求項16に記載の本発明に係るRISC計算機によれば、cmpeq.b命令が1サイクルに複数命令実行されるので、並列性の向上により処理サイクル数を減少させて高速処理が可能となる効果がある。
【0241】
以上説明したように本発明の請求項17に記載のRISC計算機によれば、一時に3つのソースオペランドを与えることができ、第3ソースオペランドの待ち合わせの必要がなく、また、一時に2つのディスティネーションオペランドのライトバックが可能であり、第2ディスティネーションオペランドのライトバック待ちが不要となる効果がある。
【0242】
以上説明したように本発明の請求項18に記載のRISC計算機によれば、3オペランド型命令のみにより構成される命令列に対しても、また、5オペランド型命令を含む命令列に対しても、処理を行うことが可能である。
【0243】
以上説明したように本発明の請求項19に記載のRISC計算機によれば、第0、第1命令フィールド、第2、第3命令フィールドに亘って、それぞれ2ワード長の5オペランド型のRISC命令を配置して実行させることができるようになる。
【0244】
以上説明したように本発明の請求項20に記載のRISC計算機によれば、デコ−ダがスイッチ切り換えによりソースオペランド及びディスティネーションオペランドを選択するので、RISC命令に拡張用コードがセットされている場合に対応して、5オペランド型命令を実行する形態となって処理が行われ、必要なときに5オペランド型命令が実行される。
【0245】
以上説明したように請求項21に記載の本発明に係るRISC計算器によれば、2つの1ワードに存在する4ビット単位のデータを各ワードにまたがって交換して配置を制御して並べ換え、所望の2ワードに変換することが可能となる。
【0246】
以上説明したように請求項22に記載の本発明に係るRISC計算器によれば、2つの1ワードに存在する4ビット単位のデータを4ビットの1ブロックおきに組み合わせて交換して配置を制御して並べ換え、所望の2ワードに変換することが可能となる。
【0247】
以上説明したように本発明の請求項23に記載のRISC計算機によれば、RISC計算機の1ワード単位に処理を行うようにしているので、パック10進数の不正データの除去を効率良く行うことができる。
【0248】
以上説明したように本発明の請求項24に記載のRISC計算機によれば、複数ワードのパック10進数に対しては、そのワード数に対応した繰り返し処理によりパック10進数の不正データの除去を行うことができ、4ビット単位にエラーチェックを行っていた従来に比べて高速化が図られる効果がある。
【0249】
以上説明したように本発明の請求項25に記載のRISC計算機によれば、cmplt.p命令が1サイクルに複数命令実行されるので、並列性の向上により処理サイクル数が減少して高速処理がなされることになる。
【0250】
以上説明したように本発明の請求項26に記載のRISC計算機によれば、2つのジェネラルレジスタで指定された倍語データを、シフトさせて倍語で2つのディスティネーションオペランドに出力するので、1命令で倍語単位の左論理シフトを行うことができる。
【0251】
以上説明したように本発明の請求項27に記載のRISC計算機によれば、2つのジェネラルレジスタで指定された倍語データを、シフトさせて倍語で2つのディスティネーションオペランドに出力するので、1命令で倍語単位の右論理シフトを行うことができる。
【0252】
以上説明したように本発明の請求項28に記載のRISC計算機によれば、2つのジェネラルレジスタで指定された倍語データを、右に算術シフトして倍語で2つのディスティネーションオペランドに出力するので、1命令で倍語単位の右算術シフトを行うことができる。
【0253】
以上説明したように本発明の請求項29に記載のRISC計算機によれば、メモリ内のパック10進数データをレジスタに転送する場合に、メモリ内からワード単位に読み出してレジスタに適切にセットでき、処理の効率化を図ることができる。
【0254】
以上説明したように本発明の請求項30に記載のRISC計算機によれば、1ワード単位の読み出しとシフト、更に1ワード単位の読み出しとシフトという繰り返しで、メモリ内のパック10進数データをレジスタに適切に転送してセット可能であり、バイト単位で転送を行う従来に比べて高速、高効率で転送できる効果がある。
【0255】
以上説明したように本発明の請求項31に記載のRISC計算機によれば、各命令が並列実行されるので、更に処理の高速化を図ることができるという効果がある。
【0256】
以上説明したように本発明の請求項32に記載のRISC計算機によれば、2つのジェネラルレジスタで指定された固定小数点1ワードデータを、第3のジェネラルレジスタで指定されたキャリーと共に加算し、加算結果を第1のディスティネーションレジスタに格納し、加算結果のキャリーを第2のディスティネーションレジスタに格納するようにしたので、固定小数点1ワードデータのキャリー付加算を行うことができる。
【0257】
以上説明したように本発明の請求項33に記載のRISC計算機によれば、第1のジェネラルレジスタで指定された固定小数点1ワードデータから第2のジェネラルレジスタで指定された固定小数点1ワードデータを減算すると共に、第3のジェネラルレジスタで指定されたキャリーの反転値を減算し、減算結果を第1のディスティネーションレジスタに格納し、減算結果のキャリーの反転値を第2のディスティネーションレジスタに格納するようにしたので、固定小数点1ワードデータのキャリー付減算を行うことができる。
【0258】
以上説明したように本発明の請求項34に記載のRISC計算機によれば、2つのジェネラルレジスタで指定されたパック10進数1ワードデータを、第3のジェネラルレジスタで指定されたキャリーと共に加算し、加算結果を第1のディスティネーションレジスタに格納し、加算結果のキャリーを第2のディスティネーションレジスタに格納するようにしたので、パック10進数1ワードデータのキャリー付加算を行うことができる。
【0259】
以上説明したように本発明の請求項35に記載のRISC計算機によれば、第1のジェネラルレジスタで指定されたパック10進数1ワードデータから第2のジェネラルレジスタで指定されたパック10進数1ワードデータを減算すると共に、第3のジェネラルレジスタで指定されたキャリーの反転値を減算し、減算結果が負数の場合には10の補数として、減算結果を第1のディスティネーションレジスタに格納し、減算結果のキャリーの反転値を第2のディスティネーションレジスタに格納するので、パック10進数1ワードデータのキャリー付減算を行うことができる。
【0260】
以上説明したように本発明の請求項36に記載のRISC計算機によれば、複数ワードのパック10進数データの加算が1ワード単位に実行され、複数ワードのパック10進数データの加算が高速処理されるという効果がある。
【0261】
以上説明したように本発明の請求項37に記載のRISC計算機によれば、複数ワードのパック10進数データの減算が1ワード単位に実行され、複数ワードのパック10進数データの減算が高速処理されるという効果がある。
【0262】
以上説明したように、本発明の請求項38に記載のRISC計算機によれば、パック10進数を1桁おきに並べて被乗数を構成し、これに1桁のパック10進数データを掛けて、2桁単位のパック10進数による乗算結果を得ることが可能であり、パック10進数データの1桁×1桁の乗算を、複数同時に実行可能であり、係る乗算の高速化を図ることが可能である。
【0263】
以上説明したように、本発明の請求項39に記載のRISC計算機によれば、桁上がり対応の処理を順次行うことなく、1ワードのパック10進数からなる被乗数データと1桁のパック10進数からなる乗数データとの乗算を行い、結果を得ることができ、処理の高速化を図ることができる。
【0264】
以上説明したように、本発明の請求項40に記載のRISC計算機によれば、複数ワードのパック10進数の被乗数と複数ワードのパック10進数の乗数との乗算演算を請求項39の手法を用いて行うことが可能であり、複数桁同志の乗算を高速処理することができる。
【図面の簡単な説明】
【図1】本発明の実施の形態に係るRISC計算機の要部ブロック図。
【図2】本発明の実施の形態に係るRISC計算機によるfsbit命令の実行処理を説明するための図。
【図3】本発明の実施の形態に係るRISC計算機のfsbit命令を実現するために、演算回路に搭載される要部構成図。
【図4】本発明の実施の形態に係るRISC計算機のfsbit命令を実現するために、演算回路に搭載される要部構成の他の例を示す図。
【図5】有効ビット長の計算処理に用いられる4ワード長データの例を示す図。
【図6】従来のRISC計算機における4ワード長データの有効ビット長の計算処理を示すフローチャート。
【図7】図6のフローチャートに対応するニーモニック表記のプログラムを示す図。
【図8】有効ビット長の計算処理を行う本発明の実施の形態に係るRISC計算機のブロック図。
【図9】本発明の実施の形態に係るRISC計算機による有効ビット長の計算処理を示すフローチャート。
【図10】図9のフローチャートに対応するニーモニック表記のプログラムを示す図。
【図11】VLIW方式を採用した本発明の実施の形態に係るRISC計算機の要部構成図。
【図12】図10に示される命令コード列の処理を並列実行させる場合の、ニーモニック表記のプログラムを示す図。
【図13】本発明の実施の形態に係るRISC計算機で実行されるcmplt.p命令の処理を説明するための図。
【図14】本発明の実施の形態に係るRISC計算機で実行されるcmpeq.p命令の処理を説明するための図。
【図15】4ワードからなるパック10進数の例を示す図。
【図16】パック10進数の有効桁数の計算を行う本実施の形態に係るRISC計算機のブロック図。
【図17】従来のパック10進数の有効桁数の計算処理を示すフローチャート。
【図18】図17のフローチャートに対応するニーモニック表記を示す図。
【図19】本発明の実施の形態に係るRISC計算機によるパック10進数の有効桁数の計算処理を示すフローチャート。
【図20】図19のフローチャートに対応するニーモニック表記を示す図。
【図21】図20に示す処理をVLIW方式により並列処理する場合のニーモニック表記を示す図。
【図22】図20に示す処理をVLIW方式により並列処理する場合のニーモニック表記の他の例を示す図。
【図23】本発明の実施の形態に係るRISC計算機によるcmplt.b命令の実行処理を説明するための図。
【図24】本発明の実施の形態に係るRISC計算機によるcmpeq.b命令の実行処理を説明するための図。
【図25】4ワードからなる有効バイト長計算用のデータ列の例と、本発明の実施の形態による処理過程とを示す図。
【図26】有効バイト長計算を行う本実施の形態に係るRISC計算機のブロック図。
【図27】従来の有効バイト長計算処理を示すフローチャート。
【図28】図27のフローチャートに対応するニーモニック表記を示す図。
【図29】本発明の実施の形態に係るRISC計算機による有効バイト長の計算処理を示すフローチャート。
【図30】図29のフローチャートに対応するニーモニック表記を示す図。
【図31】図30に示す処理をVLIW方式により並列処理する場合のニーモニック表記を示す図。
【図32】図30に示す処理をVLIW方式により並列処理する場合のニーモニック表記の他の例を示す図。
【図33】ゾーン10進数の例を示す図。
【図34】ゾーン10進数データのオーバーフローを検出する本実施の形態に係るRISC計算機の構成図。
【図35】ゾーン10進数データのオーバーフローを検出する本実施の形態に係るRISC計算機の動作を説明するためのフローチャート。
【図36】ゾーン10進数データのオーバーフローを検出する本実施の形態に係るRISC計算機の動作を説明するための図。
【図37】ゾーン10進数データのオーバーフローを検出する本実施の形態に係るRISC計算機の動作を説明するための図。
【図38】ゾーン10進数データのオーバーフローを検出する本実施の形態に係るVLIW方式を採用したRISC計算機の動作を説明するためのフローチャート。
【図39】図38に対応するコード列を示す図。
【図40】図38に対応する他の構成によるコード列を示す図。
【図41】5オペランド型のRISC命令を実行可能な本発明の実施の形態に係るRISC計算機の構成図。
【図42】5オペランド型のRISC命令を含む4命令からなる命令フィールドの図。
【図43】3オペランド型命令のフォーマットを示す図。
【図44】オペランド拡張命令のフォーマットを示す図。
【図45】本発明の実施の形態に係るRISC計算機によるshx命令の実行処理を説明するための図。
【図46】本発明の実施の形態に係るRISC計算機によるshx命令の対交換の実行処理を説明するための図。
【図47】完全シャッフル及び逆完全シャッフル動作を説明するための図。
【図48】本発明の実施の形態に係るRISC計算機のshx命令を実現するために、演算回路に搭載される要部構成図。
【図49】本発明の実施の形態に係るRISC計算機によるishx命令の実行処理を説明するための図。
【図50】本発明の実施の形態に係るRISC計算機によるishx命令の対交換の実行処理を説明するための図。
【図51】パック10進数データの不正データを除去する本実施の形態に係るRISC計算機の構成図。
【図52】パック10進数データの不正データを除去する本実施の形態に係るRISC計算機の動作を説明するためのフローチャート。
【図53】パック10進数データの不正データを除去する本実施の形態に係るRISC計算機の不正パック10進数検出手段による比較動作を説明するための図。
【図54】パック10進数データの不正データを除去する本実施の形態に係るRISC計算機のデータ混合手段によるシャッフル動作を説明するための図。
【図55】パック10進数データの不正データを除去する本実施の形態に係るRISC計算機の不正データ抽出手段による逆シャッフル動作を説明するための図。
【図56】図52のフローチャートに対応するコード列を示す図。
【図57】図56のコード列を並列実行させた場合の命令コード列を示す図。
【図58】本発明の実施の形態に係るRISC計算機によるsll.l命令の実行処理を説明するための図。
【図59】本発明の実施の形態に係るRISC計算機によるsrl.l命令の実行処理を説明するための図。
【図60】本発明の実施の形態に係るRISC計算機によるsra.l命令の実行処理を説明するための図。
【図61】メモリからレジスタへの転送を行う本発明の実施の形態に係るRISC計算機の構成図。
【図62】本発明の実施の形態に係るRISC計算機によりメモリからレジスタへの転送を行う場合の処理の命令コード列を示す図。
【図63】本発明の実施の形態に係るRISC計算機によりメモリからレジスタへの転送を行う場合の処理のフローチャート。
【図64】本発明の実施の形態に係るRISC計算機によりメモリからレジスタへの転送を行う場合の処理のフローチャート。
【図65】本発明の実施の形態に係るRISC計算機によりメモリからレジスタへの転送を行う場合の処理のフローチャート。
【図66】本発明の実施の形態に係るRISC計算機によりメモリからレジスタへの転送を行う場合の処理のフローチャート。
【図67】本発明の実施の形態に係るRISC計算機によりメモリからレジスタへの転送を行う場合の処理のフローチャート。
【図68】本発明の実施の形態に係るRISC計算機によりメモリからレジスタへの転送を行う場合の処理のフローチャート。
【図69】図62のコード列を並列実行する場合のコード列を示す図。
【図70】本発明の実施の形態に係るRISC計算機によるaddc命令の実行処理を説明するための図。
【図71】本発明の実施の形態に係るRISC計算機によるsubc命令の実行処理を説明するための図。
【図72】本発明の実施の形態に係るRISC計算機によるaddc.p命令の実行処理を説明するための図。
【図73】本発明の実施の形態に係るRISC計算機によるsubc.p命令の実行処理を説明するための図。
【図74】本発明の実施の形態に係るRISC計算機のaddc命令を実現するために、演算回路に搭載される要部構成図。
【図75】本発明の実施の形態に係るRISC計算機のaddc.p命令を実現するために、演算回路に搭載される要部構成図。
【図76】従来のRISC計算機による加算及び減算の処理を説明するためのフローチャート。
【図77】従来のRISC計算機による加算及び減算の処理を説明するためのフローチャート。
【図78】従来のRISC計算機による加算及び減算の処理を説明するためのフローチャート。
【図79】図76〜図78の従来のRISC計算機による加算及び減算の処理をC言語により表記した図。
【図80】図76〜図78の従来のRISC計算機による加算及び減算の処理をC言語により表記した図。
【図81】図76〜図78の従来のRISC計算機による加算及び減算の処理をC言語により表記した図。
【図82】複数ワードからなるパック10進数データの加減算を行う本発明の実施の形態に係るRISC計算機の構成図。
【図83】本発明の実施の形態に係るRISC計算機により加減算される複数ワードからなるパック10進数データの例を示す図。
【図84】本発明の実施の形態に係るRISC計算機による複数ワードからなるパック10進数データの加減算処理を説明するためのフローチャート。
【図85】本発明の実施の形態に係るRISC計算機により複数ワードからなるパック10進数データの加減算を行う場合の処理の命令コード列を示す図。
【図86】図85のコード列を並列実行する場合のコード列を示す図。
【図87】従来例のRISC計算機によるパック10進数データの乗算処理を示すフローチャート。
【図88】従来例のRISC計算機によるパック10進数データの乗算処理を示すフローチャート。
【図89】従来例のRISC計算機によるパック10進数データの乗算処理を示すフローチャート。
【図90】従来例のRISC計算機によるパック10進数データの乗算処理を示すフローチャート。
【図91】従来例のRISC計算機によるパック10進数データの乗算処理を示すフローチャート。
【図92】従来例のRISC計算機によるパック10進数データの乗算処理を示すC言語による表記を示す図。
【図93】従来例のRISC計算機によるパック10進数データの乗算処理を示すC言語による表記を示す図。
【図94】mul.p命令の処理を説明するための図。
【図95】mul.p命令を実行するために本発明の実施の形態に係るRISC計算機に搭載される乗算手段の構成図。
【図96】パック10進数データの乗算を行う本発明の実施の形態に係るRISC計算機の構成図。
【図97】本発明の実施の形態に係るRISC計算機によるパック10進数データの乗算処理を説明するための図。
【図98】本発明の実施の形態に係るRISC計算機によるパック10進数データの乗算処理を説明するための図。
【図99】本発明の実施の形態に係るRISC計算機によるパック10進数データの乗算処理を説明するための図。
【図100】本発明の実施の形態に係るRISC計算機によるパック10進数データの乗算処理を説明するための図。
【図101】本発明の実施の形態に係るRISC計算機によるパック10進数データの乗算処理を説明するための図。
【図102】本発明の実施の形態に係るRISC計算機によるパック10進数データの乗算処理を説明するための図。
【図103】本発明の実施の形態に係るRISC計算機によるパック10進数データの乗算処理を説明するための図。
【図104】本発明の実施の形態に係るRISC計算機によるパック10進数データの乗算処理を説明するための図。
【図105】本発明の実施の形態に係るRISC計算機により、乗算処理をVLIW方式により並列実行させる場合の命令コード列の図。
【図106】本発明の実施の形態に係るRISC計算機により、複数桁同志のパック10進数データの乗算処理を説明するためのフローチャート。
【符号の説明】
1、22 レジスタファイル 2、2−1〜2−4 演算回路
3、23 入力ポート 4、24 出力ポート
5 主メモリ 6 プログラムカウンタ
7、21、21A デコ−ダ 20−1、20−3 演算回路
31 最上位有効ワード検出手段 32 ワード位置検出手段
33 ビット位置検出手段 34 有効ビット長取得手段
41 ワード単位処理手段 42 2次処理手段
43 最先ビット値検出手段 44 有効桁取得手段
45 ワード単位処理手段 46 2次処理手段
47 最先セットビット値検出手段 48 有効バイト長取得手段
50 ワード単位処理手段 51 2次処理手段
52 最先ビットセット値検出手段 53 オーバーフロー検出手段
57 不正パック10進数検出手段 58 データ混合手段
59 不正データ抽出手段 61 ワード境界・境界差検出手段
62 ワード単位読出手段 63 シフト手段
65 一致不一致検出手段 66 加算手段
67 減算手段 81 前処理手段
82 乗算手段 83 桁分離手段
84 桁補正手段 85 加算手段

Claims (40)

  1. 1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを算出する算出手段を備える演算回路を具備し、
    前記算出手段は、
    1ワードデータを同一ビット数からなる複数のブロックに分けた場合の各ブロック夫々にセットされたビットがあるか否かの検出を行う検出手段と、
    この検出手段による検出結果に基づき、前記複数のブロック中の1ブロックの全ビットより少ない所定ビットのデータを選択する選択手段と、
    この選択手段により選択された結果に基づき、1ワードデータ中の、最上位側から最初にセットされているビットが、最下位ビットから数えて何ビット目であるかの数値を作成する数値作成手段と、
    を具備することを特徴とするRISC計算機。
  2. 複数ワードのデータについて、ワード単位に当該ワード内が全て0であるか否かに基づき、複数ワードの内のセットされたビットが存在する最上位有効ワードを検出する最上位有効ワード検出手段と、
    この最上位有効ワード検出手段により検出された結果に対して請求項1に記載の演算回路を用いて、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを算出し、更に、この結果を用いて当該ワードの位置を示す数値を得るワード位置検出手段と、
    前記有効最上位ワード検出手段により検出された最上位有効ワードに係る1ワードデータに対して請求項1に記載の演算回路を用いて、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを示す数値を得るビット位置検出手段と、
    このビット位置検出手段及びワード位置検出手段の検出結果に基づき、複数ワードからなるデータの有効ビット長データを得る有効ビット長取得手段とを、
    備えることを特徴とするRISC計算機。
  3. 演算回路を複数有し、各命令を並列実行するVLIW方式を採用することを特徴とする請求項2記載のRISC計算機。
  4. 第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを4ビット単位に比較して、第2オペランドの4ビットデータが第1オペランドの4ビットデータより大きいか否か検出し、各4ビット単位の比較結果である各1ビットをディスティネーションオペランドの下位側に格納する比較手段を備える演算回路を具備するRISC計算機。
  5. 第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを4ビット単位に比較して、第2オペランドの4ビットデータが第1オペランドの4ビットデータと等しいか否か検出し、各4ビット単位の比較結果である各1ビットをディスティネーションオペランドの下位側に格納する比較手段を備える演算回路を具備するRISC計算機。
  6. 複数ワードのパック10進数データについて、請求項4に記載の、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを4ビット単位に比較して、第2オペランドの4ビットデータが第1オペランドの4ビットデータより大きいか否か検出し、各4ビット単位の比較結果をディスティネーションオペランドの下位側に格納するcmplt.p命令を実行する演算回路を用いてワード単位に処理を行うワード単位処理手段と、
    このワード単位処理手段による処理結果を前記複数ワードのワードデータ順に並べる処理を行う2次処理手段と、
    この2次処理手段による処理結果について、請求項1に記載の演算回路を用いて、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを示す数値を得る最先セッ トビット値検出手段と、
    この最先セットビット値検出手段の検出結果に基づきパック10進数の有効桁数を得る有効桁数取得手段と、
    を具備することを特徴とするRISC計算機。
  7. 演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、cmplt.p命令を1サイクルに1命令実行することを特徴とする請求項6に記載のRISC計算機。
  8. 演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、cmplt.p命令を1サイクルに複数命令実行することを特徴とする請求項6記載のRISC計算機。
  9. 第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、第2オペランドの1バイトデータが第1オペランドの1バイトデータより大きいか否か検出し、各1バイト単位の比較結果である各1ビットをディスティネーションオペランドの下位側に格納する比較手段を備える演算回路を具備するRISC計算機。
  10. 第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、第2オペランドの1バイトデータが第1オペランドの1バイトデータと等しいか否か検出し、各1バイト単位の比較結果である各1ビットをディスティネーションオペランドの下位側に格納する比較手段を備える演算回路を具備するRISC計算機。
  11. 複数ワードのデータについて、請求項9に記載の、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、第2オペランドの1バイトデータが第1オペランドの1バイトデータより大きいか否か検出し、各1バイト単位の比較結果をディスティネーションオペランドの下位側に格納するcmplt.b命令を実行する演算回路を用いてワード単位に処理を行うワード単位処理手段と、
    このワード単位処理手段による処理結果を前記複数ワードのワードデータ順に並べる処理を行う2次処理手段と、
    この2次処理手段による処理結果について、請求項1に記載の演算回路を用いて、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを示す数値を得る最先セットビット値検出手段と、
    この最先セットビット値検出手段の検出結果に基づき有効バイト長を得る有効バイト長取得手段と、
    を具備することを特徴とするRISC計算機。
  12. 演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、cmplt.b命令を1サイクルに1命令実行することを特徴とする請求項11に記載のRISC計算機。
  13. 演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、cmplt.b命令を1サイクルに複数命令実行することを特徴とする請求項11に記載のRISC計算機。
  14. ゾーン10進数の複数ワードからなる演算結果データについて、請求項10に記載の、第1オペランドの1ワードのデータと第2オペランドの1ワードのデータを1バイト単位に比較して、前記第2オペランドの1バイトデータが第1オペランドの1バイトデータと等しいか否か検出し、各1バイト単位の比較結果をディスティネーションオペランドの下位側に格納するcmpeq.b命令を実行する演算回路を用いてワード単位に処理を行うワード単位処理手段と、
    このワード単位処理手段による処理結果を前記複数ワードのワードデータ順に並べ、この並べたデータに対して使用されているバイトと使用されていないバイトとを識別する処理を行う2次処理手段と、
    この2次処理手段による処理結果について、請求項1に記載の演算回路を用いて、1ワードデータ中の最上位ビットから最下位ビット方向に検索した場合に、最初にセットされているビットが、最下位ビットから数えて何ビット目であるかを示す数値を得る最先セットビット値検出手段と、
    この最先セットビット値検出手段の検出結果と与えられる正規のバイト数に基づきゾーン10進数のデータがオーバーフローか否か検出するオーバーフロー検出手段と、
    を具備することを特徴とするRISC計算機。
  15. 演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、cmpeq.b命令を1サイクルに1命令実行することを特徴とする請求項14に記載のRISC計算機。
  16. 演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、cmpeq.b命令を1サイクルに複数命令実行することを特徴とする請求項14に記載のRISC計算機。
  17. 命令に対する演算を実行する演算回路を複数有し、各命令を並列実行するVLIW方式を採用したRISC計算機において、
    前記複数の演算回路の所要の演算回路が、第3ソースオペランドを取り込む経路と、第2ディスティネーションオペランド出力用の経路とを備え、3つのソースオペランドに対して演算を行い、その結果を2つのディスティネーションオペランドへ出力する5オペランド型命令を実行する演算回路であり、
    前記複数の演算回路の残りの演算回路が、第2ソースオペランドを取り込む経路と、第1ディスティネーションオペランド出力用の経路とを備え、2つのソースオペランドに対して演算を行い、その結果を1つのディスティネーションオペランドへ出力する3オペランド型命令を実行する演算回路であることを特徴とするRISC計算機。
  18. 5オペランド型命令を実行する演算回路の第3ソースオペランドを取り込む経路へソースオペランドを供給するか、3オペランド型命令を実行する演算回路の第1ソースオペランドを取り込む経路へソースオペランドを供給するか切り換えるソースオペランド切換スイッチと、
    前記5オペランド型命令を実行する演算回路の第2ディスティネーションオペランド出力用の経路からのディスティネーションオペランドか、前記3オペランド型命令を実行する演算回路の第1ディスティネーションオペランド出力用の経路からのディスティネーションオペランドかを選択するためのディスティネーションオペランド選択スイッチと、
    上記2つのスイッチを命令に基づき切り換えるデコ−ダとを具備することを特徴とする請求項17に記載のRISC計算機。
  19. 4つの演算回路が備えられており、第1、第3の演算回路が、5オペランド型命令を実行する演算回路で構成され、第2、第4の演算回路が、3オペランド型命令を実行する演算回路で構成されていることを特徴とする請求項17または18に記載のRISC計算機。
  20. RISC命令に拡張用コードがセットされている場合に、デコ−ダは、5オペランド型命令を実行する演算回路へ第3ソースオペランドを供給し、出力される第2ディスティネーションオペランドを選択するように、ソースオペランド切換スイッチとディスティネーションオペランド選択スイッチとの切換制御を行うことを特徴とする請求項17乃至請求項19のいずれか1項に記載のRISC計算機。
  21. 第1オペランドの1ワード長のデータと第2オペランドの1ワード長のデータとを夫々4ビット幅のブロックに区分し、第1オペランドの各ブロックと第2オペランドの各ブロックとを先頭から順に組み合わせるシャッフル手段と、
    このシャッフル手段により組み合わされたブロック対における2ブロックの前後配置関係を、第3オペランドの1ワード長のデータに基づき制御する対交換手段と、
    を具備する演算回路を備えることを特徴とするRISC計算機。
  22. 第1オペランドの1ワード長のデータと第2オペランドの1ワード長のデータとを夫々4ビット幅のブロックに区分し、第1オペランドと第2オペランドのブロ ックを一列に並べた状態で1ブロックおきに組み合わせ、奇数ブロックの組み合わせの並びの後に偶数ブロックの組み合わせの並びを配置する逆シャッフル手段と、
    この逆シャッフル手段により組み合わされたブロック対における2ブロックの前後配置関係を、第3オペランドの1ワード長のデータに基づき制御する対交換手段と、
    を具備する演算回路を備えることを特徴とするRISC計算機。
  23. 複数ワードのパック10進数データについて、請求項4に記載の、1ワードのデータを4ビット単位に不正閾値データと比較して、各4ビット単位の比較結果をディスティネーションオペランドの下位側に格納するcmplt.p命令を実行する演算回路を用いてワード単位に処理を行う不正パック10進数検出手段と、
    前記複数ワードのパック10進数データと0とを第1オペランド及び第2オペランドとし、前記不正パック10進数検出手段の結果を第3オペランドとして、請求項21に記載のshx命令を実行する演算回路を用いてshx命令による結果を得るデータ混合手段と、
    このデータ混合手段による混合結果を第1オペランド及び第2オペランドとし、0を第3オペランドとして、請求項22に記載のishx命令を実行する演算回路を用いて不正データを抽出する不正データ抽出手段と、
    を具備しパック10進数の不正データを除去することを特徴とするRISC計算機。
  24. 1ワード単位に、不正パック10進数検出手段、データ混合手段、不正データ抽出手段を用いて処理を行い、複数ワード分の処理を繰り返すことを特徴とする請求項23に記載のRISC計算機。
  25. 演算回路を複数有し、各命令を並列に実行するVLIW方式を採用すると共に、cmplt.p命令を1サイクルに複数命令実行することを特徴とする請求項23に記載のRISC計算機。
  26. 2つのジェネラルレジスタで指定された倍語データを1本に連なった如くの2つのレジスタに配置した状態で、ジェネラルレジスタまたは即値で指定された数だけ左に論理シフトし、この結果前記連なった如くの2つのレジスタにおいて空いた下位ビットに0を挿入する倍語・左論理シフト手段を備える演算回路を具備することを特徴とするRISC計算機。
  27. 2つのジェネラルレジスタで指定された倍語データを1本に連なった如くの2つのレジスタに配置した状態で、ジェネラルレジスタまたは即値で指定された数だけ右に論理シフトし、この結果前記連なった如くの2つのレジスタにおいて空いた上位ビットに0を挿入する倍語・右論理シフト手段を備える演算回路を具備することを特徴とするRISC計算機。
  28. 2つのジェネラルレジスタで指定された倍語データを1本に連なった如くの2つのレジスタに配置した状態で、ジェネラルレジスタまたは即値で指定された数だけ右に算術シフトし、この結果前記連なった如くの2つのレジスタにおいて空いた上位ビットに符号ビットを挿入する倍語・右算術シフト手段を備える演算回路を具備することを特徴とするRISC計算機。
  29. メモリに記憶されているパック10進数データをレジスタへ転送するRISC計算機であって、
    上記パック10進数データが記憶されているメモリ上の最上位と最下位のワード境界を検出すると共に、ワード境界と当該パック10進数データの終端との差を検出するワード境界・境界差検出手段と、
    このワード境界・境界差検出手段により検出されたワード境界を単位として、前記パック10進数が記憶されている範囲のワードをレジスタに読み出すワード単位読出手段と、
    上記レジスタに読み出されたデータを、上記ワード境界・境界差検出手段により検出された差のデータに応じて、請求項26に記載の倍語・左論理シフト手段を備え、sll.l命令を実行する演算回路によりシフトするシフト手段と、
    を具備することを特徴とするRISC計算機。
  30. ワード単位読出手段による読み出しの後に、シフト手段によるシフトを 行う動作を繰り返して、所要のパック10進数をレジスタに転送することを特徴とする請求項29に記載のRISC計算機。
  31. 演算回路を複数有し、各命令を並列実行するVLIW方式を採用すると共に、ワード単位読出手段による読み出しと、sll.l命令を1サイクルにて並列実行することを特徴とする請求項29に記載のRISC計算機。
  32. 命令に対する演算を実行する演算回路を複数有し、各命令を並列実行するVLIW方式を採用したRISC計算機において、
    前記複数の演算回路の所要の演算回路が、第3ソースオペランドを取り込む経路と、第2ディスティネーションオペランド出力用の経路とを備え、3つのソースオペランドに対して演算を行い、その結果を2つのディスティネーションオペランドへ出力する5オペランド型命令を実行する演算回路であり、
    前記複数の演算回路の残りの演算回路が、第2ソースオペランドを取り込む経路と、第1ディスティネーションオペランド出力用の経路とを備え、2つのソースオペランドに対して演算を行い、その結果を1つのディスティネーションオペランドへ出力する3オペランド型命令を実行する演算回路であり、
    前記5オペランド型命令を実行する演算回路が、
    2つのジェネラルレジスタで指定された固定小数点1ワードデータを、第3のジェネラルレジスタで指定されたキャリーと共に加算し、加算結果を第1のディスティネーションレジスタに格納し、加算結果のキャリーを第2のディスティネーションレジスタに格納する加算手段を備えることを特徴とするRISC計算機。
  33. 命令に対する演算を実行する演算回路を複数有し、各命令を並列実行するVLIW方式を採用したRISC計算機において、
    前記複数の演算回路の所要の演算回路が、第3ソースオペランドを取り込む経路と、第2ディスティネーションオペランド出力用の経路とを備え、3つのソースオペランドに対して演算を行い、その結果を2つのディスティネーションオペランドへ出力する5オペランド型命令を実行する演算回路であり、
    前記複数の演算回路の残りの演算回路が、第2ソースオペランドを取り込む経路と、第1ディスティネーションオペランド出力用の経路とを備え、2つのソースオペランドに対して演算を行い、その結果を1つのディスティネーションオペランドへ出力する3オペランド型命令を実行する演算回路であり、
    前記5オペランド型命令を実行する演算回路が、
    第1のジェネラルレジスタで指定された固定小数点1ワードデータから第2のジェネラルレジスタで指定された固定小数点1ワードデータを減算すると共に、第3のジェネラルレジスタで指定されたキャリーの反転値を減算し、減算結果を第1のディスティネーションレジスタに格納し、減算結果のキャリーの反転値を第2のディスティネーションレジスタに格納する減算手段を備えることを特徴とするRISC計算機。
  34. 命令に対する演算を実行する演算回路を複数有し、各命令を並列実行するVLIW方式を採用したRISC計算機において、
    前記複数の演算回路の所要の演算回路が、第3ソースオペランドを取り込む経路と、第2ディスティネーションオペランド出力用の経路とを備え、3つのソースオペランドに対して演算を行い、その結果を2つのディスティネーションオペランドへ出力する5オペランド型命令を実行する演算回路であり、
    前記複数の演算回路の残りの演算回路が、第2ソースオペランドを取り込む経路と、第1ディスティネーションオペランド出力用の経路とを備え、2つのソースオペランドに対して演算を行い、その結果を1つのディスティネーションオペランドへ出力する3オペランド型命令を実行する演算回路であり、
    前記5オペランド型命令を実行する演算回路が、
    2つのジェネラルレジスタで指定されたパック10進数1ワードデータを、第3のジェネラルレジスタで指定されたキャリーと共に加算し、加算結果を第1のディスティネーションレジスタに格納し、加算結果のキャリーを第2のディスティネーションレジスタに格 納する加算手段を備えることを特徴とするRISC計算機。
  35. 命令に対する演算を実行する演算回路を複数有し、各命令を並列実行するVLIW方式を採用したRISC計算機において、
    前記複数の演算回路の所要の演算回路が、第3ソースオペランドを取り込む経路と、第2ディスティネーションオペランド出力用の経路とを備え、3つのソースオペランドに対して演算を行い、その結果を2つのディスティネーションオペランドへ出力する5オペランド型命令を実行する演算回路であり、
    前記複数の演算回路の残りの演算回路が、第2ソースオペランドを取り込む経路と、第1ディスティネーションオペランド出力用の経路とを備え、2つのソースオペランドに対して演算を行い、その結果を1つのディスティネーションオペランドへ出力する3オペランド型命令を実行する演算回路であり、
    前記5オペランド型命令を実行する演算回路が、
    第1のジェネラルレジスタで指定されたパック10進数1ワードデータから第2のジェネラルレジスタで指定されたパック10進数1ワードデータを減算すると共に、第3のジェネラルレジスタで指定されたキャリーの反転値を減算し、減算結果が負数の場合には10の補数として、減算結果を第1のディスティネーションレジスタに格納し、減算結果のキャリーの反転値を第2のディスティネーションレジスタに格納する減算手段を備えることを特徴とするRISC計算機。
  36. 複数ワードのパック10進数からなる第1のデータと複数ワードのパック10進数からなる第2のデータのそれぞれの符号の一致不一致を検出する一致不一致手段と、
    前記符号が一致していることが検出された場合に、addc.p命令を実行する請求項34に記載の演算回路を用いて前記第1のデータと第2のデータとをワード単位に加算する加算手段と、
    前記符号が不一致であることが検出された場合に、subc.p命令を実行する請求項35に記載の演算回路を用いて前記第1のデータと第2のデータとをワード単位に減算する減算手段とを具備し、
    加減算の各段階で生じたキャリーを次段階にて用いて複数ワードのパック10進数の加算を行うことを特徴とするRISC計算機。
  37. 複数ワードのパック10進数からなる第1のデータと複数ワードのパック10進数からなる第2のデータのそれぞれの符号の一致不一致を検出する一致不一致手段と、
    前記符号が不一致であることが検出された場合に、addc.p命令を実行する請求項34に記載の演算回路を用いて前記第1のデータと第2のデータとをワード単位に加算する加算手段と、
    前記符号が一致していることが検出された場合に、subc.p命令を実行する請求項35に記載の演算回路を用いて前記第1のデータと第2のデータとをワード単位に減算する減算手段とを具備し、
    加減算の各段階で生じたキャリーを次段階にて用いて複数ワードのパック10進数の減算を行うことを特徴とするRISC計算機。
  38. 第1の1ワードデータの最下位4ビットから4ビット間隔をおいて、パック10進数を取り出し、この複数のパック10進数データと第2の1ワードデータの最下位4ビットのパック10進数データとを掛け合わせて、2桁のパック10進数データを上記第1の1ワードデータに存在するパック10進数データと同個数得て、ディスティネーションオペランドに出力する乗算手段を備える演算回路を具備することを特徴とするRISC計算機。
  39. 1ワードのパック10進数からなる被乗数データと、パック10進数の0が1ワード集合されてなるデータとを、shx命令を実行する請求項21に記載の演算回路を用いて完全シャッフル処理する前処理手段と、
    この前処理手段により完全シャッフル処理された結果の2桁毎に対し、mul.p命令 を実行する請求項38に記載の演算回路を用いて乗数を構成する1桁のパック10進数データを掛け合わせて2桁単位の結果を得る乗算手段と、
    上記乗算手段により得られた結果に対し、ishx命令を実行する請求項22に記載の演算回路を用いて逆完全シャッフル処理して上位桁と下位桁に分離する桁分離手段と、
    上記桁分離手段により分離された上位桁の結果に対し、sll.l命令を実行する請求項26に記載の演算回路を用いて4ビットの左シフトを生じさせて、桁上がりによる桁位置との一致を図る桁位置補正手段と、
    この桁位置補正手段により補正された結果と、上記桁分離手段により分離された下位桁の結果とをaddc.p命令を実行する請求項34に記載の演算回路を用いて加算すると共に、加算の結果生じたキャリーを前記桁位置補正手段により上位ワードへシフトされた数値に加算して、パック10進数データの乗算結果を得る加算手段と、
    を具備することを特徴とするRISC計算機。
  40. 複数ワードのパック10進数の被乗数と複数ワードのパック10進数の乗数との乗算を行う場合には、乗数の各桁のデータ毎に、被乗数の各ワードに対して、請求項39に記載の各手段による演算を繰り返して結果を得て、更に、乗数の桁数を進めて同様の演算を繰り返して行い、
    それぞれの結果に必要なシフトを生じさせて最終結果とすることを特徴とするRISC計算機。
JP03754097A 1997-02-21 1997-02-21 Risc計算機 Expired - Fee Related JP3735438B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP03754097A JP3735438B2 (ja) 1997-02-21 1997-02-21 Risc計算機

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP03754097A JP3735438B2 (ja) 1997-02-21 1997-02-21 Risc計算機

Publications (2)

Publication Number Publication Date
JPH10240528A JPH10240528A (ja) 1998-09-11
JP3735438B2 true JP3735438B2 (ja) 2006-01-18

Family

ID=12500364

Family Applications (1)

Application Number Title Priority Date Filing Date
JP03754097A Expired - Fee Related JP3735438B2 (ja) 1997-02-21 1997-02-21 Risc計算機

Country Status (1)

Country Link
JP (1) JP3735438B2 (ja)

Families Citing this family (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7853778B2 (en) * 2001-12-20 2010-12-14 Intel Corporation Load/move and duplicate instructions for a processor
US20140281418A1 (en) * 2013-03-14 2014-09-18 Shihjong J. Kuo Multiple Data Element-To-Multiple Data Element Comparison Processors, Methods, Systems, and Instructions
US9891913B2 (en) * 2014-12-23 2018-02-13 Intel Corporation Method and apparatus for performing conflict detection using vector comparison operations

Also Published As

Publication number Publication date
JPH10240528A (ja) 1998-09-11

Similar Documents

Publication Publication Date Title
US6078941A (en) Computational structure having multiple stages wherein each stage includes a pair of adders and a multiplexing circuit capable of operating in parallel
Warren Hacker's delight
KR102413832B1 (ko) 벡터 곱셈 덧셈 명령
US8473719B2 (en) Data packet arithmetic logic devices and methods
EP0378830A2 (en) Method and apparatus for handling multiple condition codes as for a parallel pipeline computer
CN107077417A (zh) 有效性配准
KR100859044B1 (ko) 복수 레지스터 지정이 가능한 simd 연산방식
KR100346515B1 (ko) 수퍼파이프라인된수퍼스칼라프로세서를위한임시파이프라인레지스터파일
US20030105945A1 (en) Methods and apparatus for a bit rake instruction
US20080263332A1 (en) Data Processing Apparatus and Method for Accelerating Execution Subgraphs
US9965275B2 (en) Element size increasing instruction
CN114930311B (zh) Fpga重复单元之间的级联通信
JPS6114532B2 (ja)
JP3735438B2 (ja) Risc計算機
JPH1195982A (ja) 演算処理回路及び演算処理方法並びに演算処理システム
KR20200094771A (ko) 벡터 자리올림이 있는 가산 명령
JP2003241960A (ja) プロセッサ、該プロセッサにおける演算命令処理方法及び演算制御方法
US6643673B1 (en) Method and apparatus for arithmetic shifting
JP2019519864A (ja) ベクトルレジスタのアクセス
JP2793357B2 (ja) 並列演算装置
US11789701B2 (en) Controlling carry-save adders in multiplication
JPH1083302A (ja) Vliwプロセッサ
EP0780759A1 (en) Elimination of math overflow flag generation delay in an alu
JP2004252556A (ja) 情報処理装置
Clementi et al. Pipelined addition, accumulation and multiplication of binary numbers on cellular automata

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20040220

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20050712

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20050719

A521 Written amendment

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20050920

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

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20051018

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20051024

LAPS Cancellation because of no payment of annual fees