JPH0820952B2 - パイプライン処理機構を持つデータ処理装置 - Google Patents

パイプライン処理機構を持つデータ処理装置

Info

Publication number
JPH0820952B2
JPH0820952B2 JP63049093A JP4909388A JPH0820952B2 JP H0820952 B2 JPH0820952 B2 JP H0820952B2 JP 63049093 A JP63049093 A JP 63049093A JP 4909388 A JP4909388 A JP 4909388A JP H0820952 B2 JPH0820952 B2 JP H0820952B2
Authority
JP
Japan
Prior art keywords
instruction
stage
value
subroutine
return
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 - Lifetime
Application number
JP63049093A
Other languages
English (en)
Other versions
JPH01222332A (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.)
Mitsubishi Electric Corp
Original Assignee
Mitsubishi Electric 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
Priority to JP63049093A priority Critical patent/JPH0820952B2/ja
Application filed by Mitsubishi Electric Corp filed Critical Mitsubishi Electric Corp
Priority to US07/317,253 priority patent/US5193205A/en
Publication of JPH01222332A publication Critical patent/JPH01222332A/ja
Priority to US07/953,414 priority patent/US5355459A/en
Priority to US08/181,353 priority patent/US5526498A/en
Publication of JPH0820952B2 publication Critical patent/JPH0820952B2/ja
Priority to US08/657,710 priority patent/US5701449A/en
Priority to US08/996,787 priority patent/US5978904A/en
Priority to US09/359,843 priority patent/US6151673A/en
Priority to US09/602,830 priority patent/US6408385B1/en
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Landscapes

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

Description

【発明の詳細な説明】 〔産業上の利用分野〕 この発明は、高度なパイプライン処理機構により高い
処理能力を実現したデータ処理装置に関するものであ
り、特にサブルーチンリターン命令に関しても、パイプ
ライン処理の初期の段階で戻り先アドレスへの先行分岐
処理が可能なデータ処理装置に関するものである。
〔従来の技術〕
第7図は従来のデータ処理装置の典型的なパイプライ
ンステージを示す図であり、図において、(1)は命令
フェッチステージ、(2)は命令デコードステージ、
(3)はアドレス計算ステージ、(4)はオペランドフ
ェッチステージ、(5)は実行ステージ、(8)はオペ
ランドライトステージである。
次に動作について説明する。第7図に示したデータ処
理装置は、バスが空いている時間を利用して命令データ
の取り込みを行う命令フェッチステージ(1)、命令デ
ータの解析を行う命令デコードステージ(2)、オペラ
ンド等のアドレス計算を行うアドレス計算ステージ
(3)、オペランドデータのフェッチを行うオペランド
フェッチステージ(4)、データの処理を行う実行ステ
ージ(5)、オペランドデータの書き込みを行うオペラ
ンドライトステージ(8)の6段のパイプラインステー
ジで構成されており、各ステージは異なる命令を同時に
処理することが可能である。ただしオペランドやメモリ
アクセスに関してコンフリクトが起こったような場合に
は優先度の低いステージがコンフリクトが解消されるま
で処理を一時停止する。
以上のように、パイプライン化されたデータ処理装置
では、データの処理の流れに従って処理を複数のステー
ジに分割し、各ステージを同時に動作させることによ
り、1命令に必要な平均処理時間を短縮させて全体とし
ての性能を向上させている。
ところが、このようにパイプライン化されたデータ処
理装置において、分岐命令等の命令の流れを乱す命令が
実行ステージ(5)で実行された場合には、それより前
のステージで行われていた処理がすべてキャンセルさ
れ、次に実行される命令は命令のフェッチから行わなけ
ればない。このように、処理の流れを乱す命令が実行さ
れると、パイプライン処理のオーバーヘッドが大きくな
り、データ処理装置の実行速度が上がらない。データ処
理装置の性能向上のため、無条件分岐命令、条件分岐命
令等の命令実行に関するオーバーヘッド削減について様
々な工夫がなされてきた。例えば、分岐命令のアドレス
と分岐先のアドレスを組にして記憶しておくブランチタ
ーゲットバッファというものを用いて、命令フェッチの
段階で命令の流れを予測し、処理を行っている。(J.K.
F.Lee and A.J.Smith,“Branch Prediction Strategies
and Branch Target Buffer Design,“IEEE COMPUTER V
ol.17,No.1,January 1984,pp.6−22.参照)以上のよう
に、パイプライン処理の初期の段階で処理の流れを予測
し、次に実行されると予測される命令をパイプラインに
流す(以下先行分岐処理と呼ぶ)ことにより分岐命令実
行時のオーバーヘッド削減が計られている。ところが、
サブルーチンからのリターン命令に関してはサブルーチ
ンからのリターンアドレスが対応するサブルーチンコー
ル命令のアドレスに依存するため、処理の流れを予測す
ることが困難であった。
〔発明が解決しようとする課題〕
従来のデータ処理装置は、以上で述べたように、サブ
ルーチンからのリターン命令に対してサブルーチンから
のリターンアドレスが対応するサブルーチンコール命令
のアドレスに依存するため、処理の流れを予測する有効
な手段がなかった。
この発明は上記のような問題点を解消するためになさ
れたもので、サブルーチンリターン命令に関しても、パ
イプライン処理の初期の段階で戻り先アドレスへの先行
分岐処理が可能なデータ処理装置を得ることを目的とす
る。
〔課題を解決するための手段〕
この発明に係るデータ処理装置は、サブルーチンコー
ル命令のリターンアドレスのみを格納するプログラムカ
ウンタ(PC)専用のスタックメモリ(以下PCスタックと
呼ぶ)を備えたものである。
〔作用〕 この発明におけるデータ処理装置は、実行ステージで
サブルーチンコール命令実行時にサブルーチンからのリ
ターンアドレスがPCスタックにプッシュされ、命令デコ
ードステージでサブルーチンリターン命令デコード時に
PCスタックからポップされたアドレスに先行分岐処理を
行う。
〔発明の実施例〕
(1)パイプライン機構 本発明のデータ処理装置のパイプライン処理は第1図
に示す構成となる。命令のプリフェッチを行う命令フェ
ッチステージ(IFステージ(1)、1段目の命令のデコ
ードを行うデコードステージ(Dステージ(2)、2段
目の命令のデコードとオペランドのアドレス計算を行う
オペランドアドレス計算ステージ(Aステージ
(3))、マイクロROMのアクセス(特にRステージ
(6)と呼ぶ)とオペランドのプリフェッチ(特にOFス
テージ(7)と呼ぶ)を行うオペランドフェッチステー
ジ(Fステージ(4))、命令の実行を行う実行ステー
ジ(Eステージ(5))の5段構成をパイプライン処理
の基本とする。Eステージ(5)では1段のストアバッ
ファがあるほか、高機能命令の一部は命令実行自体をパ
イプライン化するため、実際には5段以上のパイプライ
ン処理効果がある。
各ステージは他のステージとは独立に動作し、理論上
は5つのステージが完全に独立動作する。各ステージは
1回の処理を最小2クロックで行うことができる。従っ
て理想的には2クロックごとに次々とパイプライン処理
が進行する。
本発明のデータ処理装置にはメモリ−メモリ間演算
や、メモリ間接アドレッシングなど基本パイプライン処
理1回だけでは処理が行えない命令があるが、本発明の
データ処理装置はこれらの処理に対してもなるべく均衡
したパイプライン処理が行えるように設計されている。
複数のメモリオペランドをもつ命令に対してはメモリオ
ペランドの数をもとに、デコード段階で複数のパイプラ
イン処理単位(ステップコード)に分解してパイプライ
ン処理を行うのである。パイプライン処理単位の分解方
法に関しては特願昭61−236456で詳しく述べられてい
る。
IFステージ(1)からDステージ(2)に渡される情
報は命令コード(11)そのものである。Dステージ
(2)からAステージ(3)に渡される情報は命令で指
定された演算に関するもの(Dコード(12)と呼ぶ)
と、オペランドのアドレス計算に関係するもの(Aコー
ド(13)と呼ぶ)との2つある。Aステージ(3)から
Fステージ(4)に渡される情報はマイクロプログラム
ルーチンのエントリ番地やマイクロプログラムへのパラ
メータなどを含むRコード(14)と、オペランドのアド
レスとアクセス方法指示情報などを含むFコード(15)
との2つである。Fステージ(4)からEステージ
(5)に渡される情報は演算制御情報とリテラルなどを
含むEコード(16)と、オペランドやオペランドアドレ
スなどを含むSコード(17)との2つである。
(1.1)各パイプラインステージの処理 (1.1.1)命令フェッチステージ 命令フェッチステージ(IFステージ(1))は外部メ
モリから命令をフェッチし、命令キューに入力して、D
ステージ(2)に対して命令コード(11)を出力する。
命令キューの入力は整置された4バイト単位で行う。
メモリから命令をフェッチするときは整置された4バイ
トにつき最小2クロックを要する。ブランチバッファが
ヒットした時は整置された4バイトにつき1クロックで
フェッチ可能である。
命令キューの出力単位は2バイドごとに可変であり、
2クロックの間に最大6バイトまで出力できる。また分
岐の直後には命令キューをバイパスして命令基本部2バ
イトを直接命令デコーダに転送することもできる。
プリフェッチ先命令アドレスの管理もIFステージ
(1)で行う。次にフェッチすべき命令のアドレスは命
令キューに入力すべき命令のアドレスとして専用のカウ
ンタで計算される。分岐やジャンプが起きたときには、
新たな命令のアドレスが、PC演算部やデータ演算部より
転送されてくる。
(1.1.2)命令デコードステージ 命令デコードステージ(Dステージ(2))はIFステ
ージ(1)から入力された命令コード(11)をデコード
する。命令コードは16ビット(ハーフワード)単位とな
っている。デコードは2クロック単位に1度行ない、1
回のデコード処理で0〜3ハーフワードの命令コードを
消費する。このDステージ(2)で命令コードがパイプ
ライン処理単位であるステップコードに分解される。す
なわち、1命令が1つないし複数のステップコードに分
解されて、後段のパイプラインステージで処理されてい
くのである。Dステージ(2)ではステップコードとし
てAステージ(3)に対してアドレス計算情報であるA
コード(13)と、オペコードの中間デコード結果である
Dコード(12)とを出力する。
Dステージ(2)ではPC演算部の制御、分岐予測処
理、プリブランチ命令に対する先行分岐処理(プリブラ
ンチ)、命令キューからの命令コード出力制御等も行
う。プリブランチ処理とは、Eステージ(5)での分岐
処理に先立し、無条件分岐命令、条件分岐命令等の分岐
を予測し、PC演算部で飛び先の番地を計算し、IFステー
ジ(1)に飛び先の命令をフェッチさせ、飛び先の命令
をパイプラインに流すことである。プリブランチ命令と
は、プリブランチ処理を行う命令である。
(1.1.3)オペランドアドレス計算ステージ オペランドアドレス計算ステージ(Aステージ
(3))は処理が大きく2つに分かれる。1つはオペラ
ンドの後段デコードを行う処理で、もう1つはオペラン
ドのアドレスの計算を行う処理である。
オペコードの後段デコード処理はDコード(12)を入
力とし、レジスタやメモリの書き込み予約及びマイクロ
プログラムのエントリ番地とマイクロプログラムに対す
るパラメータなどを含むRコード(14)の出力を行う。
なお、レジスタやメモリの書き込み予約は、アドレス計
算で参照したレジスタやメモリの内容が、パイプライン
上を先行する命令で書き換えられ、誤ったアドレス計算
が行われるのを防ぐためのものである。レジスタやメモ
リの書き込み予約はデッドロックを避けるため、ステッ
プコードごとに行うのではなく命令ごとに行う。レジス
タやメモリの書き込み予約は特願昭62−144394で詳しく
述べられている。
オペランドアドレス計算処理はAコード(13)を入力
とし、Aコード(13)に従いオペランドアドレス計算部
で加算やメモリ間接参照を組み合わせてアドレス計算を
行い、その計算結果をFコード(15)として出力する。
この際、アドレス計算に伴うレジスタやメモリの読み出
し時にコンフリクトチェックを行い、先行命令がレジス
タやメモリに書き込み処理を終了していないためコンフ
リクトが指示されれば、先行命令がEステージ(15)で
書き込み処理を終了するまで待つ。
また、Aステージ(3)ではスタックからのポップ操
作、スタックへのプッシュ操作等によるスタックポイン
タ(SP)のコンフリクトを防ぐため、実行ステージ
(5)のSPに先行してAステージスタックポインタ(AS
P)を備えており、ポップ、プッシュ操作に伴うASPの更
新はこのステージで行われる。従って、通常のポップ。
プッシュ操作直後でもASPを参照することにより、SPの
コンフリクトでステップコードの処理を遅らせることな
く処理を進めることができる。SPの管理方法に関しては
特願昭62−145852で詳しく述べられている。
(1.1.4)マイクロROMアクセスステージ オペランドフェッチステージ(Fステージ(4))も
処理が大きく2つに分かれる。1つはマイクロROMのア
クセス処理であり、特にRステージ(6)と呼ぶ。他方
はオペランドプリフェッチ処理であり、特にOFステージ
(7)と呼ぶ。Rステージ(6)とOFステージ(7)は
必ずしも同時に動作するわけでなく、メモリアクセス権
が獲得できるかどうかなどに依存して、独立に動作す
る。
Rステージ(6)では、Rコード(14)に対して次の
Eステージ(5)での実行に使用する実行制御コードで
あるEコード(16)を作り出すためのマイクロROMアク
セスとマイクロ命令デコード処理が行われる。1つのR
コードに対する処理が2つ以上のマイクロプログラムス
テップに分解される場合、マイクロROMはEステージ
(5)で使用され、次のRコード(14)はマイクロROM
アクセス待ちになる。Rコード(14)に対するマイクロ
ROMアクセスが行われるのはその前のEステージ(5)
での最後のマイクロ命令実行の時である。本発明のデー
タ処理装置ではほとんどの基本命令は1マイクロプログ
ラムステップで行われるため実際にはRコード(14)に
対するマイクロROMアクセスが次々と行われることが多
い。
(1.1.5)オペランドフェッチステージ オペランドフェッチステージ(OFステージ(7))は
Fステージ(4)で行う上記の2つの処理のうちオペラ
ンドプリフェッチ処理を行う。
オペランドプリフェッチはFコード(15)を入力と
し、フェッチしたオペランドとそのアドレスをSコード
(17)として出力する。1つのFコード(15)ではワー
ド境界をまたいでもよいが4バイト以下のオペランドフ
ェッチを指定する。Fコード(15)にはオペランドのア
クセスを行うかどうかの指定も含まれており、Aステー
ジ(3)で計算したオペランドアドレス自体や即値をE
ステージ(5)に転送する場合にはオペランドプリフェ
ッチは行わず、Fコード(15)の内容をSコード(17)
として転送する。また、プリフェッチしようとするオペ
ランドとEステージ(5)が書き込み処理を行おうとす
るオペランドとが包含関係を満たすときには、オペラン
ドプリフェッチに関してメモリアクセスは行わず、Eス
テージ(5)が書き込もうとする値をバイパスする。
(1.1.6)実行ステージ 実行ステージ(Eステージ(5))はEコード(1
6)、Sコード(17)を入力として、各種演算器を用い
たデータの処理、データのリード、ライト等の処理を行
う。演算器としてはALU、バレルシウタ、プライオリテ
ィエンコーダやカウンタ、シフトレジスタなどがある。
Eステージ(5)はマイクロプログラムにより制御され
Rコード(16)に示されたマイクロプログラムのエント
リ番地からの一連のマイクロプログラムを実行すること
により命令を実行する。レジスタと主な演算器の間は3
バスで結合されており、1つのレジスタ間演算を指示す
る1マイクロ命令を2クロックサイクルで処理する。
このEステージ(5)が命令を実行するステージであ
り、Fステージ(4)以前のステージで行われた処理は
すべてEステージ(5)のための前処理である、Eステ
ージ(5)で分岐が起こると、IFステージ(1)〜Fス
テージ(4)までの処理はすべて無効化され、飛び先番
地が命令フェッチ部とPC計算部に出力される。
Eステージ(5)ではデータ演算部(56)にあるスト
アバッファを利用して、4バイト以内のオペランドスト
アと次のマイクロ命令実行をパイプライン処理すること
もできる。
Eステージ(5)ではAステージ(3)で行ったレジ
スタやメモリに対する書き込み予約をオペランドの書き
込みの後、解除する。
また条件分岐命令がEステージ(5)で分岐を起こし
たときはその条件分岐命令に対する分岐予測が誤ってい
たことを示しており分岐履歴の書換え処理を行う。
(1.2)プログラムカウンタの管理 本発明のデータ処理装置のパイプライン上に存在する
ステップコードはすべて別命令に対するものである可能
性があり、プログラムカウンタの値はステップコードご
とに管理する。すべてのステップコードはそのステップ
コードのもとになった命令のプログラムカウンタ値をも
つ。ステップコードに付属してパイプラインの各ステー
ジを流れるプログラムカウンタ値はステッププログラム
カウンタ(SPC)と呼ぶ。SPCはパイプラインステージを
次々と受け渡されていく。
(2)サブルーチンリターン命令の先行分岐処理 本発明のデータ処理装置は実行ステージでのサブルー
チンリターン命令の実行によるパイプラインの乱れを抑
えるために、サブルーチンリターン命令の実行に関して
は命令デコードステージ(Dステージ(2))で先行分
岐処理を行う。以下、詳細な動作を説明する。
第2図は、本発明のデータ処理装置のブロック図であ
り、サブルーチンコール命令、サブルーチンリターン命
令の処理を説明するために必要な部分だけが抜き出され
て説明されている。図において、(21)は命令キュー、
(22)は命令デコード部、(23)は外部とデータのやり
取りを行うデータ入出力回路、(24)は外部アドレスの
出力を行うアドレス出力回路、(25)は命令フェッチを
行うアドレスを出力するためのカウンタ(QINPC)、(2
6)は各ステップコード生成毎に命令デコード部(22)
で処理された命令長を格納するラッチ(IL)、(27)は
プリブランチのためのPCに対する変位を格納するための
ラッチ(PD)、(30)はPC演算部(54)での加算を行う
ためのPC加算器、(28)、(29)、(31)はそれぞれPC
加算器(30)の入出力ラッチ(PA,PB,P0)、(32)はス
テップコード処理毎のテンポラリなPCを格納するための
レジスタ(TPC)、(33)は現在デコード中の命令のPC
を格納するためのDステージPC(DPC)、(34)はアド
レス計算中のステップコードコードに対応するPCを格納
するためのAステージPC(APC)、(38)はアドレス計
算のための3値加算を行うアドレス加算器、(35)、
(36)、(37)、(39)はそれぞれアドレス加算器(3
8)の入出力ラッチ(AI,AD,AB,A0)、(40)はAステー
ジ(3)でインクリメントやデクリメントを行いSPの管
理を行うAステージスタックポインタ(ASP)、(41)
はFコード(15)としてのアドレスを格納するためのF
コードアドレスレジスタ(FA)、(42)はSコード(1
7)としてのアドレスを格納するためのSコードアドレ
スレジスタ、(43)は命令フェッチを行うアドレスを一
時的に記憶するためのCAアドレスレジスタ(CAA)、(4
4)はEステージ(5)で管理しているアドレスレジス
タ(AA)、(45)はEステージ(5)での分岐先アドレ
スを格納するためのEステージブランチアドレスレジス
タ(EB)、(46)はサブルーチンコール時の戻り先アド
レスのみを格納しておくPCスタック,(47)はスタック
ポインタ、フレームポインタ、ワーキングレジスタ等を
含むレジスタファイル、(56)はS2バス(102)から値
を入力してD0バス(103)に値を出力するDMラッチ、(5
0)はデータ演算のためのALU、(48),(49),(51)
はALU(50)の入出力ラッチ、(DA,DB,D0)、(52)は
Sコード(17)としてのデータ格納するためのSコード
データレジスタ(SD)、(53)はEステージ(5)で行
うメモリアクセスに関するデータを格納するデータレジ
スタ(DD)であり、(101)〜(110)はそれぞれ内部で
データやアドレスの転送を行うための内部バス(S1バ
ス、S2バス、D0バス、Aバス、A0バス、DISPバス、P0バ
ス、CAバス、AAバス、D0バス)である。(54)はPC演算
部、(55)はアドレス計算部である。
第3図は本発明のデータ処理装置におけるサブルーチ
ンリターン命令の先行分岐処理に特に関係する部分のブ
ロック図である。図において、(61)はDステージ制御
部、(62)はIFステージ制御部、(63)はEステージ制
御部、(65)はパイプライン処理途中のサブルーチンコ
ール命令の数をカウントするための3ビットのカウンタ
であるBSRカウンタ、(66)はDステージ(2)が管理
している3ビットのPCスタックポインタ(DP)、(67)
はEステージ(5)が管理している3ビットのPCスタッ
クポインタ(EP)、(68),(69)はそれぞれDP(6
6)、EP(67)をデコードするデコーダであり、(201)
〜(212)は各部の制御信号である。この図では簡単の
ためタイミングを制御するためのクロック信号は省略し
てある。
本実施例では、PCスタック(46)は8エントリで構成
されている。また、DP(66),EP(67)は3ビットとな
っているが、インクリメント時の最上位ビットからのキ
ャリー、デクリメント時の最上位ビットへのボローは無
視される。すなわち、PCスタック(46)は、ポインタ
‘000'の指し示すエントリが隣合ったリング状のスタッ
クメモリとして取り扱われている。
(2.1)PCスタックの動作の概要 本発明のデータ処理装置においてサブルーチンコール
命令およびサブルーチンリターン命令がどのように実行
されるか大まかに説明する。
本発明のデータ処理装置では、サブルーチンコール命
令としてブランチサブルーチン(BSR)命令とジャンプ
サブルーチン(JSR)命令がある。また、サブルーチン
リターン命令としては、リターンサブルーチン(RTS)
命令と高機能命令として高級言語用サブルーチンリター
ンとパラメータ解放を一度に行うEXITD命令がある。
サブルーチンコール命令が実行されると、Eステージ
(5)でサブルーチンからの戻り先アドレスがPCスタッ
ク(46)にプッシュされる。サブルーチンリターン命令
がデコードされると、Dステージ(2)でPCスタック
(46)のスタックトップにあるアドレスに先行分岐処理
(プリリターン)を行う。パイプラインの初期段階であ
るデコードステージ(2)で分岐処理を行うためサブル
ーチンリターン命令実行によるパイプラインの乱れを大
幅に削減できる。実行ステージ(5)では、プリリター
ンを行ったアドレスとメモリから読み込んだ真の戻り先
アドレスが比較され、不一致であったならば真の戻り先
アドレスへの分岐処理を行う。ポインタPD(66)、EP
(66)等の更新を含めて少し詳しく説明する。
リセットされた状態では、RESET信号(208)により、
BSRカウンタ(65)、EP(67)はゼロクリアされ、DP(6
6)にはゼロになっているEP(67)の値がコピーされ
る。
まず、命令キュー(21)から取り込まれた命令コード
が命令デコード部(22)でデコードされる。デコードの
結果、取り込まれた命令がサブルーチンコール命令であ
った場合にはDPDEC信号(202)によりDPのデクリメント
を行うと共に、BSRカウンタ(65)をカウントアップす
る。アドレス計算ステージ(3)では、アドレス加算器
(38)により戻り先アドレスが計算されてA0バス(10
5)を介してFAレジスタ(41)に転送される。Fステー
ジ(4)では、FAレジスタ(41)の値がSAレジスタ(4
2)に転送される。サブルーチンコール命令がEステー
ジ(5)で実行されるとEPDEC信号(206)によりEP(6
7)の値がプリデクリメントされる。そしてPCWRITE信号
(210)により更新されたEP(67)が指すPCスタック(4
6)に、SIバス(101)を介してSAレジスタ(42)に格納
されている戻り番地の値が書き込まれる。また、BSRCDE
C信号(205)によりBSRカウンタ(65)をデクリメント
する。BSR命令では、Dステージ(2)でサブルーチン
の先頭番地への分岐処理を行う。BSR命令では、Eステ
ージ(5)での分岐処理を行う必要はない。
次に、サブルーチンリターン命令の処理について説明
する。命令キュー(21)から取り込まれた命令がサブル
ーチンリターン命令であったときにはBSRカウンタ(6
5)の値がゼロであるかどうかを示すBSRCZ信号(201)
のチェックを行う。もし、BSRカウンタ(65)がゼロで
なかったり、BSRカウンタ(65)の値がゼロになるまで
Dステージ(2)は処理を一時停止する。BSRカウンタ
(65)がゼロでないということは、まだ対応するサブル
ーチンコール命令がEステージ(5)で実行されずにパ
イプライ中にあることを示しており、PCスタック(46)
に対応する戻り番地が登録されていないことを示してい
る。BSRCZ信号(201)により、BSRカウンタ(65)の値
がゼロである、あるいは、ゼロになったことが示される
と、Dステージ制御部(61)はPRERET信号(209)によ
り、IFステージ制御部(62)及びPCスタック(46)にプ
リリターン処理を行うことを知らせる。PCスタック(4
6)はDP(66)が指し示しているエントリの内容をCAバ
ス(108)に出力する。IFステージ制御部(62)は、命
令キュー(21)に取り込まれている命令データをすべて
無効化し、CAバスに出力された値で戻り先アドレスの命
令のフェッチを行い、取り込まれた命令データを命令デ
コード部(22)に送る。PCスタック(46)の内容がCAバ
ス(108)に出力された後に、DPINC信号(203)によりD
P(66)がポストインクリメントされる。RTS命令では、
Fステージ(4)で、メモリから正しい戻り先アドレス
がフェッチされ、SDレジスタ(52)に取り込まれてい
る。また、EXITD命令では、Eステージ(5)での命令
実行中に、メモリから正しい戻り先アドレスをDDレジス
タ(53)に取り込む。PCREAD信号(211)によりEP(6
7)が指し示すPCスタック(46)の内容がS1バスに出力
され、ALU(50)の入力ラッチであるDAラッチ(48)に
取り込まれる。DAラッチ(48)に取り込まれた値は現在
Eステージ(5)で処理中のサブルーチンリターン命令
がプリリターンを行ったときの戻り先アドレスである。
また、SDレジスタ(52)あるいはDDレジスタ(53)に取
り込まれている真の戻り先アドレスがS2バス(102)を
介してDBラッチ(49)に取り込まれる。ALU(50)で
は、DAラッチ(48)の内容とDBラッチ(49)の内容の比
較を行い比較結果であるゼロフラグ(ZFLAG信号(21
2))をEステージ制御部(63)に送る。Eステージ制
御部(63)では、もし比較結果が一致であったなら、プ
リリターンが正しかったことを示しているので、サブル
ーチンリターン命令の実行を終了する。もし比較結果が
不一致であった場合には、プリリターンを行った戻り先
アドレスが誤っていたことを示している。このとき、真
の戻り先アドレスの値をS1バス(101)を介してEBレジ
スタ(45)に転送した後、EBレジスタ(45)の値をCAバ
ス(108)に出力する。IFステージ(1)はCAバス(10
8)に出力された値により命令フェッチを行う。
サブルーチンリターン命令実行時に、Eステージ
(5)では、Dステージ(2)でプリリターンを行った
戻り先アドレスが正しかったかどうかのチェックを行っ
ている。これは、PCスタック(46)が8エントリで構成
されているため、サブルーチンコールが9レベル以上の
入れ子になった場合には8レベルより上のレベルのサブ
ルーチンコールに関する戻り先アドレスのデータがオー
バーライトされて壊されてしまう。また、プログラムに
よって外部メモリ上の戻り先アドレスの値が書き換えら
れた場合にも、PCスタック(46)に登録されている戻り
先アドレスとは異なるアドレスにリターンする。このよ
うな場合に備え、Eステージ(5)ではプリリターンが
正しく実行されたかどうかのチェックを行っているので
ある。しかし、プログラムによって外部メモリ上の戻り
先アドレスの値を書き換える様なことはまずないし、サ
ブルーチンレベルが一番深くなったところから8レベル
のサブルーチンコールに関してはいつも正しい値がPCス
タック(46)に格納されているので、プリリターンが正
しく行われる確立は非常に高い。
先に述べたBSRカウンタ(65)は、より正確なプリリ
ターンを行い、Eステージ(5)での比較を確実に行う
ために備えられている。この機能がないと、サブルーチ
ンコール命令が処理中であり、Dステージ(2)での処
理は終了したが、Eステージ(5)でまだ戻り先アドレ
スの値がPCスタック(46)に書き込まれていないうち
に、Dステージ(2)でサブルーチンリターン命令が実
行された場合、対応するサブルーチンリターン命令の戻
り先アドレスが登録されていないため、誤った戻り先ア
ドレスにプリリターン処理を行ってしまう。ところが、
サブルーチンリターン命令がEステージ(5)で処理さ
れる段階では、先行していたサブルーチンコール命令が
すでに処理されており、PCスタック(46)には正しい戻
り先アドレスが登録されているため、Eステージ(5)
での比較結果は一致を示し、プリリターンが正しかった
として処理されてしまう。すなわち、このような場合誤
動作を行ってしまうわけである。BSRカウンタの機能を
備えることにより、参照すべき戻り先アドレスの値が先
行するサブルーチンコール命令により登録された後に、
プリリターンが行われる。また、サブルーチンコール命
令の実行に際し、Dステージ(2)でPCスタック(46)
が参照されてからEステージ(5)処理されるまでPCス
タック(46)が書き換えられることがないので、Dステ
ージ(2)でプリリターンを行った戻り先アドレスの値
がEステージ(5)において正しく参照される。ただ
し、プリブランチを行わないJSR命令では、Eステージ
(5)において分岐先アドレスの分岐処理が行われるた
め、もし、RTS命令がJSR命令で登録される前のPCスタッ
クを参照してプリリターンしても、そのRTS命令自体が
実行される前にパイプラインはキャンセルされるので、
このようなことは起こらない。
以上で述べたように、サブルーチンコール時の戻り先
アドレスのみを記憶するPCスタック(46)を設けること
により、サブルーチンリターン命令に対して命令のデコ
ード段階で戻り先アドレスへのプリリターンを行い、サ
ブルーチンリターン命令実行時のパイプラインの乱れを
なくす。
Eステージ(5)においてブランチが起こった場合に
は、EBRA信号(204)によりBSRカウンタ(65)の値がゼ
ロクリアされ、EP(67)の内容がDP(66)にコピーされ
る。Eステージ(5)においてブランチが起こった場合
には、IFステージ(1)〜Fステージでの処理がすべて
無効化されるため、Dステージ(2)でデコードされた
が、Eステージ(5)では実行されなかった処理途中サ
ブルーチンコール命令、サブルーチンリターン命令に対
して行われたBSRカウンタ(65)、DP(66)の更新を無
効化し、PCスタック(46)のそのレベルまでの戻り先ア
ドレスの値をDステージ(2)で正しく参照できるよう
になっている。
(2.2)サブルーチンコール命令、サブルーチンリター
ン命令の詳細動作 以上では、サブルーチンコール命令とサブルーチンリ
ターン命令の大まかな動作について述べてきたが、ここ
では各命令の詳細な動作について説明する。
本発明のデータ処理装置では、サブルーチンコール命
令としてブランチサブルーチン(BSR)命令とジャンプ
サブルーチン(JSR)命令がある。また、サブルーチン
リターン命令としては、リターンサブルーチン(RTS)
命令と高機能命令として高級言語用サブルーチンリター
ンとパラメータ解放を一度に行うEXITD命令がある。以
下、各命令について詳細な説明を行う。各命令のビット
割り付けを第4図に示してある。‘−’はオペレーショ
コードを示す。
(2.2.1)BSR命令 BSR命令はPC相対のアドレッシングのみをサポートす
るサブルーチンコール命令であり、戻り先アドレスがス
タックに退避される。第4図(A),(B)に示すよう
にBSR命令に関しては一般形(Gフォーマット)と短縮
形(Dフォーマット)の2つの命令フォーマットがあ
る。Dステージ(2)では、どちらのフォーマットでも
同様の処理が行われる。この命令は、1つのステップコ
ードとして処理される。
BSR命令実行のフローチャートを第5図に示す。BSR命
令が命令デコード部(22)で処理されると、BSR命令の
ステップコードを示すDコード(12)と戻り先アドレス
を計算するためのAコード(13)が生成される。Gフォ
ーマットの命令であれば、変位のサイズを示すフィール
ド(82B)に従って変位(82D)の値も同時に取り込む。
また、DPDEC信号(202)によりDP(66)のデクリメン
ト、及びBSRカウンタ(65)のインクリメント処理を行
う。この命令は、プリブランチを行う命令であり、PC演
算部(54)において飛び先アドレスの計算が行われ、演
算結果がCAバス(108)に出力されてプリブランチ処理
が行われる。Aステージ(3)では、Aコード(13)の
指示に従ってアドレス計算部(55)において戻り先のア
ドレスが計算され、A0バス(105)を介してFAレジスタ
(41)に転送される。Fステージ(14)ではFAレジスタ
(41)の値がSAレジスタ(42)に転送される。Eステー
ジ(5)では、まず、EPDEC信号(206)によりEP(67)
のプリデクリメントを行う。次に、PCWRITE信号(210)
によって、戻り先アドレスが格納されているSAレジスタ
(42)の値がS1がバス(101)を介してPCスタック(4
6)中のEP(67)の指すエントリに書き込まれる。ま
た、同時にS1バス(101)の値がALU(50)、D0バス(10
3)を介してDDレジスタ(53)に書き込まれ、戻り先ア
ドレスの格納されたDDレジスタ(53)の値をスタックポ
インタによってソフトウェアで管理されているメモリ上
のスタックにプッシュする。PCスタック(46)に戻り先
アドレスが登録されたらBSRCDEC信号(205)によりBRS
カウンタ(65)がデクリメントされる。この命令では、
Dステージ(2)においてすでに分岐処理が行われてい
るので、Eステージでは分岐処理は行わない。
(2.2.2)JSR命令 JSR命令のビット割り付けが第4図(C)に示されて
いる。JSR命令はNEWPC(83C)の実効アドレスにサブル
ーチンジャンプする命令であり、戻り先アドレスがスタ
ックに退避される。飛び先番地に関しては複数段のアド
レッシング拡張指定が可能であるが簡単のため拡張指定
がない場合について説明する。この命令はDステージ
(2)で2つのステップコードに分解されて処理され
る。第1のステップコードは飛び先のアドレスに関する
処理を行い、第2のステップコードでは戻り先アドレス
に関する処理を行う。
まず、第1のステップコードに関する処理について説
明する。JSR命令が命令デコード部(22)でデコードさ
れると、JSR命令の第1ステップコードを示すDコード
(12)と飛び先番地の実効アドレスを計算するためのA
コード(13)が生成される。もし飛び先番地のアドレス
計算に絶対アドレスや変位等の拡張部(83C)を必要と
する場合にはそのデータも命令キュー(21)から同時取
り込む。Aステージ(3)では、Aコード(13)の指示
に従ってアドレス計算部(55)において飛び先のアドレ
スが計算され、A0バス(105)を介してFAレジスタ(4
1)に転送される。Fステージ(4)ではFAレジスタ(4
1)の値がSAレジスタ(42)に転送される。Eステージ
(5)では飛び先アドレスが格納されているSAレジスタ
(42)の値がS1バス(101)を介してEBレジスタ(45)
に転送される。
次に、第2のステップコードに関する処理について説
明する。Dステージ(2)ではJSR命令の第2ステップ
コードを示すDコード(12)と戻り先アドレスの実効ア
ドレスを計算するためのAコード(13)が生成される。
このステップコードの処理では命令キュー(21)から命
令データは取り込まれない。また、DPDEC信号(202)に
よりDP(66)のデクリメント、及び、BSRカウンタ(6
5)のインクリメント処理を行う。Aステージ(3)で
は、Aコード(13)の指示に従ってアドレス計算部(5
5)において戻り先のアドレスが計算され、A0バス(10
5)を介してFAレジスタ(41)に転送される。Fステー
ジ(4)ではFAレジスタ(41)の値がSAレジスタ(42)
に転送される。Eステージ(5)では、まず、EPDEC信
号(206)によりEP(67)のプリデクリメントを行う。
次に、PCWRITE信号(210)によって、戻り先アドレスが
格納されているSAレジスタ(42)の値がS1バス(101)
を介してPCスタック(46)中のEP(67)の指すエントリ
に書き込まれる。また、同時にS1バス(101)の値がALU
(50)、D0バス(103)を介してDDレジスタ(53)に書
き込まれ、戻り先アドレスの格納されたDDレジスタ(5
3)の値をスタックポインタによってソフトウェアで管
理されているメモリ上のスタックにブッシュする。第1
ステップコードですでにEBレジスタ(45)に書き込まれ
ている飛び先番地の値をCAバス(108)に出力して分岐
処理を行う。このとき、EBRA信号(204)により、BSRカ
ウンタ(65)はクリアされ、DP(66)にはEP(67)の値
がコピーされる。
以上述べたように、JSR命令でもPCスタック(46)に
関する処理はBSR命令と同じである。
(2.2.3)RTS命令 RTS命令はサブルーチンからのリターンを行う命令で
あり、スタックから復帰されたリターンアドレスにジャ
ンプする。この命令は、1つのステップコードとして処
理される。
RTS命令実行のフローチャートを第6図に示す。RTS命
令が命令デコード部(22)で処理されると、RTS命令の
ステップコードを示すDコード(12)とスタックトップ
のアドレスを計算するためのAコード(13)が生成され
る。この命令はプリリターンを行う命令である。BSRCZ
信号(201)によりパイプライン中にサブルーチンコー
ル命令が存在することが示されている場合にはBSRカウ
ンタ(65)の内容がゼロになるまで処理を一時停止す
る。BSRカウンタ(65)がゼロである場合にはプリリタ
ーン処理を行う。PRERET信号(209)により、PCスタッ
ク(46)中のDP(66)が指し示すエントリの内容をCAバ
ス(108)に出力し、先行分岐処理(プリリターン)を
行う。また、PCスタック(46)参照後、DPINC信号(20
3)によりDP(66)のポストインクリメント処理を行
う。Aステージ(3)では、Aコード(13)の指示に従
ってアドレス計算部(55)においてスタックトップのア
ドレスが計算され、A0バス(105)を介してFAレジスタ
(41)に書き込まれる。スタックトップのアドレスとは
ASP(40)の値そのものである。Fステージ(4)でFA
レジスタ(41)の値でオペランドがフェッチされ、SDレ
ジスタ(52)に取り込まれる。SDレジスタ(52)に取り
込まれた値は、スタック上に退避されていた真の戻り先
アドレスである。Eステージ(5)では、PCREAD信号
(211)によって、プリリターン時に参照されたリター
アドレスが格納されているPCスタック(46)中のEP(6
7)の指すエントリの内容がS1バス(101)に出力され、
DAラッチ(48)に取り込まれる。そして、真の戻り先ア
ドレスが格納されているSDレジスタ(52)の内容がS2バ
ス(102)を介してDBラッチ(49)に取り込まれる。ALU
(50)ではプリリターンが行われたアドレスと真の戻り
先アドレスとの比較が行われ、比較結果がZFLAG信号(2
12)としてEステージ制御部(63)に送られる。また、
同時に、SDレジスタ(52)の内容がS2バス(102)、DM
ラッチ(56)、D0バス(103)を介して、レジスタファ
イル(47)中のワーキングレジスタに退避される。PCス
タック(46)参照後、EPINC信号(207)によりEP(67)
のポストインクリメントを行う。比較結果が一致してい
たら、正しいアドレスにプリリターンが行われたことを
示しており、Eステージ(5)は1マイクロサイクルNO
Pを実行して命令の実行を終了する。比較結果が不一致
であった場合にはプリリターンを行ったリターンアドレ
スが誤ってたことを示しており、ワーキングレジスタに
退避されている真の戻り先アドレスの値をS1バス(10
1)を介してEBレジスタ(45)に転送し、EBレジスタ(4
5)の値がCAバス(108)に出力されて分岐処理が行われ
る。このとき、EBRA信号(204)により、BSRカウンタ
(65)はクリアされ、DP(66)にはEP(67)の値がコピ
ーされる。
(2・2・4)EXITD命令 EXITD命令は高級言語用のパラメータ解放、退避して
いたレジスタの復帰、サブルーチンからのリターン、及
び、スタック上のサブルーチンパラメータの解放を行う
高機能命令である。第4図(E),(F)に示すように
EXITD命令に関してはGフォーマットとEフォーマット
の2つの命令フォーマットがある。Gフォーマットでは
3つのステップコードとして処理され、Eフォーマット
ではこの命令は、1つのステップコードとして処理され
る。簡単のため第4図(E)に示すEフォーマットの命
令についてのみ説明を行う。
EXITD命令が命令デコード部(22)で処理されると、E
XITD命令がステップコードを示すDコード(12)と即値
の転送を行うためのAコード(13)が生成される。スタ
ックポインタの補正値(85B)の値は、リテラルとして
Dコード(12)で送られる。この命令では、2バイトの
復帰するレジスタのビットマップデータ(85C)の値も
同時に取り込み、Aコード(13)の即値として転送され
ていく。この命令はプリリターンを行う命令である。BR
SCZ信号によりパイプライン中にサブルーチンコール命
令が存在することが示されている場合にはBSRカウンタ
(65)の内容がゼロになるまで処理を一時停止する。BS
Rカウンタ(65)がゼロである場合にはプリリターン処
理を行う。PRERET信号(209)によりPCスタック(46)
中のDP(66)が指し示すエントリの内容をCAバス(10
8)に出力し、先行分岐処理(プリリターン)を行う。
また、PCスタック(46)参照後、DPINC信号(203)によ
りDP(66)のポストインクリメント処理を行う。Aステ
ージ(3)では、Aコード(13)の指示に従ってアドレ
ス計算部(55)において即値の値が転送され、A0バス
(105)を介してFAレジスタ(41)に書き込まれる。F
ステージではFAレジスタ(41)の値がSAレジスタ(42)
に転送される。Eステージ(5)では、退避されていた
レジスタのスタックからの復帰、スタックフレームの解
放、フレームポインタのスタックからの復帰等の処理を
行った後に、スタックから戻り先アドレスの値をポップ
しDDレジスタ(53)に取り込む。また、サブルーチンパ
ラメータを解放するためにスタックポインタの補正を行
う。PCREAD信号(211)によって、プリリターン時に参
照されたリターンアドレスが格納されているPCスタック
(46)中のEP(67)の指すエントリの内容がS1バス(10
1)に出力され、DAラッチ(48)に取り込まれる。そし
て、真の戻り先アドレスが格納されているDDレジスタ
(53)の内容がS2バス(102)を介してDBラッチ(49)
に取り込まれる。ALU(50)ではプリリターンが行われ
たアドレスと真の戻り先アドレスとの比較が行われ、比
較結果がZFLAG信号(212)としてEステージ制御部(6
3)に送られる。また、同時に、DDレジスタ(53)の内
容が、S2バス(102)、DMラッチ(56)、DDバス(103)
を介して、レジスタファイル(47)中のワーキングレジ
スタに退避される。PCスタック(46)参照後、EPINC信
号(207)によりEP(67)のポストインクリメントを行
う。比較結果が一致していたら、正しいアドレスにプリ
リターンが行われたことを示しており、Eステージは1
マイクロサイクルNOPを実行して命令の実行を終了す
る。比較結果が不一致であった場合にはプリリターンを
行ったリターンアドレスが誤っていたことを示してお
り、ワーキングレジスタに退避されている真の戻り先ア
ドレスの値をS1バス(101)を介してEBレジスタ(45)
に転送し、EBレジスタ(45)の値がCAバス(108)に出
力されて分岐処理が行われる。このとき、EBRA信号(20
4)により、BSRカウンタ(65)はクリアされ、DP(66)
にはEP(67)の値がコピーされる。
以上述べたように、EXITD命令でもPCスタック(46)
に関する処理はRTS命令と同じである。
(2.3)他の実施例の説明 本実施例では、PCスタック(46)は8エントリで構成
されている。従って、サブルーチンコールが9レベル以
上の入れ子となったときには、有効な戻り先アドレスが
格納されているエントリに別の戻り先アドレスがオーバ
ーライトされるため、最初の値が消えてしまう。従っ
て、リカーシブコールを行うような特殊な場合を除い
て、9レベル以上の入れ子になると誤ったプリリターン
を行うことになる。また、プログラムにより外部メモリ
上の戻り先アドレスを書き換えても誤った戻り先アドレ
スにプリリターンを行うことになる。このため、Eステ
ージでプリリターンが正しかったかどうかのチェックが
必要になるわけである。PCスタックを何エントリ設ける
かに関しては、何レベルまでの深さのサブルーチンコー
ルに対して正しいプリリターンを行うかという性能の問
題と、ハードウェアの増加量との兼ね合いで決定すれば
よい。
本実施例では、サブルーチンのなかでサブルーチンか
らの戻り先アドレスが書き換えられても正しい動作を保
証するため、RTS命令実行時にCPU外部からフェッチした
サブルーチンからの正しい戻り先アドレスとPCスタック
(46)からフェッチしてプリリターンに使用したアドレ
スを比較している。もし、サーブルチンからの戻り先ア
ドレスが書き換えられないソフトウエアを実行するだけ
でよいのなら(実際のアプリケーションプログラムでは
サブルーチンからの戻り先アドレスが書き換えられるこ
とはほとんどない)、CPU外部のメモリからサブルーチ
ンの戻り先アドレスをフェッチする必要はない。PCスタ
ック(46)にあるサブルーチンの戻り先アドレスが書き
換えられるかどうかをPCスタック値の有効無効を示すフ
ラッグを設けるなどしてチェックするだけよい。つま
り、CPU外部のメモリにあるサブルーチンからの戻り先
アドレスがあるスタックの整合性が保証されるのなら、
プリリターンが正しいかどうかをPCスタック(46)の管
理機構だけで判断して、PCスタックから正しいサブルー
チンの戻り先アドレスが得られないときだけ、CPU外部
のメモリからサブルーチンの戻り先アドレスをフェッチ
してそのアドレスにリターンすればよい。
本実施例では、確実なプリリターンを行うためにBSR
カウンタ(65)を備えらているが、サブルーチンコール
命令のプリブランチ処理を行わない場合には、サブルー
チンコール命令実行後必ず飛び先番地への分岐処理が行
われ、パイプラインがキャンセルされるためこの機能は
必要ない。また、BSR命令をDステージ(2)デコード
するときポインタDP(66)をデクリメントしているが、
BSR命令をEステージ(5)で実行するとき、デクリメ
ントしたポインタEP(67)の値をコピーすれようにして
もよい。
また、本実施例では、Eステージ(5)でプリリター
ンが正しく行われたかどうかのチェックを行うために、
PCスタック(46)からプリリターンを行った戻り先アド
レスを参照して、CPU外部のメモリからフェッチした正
しい戻り先アドレスと比較するようにしているが、Dス
テージ(2)でプリリターンを行った戻り先アドレスを
退避しておき、Eステージ(5)でその退避されている
値を参照するようにしてもよい。
また、本実施例でDステージ(2)より後段のステー
ジがサブルーチンコール命令を処理しているかどうかを
検出する手段としてカウンタを用いているが、各ステッ
プコードあるいは各パイプラインステージにサブルーチ
ンコール命令用のフラグを設けて、全てのフラグが立っ
ていないときのみ、プリリターン処理を行うようにして
もよい。また、ハードウェア削減のためBSRカウンタや
そのかわりとなる上記のフラグの機能を外しても、サブ
ルーチンリターン命令実行時に、プリリターンが正しか
ったかどうかのチェックを行っているので、正しい動作
を行うことができる。このときの性能低下は、サブルー
チンコール命令とそれに対応するサブルーチンリターン
命令がパイプライン中に同時に取り込まれる頻度がどの
程度あるかによる。
また、本実施例では、PCスタック(46)のポインタと
して、Dステージ(2)で管理しているポインタDP(6
6)とEステージ(5)で管理しているポインタEP(6
7)の2つのポインタを備えている。これは、複数のサ
ブルーチンリターン命令がパイプライン中で処理される
場合にも正しい戻り先アドレスを参照できるようにした
ものである。EP(67)はEステージ(5)で実行された
サブルーチンコール命令、サブルーチンリターン命令に
対応して変化する。DP(66)は命令デコード段階で変化
するため、2つ以上のサブルーチンリターン命令がパイ
プライン中に取り込まれても対応するサブルーチンコー
ル命令の戻り先アドレスが参照できるわけである。Eス
テージ(5)で分岐処理が行われたときにはパイプライ
ンはキャンセルされるのでEP(67)の値がDP(66)にコ
ピーされる。サブルーチンリターン命令実行時には、プ
リリターンが正しかったかどうかのチェックを行ってい
るので、ハードウェア削減のためPCスタック(46)のポ
インタ管理をすべてEP(67)のみで行うようにしても正
しい動作を行うことができる。この場合の性能低下は、
2つ以上のサブルーチンリターン命令がパイプライン中
に同時取り込まれる頻度がどの程度あるかによる。ポイ
ンタを1つにした場合、サブルーチンリターン命令用の
フラグを設け、Aステージ(3)以降のステージでサブ
ルーチンリターン命令を実行中の時はそのフラグを立て
ておき、そのフラグが立っているときにはプリリターン
の処理を待つようにすると、ポインタが正しく切り替わ
ってからPCスタック(46)の参照が行えるので正しいプ
リリターンが可能となる。
また、本発明のPCスタック(46)はプリリターン時に
もプリリターンが正しく行われたどうか判断するときに
もアクセスさせ、CPU外部のメモリアクセスとは独立に
行うと効率がよい。従って、CPUが1つの集積回路チッ
プで実現されるマイクロプロセッサの様なデータ処理装
置ではPCスタック(46)をCPUと同じ集積回路内にもつ
ようにすれば、CPU外部のメモリアクセスとは独立にPC
スタック(46)がアクセスできる。
この発明は次の(1)〜(7)項の実施態様により実
施できる。
(1)第1のステージと第2のステージをもち、命令の
実行に対して第1のステージでの処理が第2のステージ
での処理に先行して行われるパイプライン処理により命
令を処理するデータ処理装置であって、 命令やデータを格納する第1の記憶装置と、 サブルーチンからの戻り先命令のアドレス値を格納す
る第1の記憶装置とは異なる第2の記憶装置と、 サブルーチンからの戻り先アドレスとなる値を前記第
1の記憶装置に書き込む第1の書き込み手段と、 サブルーチンからの戻り先アドレスとなる値を前記第
2の記憶装置に書き込む第2の書き込み手段と、 前記第1のステージで制御され、第1の値を前記第2
の記憶装置から読みだす第1の読み出し手段と、 サブルーチンリターン命令処理時に、サブルーチンか
らの戻り先アドレスとなる第2の値を前記第1の記憶装
置から読みだす第2の読み出し手段と、 サブルーチンリターン命令処理時に、前記第1の値が
サブルーチンからの戻り先アドレスであるかどうかを判
断する判断手段と、 前記第1の記憶装置から命令をフェッチする命令フェ
ッチ手段とを備え、 前記命令フェッチ手段が、前記第1の記憶装置の前記
第1の値の示すアドレスから第1の命令をフェッチする
機能と、前記第1の記憶装置の前記第2の値の示すアド
レスから第2の命令をフェッチする機能を備え、 サブルーチンリターン命令処理時に、 前記判断手段が、前記第1の値がサブルーチンからの
戻り先アドレスであると判断するときは前記第1の命令
を実行し、 前記判断手段が、前記第1の値がサブルーチンからの
戻り先アドレスでないと判断するときは前記第2の命令
を実行する ことを特徴とするデータ処理装置。
(2)前記判断手段は前記第1の値と前記第2の値を比
較する比較手段であり、 前記比較手段により比較結果が一致するときは前記第
1の値がサブルーチンからの戻り先アドレスであると判
断し、 前記比較手段による比較結果が一致しないときは前記
第1の値がサブルーチンからの戻り先アドレスでないと
判断することを特徴とする第1項記載のデータ処理装
置。
(3)前記第2の記憶装置がサイクリックな番号がつけ
らた複数のエントリと、前記サイクリックな番号を管理
する第1のポインタレジスタにより構成したスタック記
憶装置であることを特徴とする第1項記載のデータ処理
装置。
(4)前記第2の記憶装置は2n個のエントリで構成さ
れ、 インクリメントまたはデクリメントの少なくとも一方
が可能で、前記エントリの番号を管理する第1のnビッ
トカウンタと、 インクリメントおよびデクリメントの両方が可能で、
前記エントリの番号を管理する第2のnビットカウンタ
と、 前記第2の記憶装置の前記第2のnビットカウンタの
値が示すエントリから読み出す第3の読み出し手段と、 前記第2のnビットカウンタの値を前記第1のnビッ
トカウンタに書き込む第3の書き込み手段を備え、 前記第2の書き込み手段が前記第2の記憶装置の前記
第2のnビットカウンタの値が示すエントリ番号にサブ
ルーチンからの戻り先アドレスを書き込む手段であり、 前記第1の読み出し手段が前記第2の記憶装置の前記
第1のnビットカウンタの値が示すエントリから前記第
1の値を読み出す手段であり、 前記比較手段が前記第3の読み出し手段により読み出
して得た前記第1の値を前記第2の値と比較する ことを特徴とする第2項記載のデータ処理装置。
(5)前記第1のステージで処理を終えた全サブルーチ
ンコール命令に対する、前記第2の記憶装置へのサブル
ーチンからの戻り先命令のアドレスの書き込み処理が終
了しているかどうかを検出するサブルーチンコール命令
処理検出手段を備えたことを特徴とする 第1項あるいは第4項記載のデータ処理装置。
(6)命令やデータを格納する第1の記憶装置と、第1
の記憶装置とは異なり、サブルーチンからの戻り先命令
のアドレス値を格納し、2n個のエントリからなる第2の
記憶装置と、 インクリメントまたはデクリメントの少なくとも一方
が可能で、前記エントリの番号を管理する第1のnビッ
トカウンタと、 インクリメントおよびデクリメントの両方が可能で、
前記エントリの番号を管理する第2のnビットカウンタ
と、 前記第2の記憶装置の前記第1のnビットカウンタの
値が示すエントリから値を読みだす第1の読み出し手段
と、 前記第2の記憶装置の前記第2のnビットカウンタの
値が示すエントリから値を読みだす第2の読み出し手段
と、 前記第2の記憶装置の前記第2のnビットカウンタの
値が示すエントリにサブルーチンからの戻り先命令のア
ドレスを書き込む第1の書き込み手段と、 前記第2のnビットカウンタの値を前記第1のnビッ
トカウンタに書き込む第2の書き込み手段と、 を備えることを特徴とするデータ処理装置。
(7)サブルーチンからの戻り先命令のアドレス値を格
納し、2n個のエントリからなる記憶装置と、 インクリメントまたはデクリメントの少なくとも一方
が可能で前記エントリの番号を管理する第1のnビット
カウンタと、 インクリメントおよびデクリメントの両方が可能で、
前記エントリの番号を管理する第2のnビットカウンタ
と、 前記第2の記憶装置の前記第1のnビットカウンタの
値が示すnビットカウンタから値を読みだす第1の読み
出し手段と、 前記第2の記憶装置の前記第2のnビットカウンタの
値が示すnビットカウンタから値を読みだす第2の読み
出し手段と、 前記第2の記憶装置の前記第2のnビットカウンタの
値が示すエントリにサブルーチンからの戻り先命令のア
ドレスを書き込む第1の書き込み手段と、 前記第2のnビットカウンタの値を前記第1のnビッ
トカウンタに書き込む第2の書き込み手段と、 をCPUと同じ単一の集積回路内に備えることを特徴と
するデータ処理装置。
〔発明の効果〕
以上のように、この発明によればサブルーチンコール
命令の戻り先アドレスのみを格納するPCスタックを設け
ることにより、サブルーチンリターン命令の分岐処理を
命令実行ステージでの処理に先だって行うことができ、
サブルーチンリターン命令実行によるパイプライン処理
のオーバーヘッドが削減されるので、高性能なデータ処
理装置が得られる効果がある。
【図面の簡単な説明】
第1図は本発明のデータ処理装置のパイプライン処理構
成を示す図、第2図は本発明のデータ処理装置のブロッ
ク図、第3図は本発明のデータ処理装置におけるサブル
ーチンリターン命令の先行分岐処理に特に関係する部分
のブロック図、第4図は本発明のデータ処理装置におけ
るサブルーチンコール命令及びサブルーチンリターン命
令のビット割り付けを示す図、第5図はBSR命令実行の
フローチャート、第6図はRTS命令実行のフローチャー
ト、第7図は従来のデータ処理装置の典型的なパイプラ
インステージを示す図である。 (46)はサブルーチンコール命令の戻り先アドレスのみ
を格納するPCスタック、(65)は命令デコードステージ
以降のステージで処理されているサブルーチンコール命
令の数をカウントするBSRカウンタ、(66)は命令デコ
ードステージが管理しているPCスタック(46)のポイン
タDP、(67)は命令実行ステージが管理しているPCスタ
ック(46)のポインタEPである。 なお、図中、同一符号は同一、又は相当部分を示す。

Claims (3)

    【特許請求の範囲】
  1. 【請求項1】第1のステージと第2のステージをもち、
    第1のステージでの処理が第2のステージでの処理に先
    行して行われるパイプライン処理により命令を処理する
    データ処理装置であって、 命令を記憶する命令記憶装置と、 データを格納する第1の記憶装置と、 サブルーチンからの戻り先命令のアドレス値を格納する
    第1の記憶装置とは異なる第2の記憶装置と、 サブルーチンコール命令処理時に、サブルーチンからの
    戻り先アドレスとなる値を前記第1の記憶装置に書き込
    む第1の書き込み手段と、 サブルーチンコール命令処理時に、サブルーチンからの
    戻り先アドレスとなる値を前記第2の記憶装置に書き込
    む第2の書き込み手段と、 前記第1のステージで制御され、サブルーチンリターン
    命令処理時に、第1の値を前記第2の記憶装置から読み
    だす第1の読み出し手段と、 前記第2のステージで制御され、サブルーチンリターン
    命令処理時に、真のサブルーチンからの戻り先アドレス
    となる第2の値を前記第1の記憶装置から読みだす第2
    の読み出し手段と、 サブルーチンリターン命令処理時に、前記第1の値が真
    のサブルーチンからの戻り先アドレスであるかどうかを
    判断する判断手段と、 前記命令記憶装置から命令をフェッチする命令フェッチ
    手段とを備え、 前記命令フェッチ手段が、サブルーチンリターン命令処
    理時に、 前記第2の読み出し手段での前記第2の値の読み出しの
    完了に先立ち、前記命令記憶装置から、前記第1の値の
    示すアドレスで指定される第1の命令のフェッチを開始
    する機能と、 前記命令記憶装置から、前記第2の値の示すアドレスで
    指定される第2の命令をフェッチする機能とを備え、 サブルーチンリターン命令処理時に、 前記判断手段が、前記第1の値が真のサブルーチンから
    の戻り先アドレスであると判断するときは前記第1の命
    令を実行し、 前記判断手段が、前記第1の値が真のサブルーチンから
    の戻り先アドレスでないと判断するときは前記第1の命
    令のパイプラインにおける先行処理を無効化し、前記第
    2の命令を実行する ことを特徴とするデータ処理装置。
  2. 【請求項2】第1のステージと第2のステージをもち、
    第1のステージでの処理が第2のステージでの処理に先
    行して行われるパイプライン処理により命令を処理する
    データ処理装置であって、 命令やデータを格納する第1の記憶装置と、 第1の記憶装置とは異なり、サブルーチンからの戻り先
    命令のアドレス値を格納し、2n個のエントリからなる第
    2の記憶装置と、 インクリメントまたはデクリメントの少なくとも一方が
    可能で、前記エントリの番号を管理する第1のnビット
    カウンタと、 インクリメントおよびデクリメントの両方が可能で、前
    記エントリの番号を管理する第2のnビットカウンタ
    と、 サブルーチンリターン命令処理時に、前記第1のステー
    ジで、前記第2の記憶装置の前記第1のnビットカウン
    タの値が示すエントリから値を読みだす第1の読み出し
    手段と、 サブルーチンリターン命令処理時に、前記第2のステー
    ジで、前記第2の記憶装置の前記第2のnビットカウン
    タの値が示すエントリから値を読みだす第2の読み出し
    手段と、 サブルーチンコール命令処理時に、前記第2の記憶装置
    の前記第2のnビットカウンタの値が示すエントリにサ
    ブルーチンからの戻り先命令のアドレスを書き込む第1
    の書き込み手段と、 前記第2のステージに対し前記第1のステージで先行し
    て行われた前処理が無効化される場合に、前記第2のn
    ビットカウンタの値を前記第1のnビットカウンタに書
    き込む第2の書き込み手段と、 を備えることを特徴とするデータ処理装置。
  3. 【請求項3】第1のステージと第2のステージをもち、
    第1のステージでの処理が第2のステージでの処理に先
    行して行われるパイプライン処理により命令を処理する
    データ処理装置であって、 サブルーチンからの戻り先命令のアドレス値を格納し、
    2n個のエントリからなる記憶装置と、 インクリメントまたはデクリメントの少なくとも一方が
    可能で前記エントリの番号を管理する第1のnビットカ
    ウンタと、 インクリメントおよびデクリメントの両方が可能で、前
    記エントリの番号を管理する第2のnビットカウンタ
    と、 サブルーチンリターン命令処理時に、前記第1のステー
    ジで、前記記憶装置の前記第1のnビットカウンタの値
    が示すエントリから値を読みだす第1の読み出し手段
    と、 サブルーチンリターン命令処理時に、前記第2のステー
    ジで、前記記憶装置の前記第2のnビットカウンタの値
    が示すエントリから値を読みだす第2の読み出し手段
    と、 サブルーチンコール命令処理時に、前記記憶装置の前記
    第2のnビットカウンタの値が示すエントリにサブルー
    チンからの戻り先命令のアドレスを書き込む第1の書き
    込み手段と、 前記第2のステージに対し前記第1のステージで先行し
    て行われた前処理が無効化される場合に、前記第2のn
    ビットカウンタの値を前記第1のnビットカウンタに書
    き込む第2の書き込み手段と、 をCPUと同じ単一の集積回路内に備えることを特徴とす
    るデータ処理装置。
JP63049093A 1988-03-01 1988-03-01 パイプライン処理機構を持つデータ処理装置 Expired - Lifetime JPH0820952B2 (ja)

Priority Applications (8)

Application Number Priority Date Filing Date Title
JP63049093A JPH0820952B2 (ja) 1988-03-01 1988-03-01 パイプライン処理機構を持つデータ処理装置
US07/317,253 US5193205A (en) 1988-03-01 1989-02-28 Pipeline processor, with return address stack storing only pre-return processed address for judging validity and correction of unprocessed address
US07/953,414 US5355459A (en) 1988-03-01 1992-09-29 Pipeline processor, with return address stack storing only pre-return processed addresses for judging validity and correction of unprocessed address
US08/181,353 US5526498A (en) 1988-03-01 1994-01-13 Pipeline processor, with a return address stack and two stack pointers, for storing pre-return processed addresses
US08/657,710 US5701449A (en) 1988-03-01 1996-05-30 Data processor
US08/996,787 US5978904A (en) 1988-03-01 1997-12-23 Data processor
US09/359,843 US6151673A (en) 1988-03-01 1999-07-23 Data processor
US09/602,830 US6408385B1 (en) 1988-03-01 2000-06-23 Data processor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP63049093A JPH0820952B2 (ja) 1988-03-01 1988-03-01 パイプライン処理機構を持つデータ処理装置

Publications (2)

Publication Number Publication Date
JPH01222332A JPH01222332A (ja) 1989-09-05
JPH0820952B2 true JPH0820952B2 (ja) 1996-03-04

Family

ID=12821481

Family Applications (1)

Application Number Title Priority Date Filing Date
JP63049093A Expired - Lifetime JPH0820952B2 (ja) 1988-03-01 1988-03-01 パイプライン処理機構を持つデータ処理装置

Country Status (1)

Country Link
JP (1) JPH0820952B2 (ja)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5179673A (en) * 1989-12-18 1993-01-12 Digital Equipment Corporation Subroutine return prediction mechanism using ring buffer and comparing predicated address with actual address to validate or flush the pipeline

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS62285140A (ja) * 1986-06-04 1987-12-11 Hitachi Ltd 情報処理装置

Also Published As

Publication number Publication date
JPH01222332A (ja) 1989-09-05

Similar Documents

Publication Publication Date Title
US5193205A (en) Pipeline processor, with return address stack storing only pre-return processed address for judging validity and correction of unprocessed address
CA1323938C (en) Control of multiple function units with parallel operation in a microcoded execution unit
AU632324B2 (en) Multiple instruction preprocessing system with data dependency resolution
US5717946A (en) Data processor
US5522053A (en) Branch target and next instruction address calculation in a pipeline processor
JP3543181B2 (ja) データ処理装置
JP2507638B2 (ja) デ―タ処理装置
US6832305B2 (en) Method and apparatus for executing coprocessor instructions
JPH081599B2 (ja) データ処理装置
US5193156A (en) Data processor with pipeline which disables exception processing for non-taken branches
JP2847974B2 (ja) データ処理装置
US20040064684A1 (en) System and method for selectively updating pointers used in conditionally executed load/store with update instructions
JPH07120278B2 (ja) データ処理装置
JPH07120284B2 (ja) データ処理装置
JP3345787B2 (ja) データ処理装置
US20060242394A1 (en) Processor and processor instruction buffer operating method
US5212779A (en) System for guarantee reexecution after interruption by conditionally used store buffer if microinstruction being executed is a memory write and last microinstruction
US6016544A (en) Apparatus and method for tracking changes in address size and for different size retranslate second instruction with an indicator from address size
JPH0820952B2 (ja) パイプライン処理機構を持つデータ処理装置
JPH10124312A (ja) 中央処理装置
JPH0769814B2 (ja) パイプライン処理機構を持つデータ処理装置
JP2532560B2 (ja) 高機能な例外処理を行うデ―タ処理装置
JP2503223B2 (ja) 先行制御方式
JPH0769807B2 (ja) データ処理装置
JPH0769801B2 (ja) データ処理装置

Legal Events

Date Code Title Description
S111 Request for change of ownership or part of ownership

Free format text: JAPANESE INTERMEDIATE CODE: R313111

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

EXPY Cancellation because of completion of term