JP2008310693A - 情報処理装置 - Google Patents

情報処理装置 Download PDF

Info

Publication number
JP2008310693A
JP2008310693A JP2007159388A JP2007159388A JP2008310693A JP 2008310693 A JP2008310693 A JP 2008310693A JP 2007159388 A JP2007159388 A JP 2007159388A JP 2007159388 A JP2007159388 A JP 2007159388A JP 2008310693 A JP2008310693 A JP 2008310693A
Authority
JP
Japan
Prior art keywords
register
instruction
cpu
arithmetic unit
value
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.)
Withdrawn
Application number
JP2007159388A
Other languages
English (en)
Inventor
Toru Morikawa
徹 森河
Jiro Miyake
二郎 三宅
Hiroyuki Mizobata
博幸 溝端
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.)
Panasonic Corp
Original Assignee
Panasonic 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 Panasonic Corp filed Critical Panasonic Corp
Priority to JP2007159388A priority Critical patent/JP2008310693A/ja
Priority to US12/033,538 priority patent/US7877576B2/en
Priority to CNA2008100950386A priority patent/CN101324839A/zh
Publication of JP2008310693A publication Critical patent/JP2008310693A/ja
Withdrawn legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units

Abstract

【課題】CPUと拡張演算器を備える情報処理装置において割込み命令が発生した時に、少ない専用命令数で必要なデータ全てを退避させる。
【解決手段】「GETACX Dm,Dn」という1つの専用命令で全てのレジスタからのデータの退避を実現する。Dmは、汎用レジスタ104から第1データ入力バス120に出力される値であり、拡張演算器110の各演算機はそれぞれ自己の値を認識している。Dmが自己を指定する値の場合に各演算機は自己内部のレジスタに格納されているデータをセレクタ116に出力する。拡張演算器情報出力回路117は、拡張演算器110に搭載されている演算器の個数の情報を記憶しており、第1データ入力バス120の値がその数値を上回るとフラグレジスタ102に「1」を出力し、CPU100はフラグレジスタ102の値が「1」になっていることを以ってレジスタからのデータの対比が終了したことを認識する。
【選択図】図1

Description

本発明は、CPUと拡張演算器とからなる情報処理装置に関し、特に、拡張演算器が実行している演算に係るデータの退避と、退避させたデータの再格納に関する。
情報処理装置には、その基本性能向上のために、CPUに拡張演算器という演算回路を装着したものがある。
特許文献1には、そのような情報処理装置として、主として動作し、処理を実行するCPUに、物理的に拡張演算器なる特定の演算を実行する機器を装着した情報処理装置が開示されている。拡張演算器は、CPUと同一内容の命令を解読し、解読した命令が実行可能ならば、CPUから演算に係るデータを与えられたときに演算を実行し、その結果をCPUに出力する。拡張演算器が演算を実行している間にCPUは別の命令を実行することで、基本性能が向上する。
用途に応じた構成の拡張演算器を製造することにより、CPUの物理的構成を変更することなく、用途に応じて製造した拡張演算器を装着することで、情報処理装置としての性能を上げることが容易となる。また、拡張演算器のみの構成を用途に応じて改変すればよいので、開発のための時間を、一から専用の情報処理装置を作成する場合に比べて、短縮することができるという利点もある。
特許第2987308号
ところで、上記特許文献1における情報処理装置において拡張演算器は、演算に必要なデータや、演算結果のデータを一時的に拡張演算器内のレジスタに格納することがある。当該情報処理装置において、通常の処理を実行している途中に割込みが発生した場合に、当該割込み命令中にも拡張演算器による演算を実行し当該演算の結果などをレジスタに格納して上書きする可能性があるために、今まで実行していた演算に係るデータをレジスタから退避させる必要がある。
そこで上述した割込みに対応するために、レジスタからデータを退避させるための命令が別途必要になる。また、割込み命令を実行し終えた後で退避させたデータを再度格納する必要があるので、そのための命令もまた必要となってくる。命令としては、特許文献1のように、直接どのレジスタからデータを出力させるのかを指定する専用の命令を、各レジスタに対して作成してもよいが、拡張演算器が実行できる拡張演算命令の命令セット数には限りがある。今後拡張演算器が実行できる演算内容は多岐に渡っていくと考えられ、それに伴いレジスタの数もまた増大していくことになる。そのような場合に、各レジスタに対して専用の拡張演算命令を割り当てていては命令数が足りなくなる。
そこで、本発明においては、このようなCPUと拡張演算器を含む情報処理装置において、レジスタからのデータを退避、そして再度格納させることを専用の命令数を増加させることなく実現できる情報処理装置を提供することを目的とする。
上記課題を解決するため、本発明に係る情報処理装置は、命令列中の各命令を逐次解読して実行するCPUと、前記CPUと第1バス及び第2バスで接続され、演算に係るデータを格納するための1以上のレジスタを有し、前記CPUが解読中の命令を共に解読して、当該命令に係る演算を前記CPUが前記第1バスに出力したデータに基づいて実行し、演算結果を前記第2バスに出力する拡張演算器とから構成される情報処理装置であって、前記CPUは、解読対象の命令が、前記拡張演算器のレジスタ内のデータを取得するための取得命令であったときには、前記拡張演算器のレジスタを指定するためのレジスタ情報を前記第1バスに出力し、前記第2バスを介して当該レジスタに格納されていたデータを取得する情報取得手段を備え、前記拡張演算器は、解読対象の命令が前記取得命令であったときには、前記第1バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを退避させるレジスタを特定する退避レジスタ特定手段と、前記退避レジスタ特定手段により特定されるレジスタ内のデータを前記第2バスに出力するデータ出力手段とを備えることを特徴としている。
上述のような構成によって、CPUから第1バスに出力されるレジスタ情報に基づいて、拡張演算器はレジスタを特定し、特定されたレジスタからのデータの取得を、1つの取得命令で実現できる。この構成によれば、レジスタからデータを取得するための拡張演算器が実行できる命令である拡張演算命令としては、1つだけであるので、最小限の命令数で拡張演算器の全てのレジスタからのデータの退避を実行できる。
また、前記情報処理装置はさらに、前記拡張演算器における演算の結果としてのフラグが前記拡張演算器から前記CPUに出力されるための信号線を備え、前記CPUは、さらに、前記信号線を介して、拡張演算器からデータの取得が終了したかどうかを示すフラグを受信し、保持していたフラグを受信したフラグで書き換える保持手段を備え、前記レジスタ情報は、レジスタを指定するためのレジスタ番号であり、前記情報取得手段は、前記レジスタ番号を出力する都度、前記レジスタ番号に1加算して、前記第1バスに出力するレジスタ番号出力手段を備え、前記拡張演算器は、さらに、前記拡張演算器からデータの退避が必要なレジスタの合計数と、前記第1バスに出力されているレジスタ番号nとを比較し、レジスタ番号nが前記合計数以上である場合に、前記フラグをデータの退避が終了したことを示す情報にして出力する出力手段を備え、前記退避レジスタ特定手段は、前記レジスタ番号に基づいてデータを退避させるレジスタを特定し、前記レジスタ番号出力手段は、前記保持手段が保持しているフラグが、データの退避が終了したことを示す情報に書き換えられているときに、前記第1バスへのレジスタ情報の出力を終了することとしてもよい。
この構成によれば、拡張演算器の各レジスタはレジスタ番号が振られており、この番号をCPUは第1バスに出力し、拡張演算器は、この番号のデータに基づいてレジスタを特定できるという単純な構成で、全てのレジスタからのデータの退避が実現できる。また、レジスタ番号が拡張演算器が保持するレジスタ数と一致すると、その旨を示す信号が拡張演算器からCPUに対して出力されるので、データの退避を終えるタイミングをCPUは、容易に検出することができる。さらに、従来から拡張演算器で行われた演算の演算結果に係るデータ、例えば演算結果の正負のデータ、をCPUが保持するフラグレジスタに格納していたが、このフラグレジスタを用いて、データの退避が終了したかどうかを示すフラグとしても利用しているので、資源の有効活用を実現できている。
また、前記第1バスは、少なくとも、第1のデータを転送するための第1入力バスと、第2のデータを転送するための第2入力バスとから構成され、前記CPUは、さらに、前記情報取得手段により前記第2バスから取得されるデータを、逐次、格納アドレス値を所定値ごとに加算して、メモリに記録する記録手段と、解読対象の命令が、前記取得命令により取得した一のレジスタからのデータを、当該一のレジスタに格納しなおすための格納命令であった場合には、当該一のレジスタから退避させていたデータを前記メモリから読み出し、読み出したデータを前記第1入力に、当該一のレジスタを指定するレジスタ番号を前記第2入力バスに出力する格納指示手段とを備え、前記拡張演算器は、さらに、解読対象の命令が、前記格納命令であった場合には、前記第1バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを格納させるレジスタを特定する格納レジスタ特定手段と、前記特定手段により特定されるレジスタに、前記第1バスを介して取得したデータを格納する格納手段とを備えることとしてもよい。
この構成によれば、一度退避させたデータを、元通りに再格納することができ、取得命令により退避させたデータを、取得命令を実行する前の状態にもどすことを格納命令というひとつの拡張演算命令により実現できる。
また、前記拡張演算器は、さらに、前記レジスタの個数を示すレジスタ数を記憶するレジスタ数記憶手段と、前記CPUに対して前記レジスタ数を前記第2バスに出力するレジスタ数出力手段と、解読対象の命令が前記格納命令であったときに、前記第1バスを介して得られた数値で指定されるレジスタに、前記第1バスを介して得られるデータを格納するデータ格納手段とを備え、前記CPUは、さらに、前記レジスタ数出力手段により出力された前記レジスタ数を記憶するレジスタ数記憶手段を備え、前記レジスタ情報は、レジスタを指定するための番号であり、前記情報取得手段は、前記番号を1ずつ加算して、逐次前記第1バスにレジスタ数と、データを出力する第2レジスタ数出力手段を備え、前記第2レジスタ数出力手段は、前記番号と前記レジスタ数とが一致した数値を最後に、前記第1バスへのレジスタ数の出力を終了することとしてもよい。
これにより、拡張演算器はCPUに対して備えているレジスタの個数を示す情報を伝達するので、CPUは、拡張演算器に教示してもらわずとも、取得命令により、いくつのレジスタからのデータの退避を実行すればよいのか認識し、過不足なく全てのレジスタのデータからの退避を実現できる。
また、前記レジスタ数出力手段は、前記レジスタ数を情報処理装置を初期化した時に前記CPUに対して出力することとしてよい。
これにより、CPUは、情報処理装置のリセット時、例えば、起動時やユーザによりリセットが実行されたタイミングで、拡張演算器からレジスタ数のデータを取得することができる。リセット時には、拡張演算器では演算が実行されておらず、演算に関わるデータが無いので、このときに演算結果を格納するためのレジスタにレジスタ数の情報を格納し、そして、そこから出力されたデータをCPUが記憶する。リセット時にレジスタ数のデータがCPUに伝達されるので、いつでも拡張演算器からのデータの退避が実行できるようになり、効率がよい。
また、前記拡張演算器は、さらに、前記拡張演算器に備えられている演算器の種類を示す演算器情報を出力する演算器情報出力手段を備え、前記CPUは、さらに、前記演算器情報を記憶する演算器情報記憶手段と、前記演算器情報に基づいて出力するレジスタ情報を決定する決定手段とを備え、前記情報取得手段は、前記決定手段により決定されたレジスタ情報の前記第1バスに出力することとしてよい。
これにより、CPUは、拡張演算器から搭載されている演算器がどのような演算器であるかの情報に基づいて、CPUは、拡張演算器に対してレジスタからのデータの退避を実行するためのレジスタ情報を無駄なく出力することができる。
CPUは、拡張演算器において、どのような演算器が搭載されるかの情報を持っておらずとも、その情報を得ることができるようになる。また演算器は演算の種類に応じて必要とするレジスタ数は異なってくるが、演算器の情報により、そのレジスタ数を特定することができるようになる。
また、前記演算器情報出力手段は、前記演算器情報を情報処理装置のリセット時に前記CPUに対して出力することとしてよい。
これにより、CPUは、情報処理装置のリセット時、例えば、起動時やユーザによりリセットが実行されたタイミングで、拡張演算器から演算器情報のデータを取得することができる。リセット時には、拡張演算器では演算が実行されておらず、演算に関わるデータが無いので、このときに演算結果を格納するためのレジスタに演算器情報を格納し、そして、そこから出力されたデータをCPUが記憶する。リセット時に演算器情報がCPUに伝達されるので、いつでも拡張演算器からのデータの退避が実行できるようになり、効率がよい。
また、前記情報処理装置は、実行していた処理に対して割込みが発生した場合に前記取得命令を実行し、当該割込みには、当該割込みにおいて実行する処理内容に応じて割込みレベルが設定されており、前記拡張演算器は、前記割込みレベルに応じて、データを退避させるレジスタ数を決定する決定手段と、前記取得命令に応じて、前記決定手段により決定されたレジスタ数に基づいて、データを出力するレジスタを決定するレベル対応決定手段を供え、前記出力手段は、前記決定手段により決定されたレジスタ数と、前記レジスタ番号とが一致したときに、前記フラグをデータの退避が終了したことを示す情報にして出力することとしてよい。
これにより、情報処理装置は割込みレベルに応じたデータの退避が実行できるようになる。割込み処理では、割込みレベルに応じて使用する演算器が予め定められているので、割込みレベルによっては、その割込み処理の中で使用しない演算器もある。すると、使用しない演算器に係るレジスタからデータの退避を行うことは無駄になるので、本構成により、その無駄を回避することができ、処理の効率化を図ることができる。
また、前記拡張演算器は、第1のタスクと第2のタスクとを切り替えて実行することが可能な演算器であり、前記拡張演算器は、さらに、第1のタスクを実行中に第2のタスクに切り替える場合であって、第1のタスクにおいて実行した演算に係るデータがレジスタに格納されている場合に、前記CPUに対して割込みの発生を要求する割込み要求手段を備え、前記CPUは、前記割込み要求に対応して割込みを発生させ、当該割込みに応じて前記CPUと前記拡張演算器とは前記取得命令を実行することとしてよい。
拡張演算器では、複数の異なるタスクを切り替えながら実行することが考えられるが、これにより、一のタスクの実行中において演算を実行した場合にデータを退避する必要があることがある。第1のタスクの演算結果がレジスタに格納されている状態で、第2のタスクに切り替えたい場合などである。このような場合に、拡張演算器からCPUに対して割込みを要求することで、当該割込みをトリガとしてデータの退避を実行し、各タスクにおける演算結果のデータを損なうことなく、タスクの切り替えを実行することができる。
また、前記拡張演算器は、さらに、演算を実行した否かを示す演算実行情報を記憶する演算実行情報記憶手段と、前記取得命令を解読したときに、前記演算実行情報を前記CPUに出力する演算実行情報出力手段を備え、前記CPUは、前記取得命令を解読した場合であって、前記演算実行情報が前記拡張演算器において演算が実行されていることを示していたときには、拡張演算器のレジスタからのデータの取得を実行し、前記演算実行情報が前記拡張演算器において演算が実行されていることを示していたときには、前記拡張演算器のレジスタからのデータの取得を実行しないこととしてよい。
拡張演算器において、演算を実行しておらず、演算に係るデータがレジスタに格納されていない場合などには、拡張演算器のレジスタからのデータの退避を実行することは、無駄な処理となるが、本構成により、この無駄を回避できる。
また、前記演算情報実行記憶手段は、さらに、前記拡張演算器において各レジスタごとに演算に係るデータを格納しているか否かを示すレジスタ対応演算実行情報を記憶し、前記拡張演算器は、さらに、前記CPUに前記レジスタ対応演算実行情報を出力するレジスタ対応演算実行情報出力手段を備え、前記CPUは、前記レジスタ対応演算実行情報に基づいて、前記取得命令を解読したときにレジスタを指定するレジスタ情報を前記第1バスに出力することとしてよい。
これにより、拡張演算器において、各演算器それぞれが演算を実行しているかどうかに基づいて、対応するレジスタにデータが格納されるかどうかが決定されるので、各レジスタにデータが格納されているかどうかを演算を実行したかどうかにより判断して実行情報を拡張演算器が保持する。そして、割込みが発生した場合により取得命令を実行してデータを退避させる場合にCPUは、実行情報を取得して、演算を実行して、レジスタにデータが格納されているレジスタに対してのみ取得命令を実行してデータを退避させることができる。これにより、データを格納していないレジスタに対して取得命令を実行するという無駄が発生せず、処理の効率化を図ることができる。
以下、本発明の一実施形態である情報処理装置について図面を用いて説明する。
<実施の形態1>
<構成>
図1は、本発明に係る情報処理装置の機能構成を示した機能構成図である。図1に示すように情報処理装置150は、CPU(Central Processing Unit)100と、拡張演算器110と、ROM(Read Only Memory)130と、RAM(Random Access Memory)140とを含んで構成される。ここで、情報処理装置150は、32ビットで動作するマイクロコンピュータである。
CPU100は、命令アドレスを出力し、ROM130から供給される命令によって各種情報処理を実行する機能を有し、CPU命令デコーダ101と、フラグレジスタ102と、スタックポインタ格納レジスタ(SP)103と、汎用レジスタ104と、第1データ入力バス120と、第2データ入力バス121と、データ出力バス122とを含んで構成される。第1データ入力バス120と、第2入力データバス121と、データ出力バス122とは、それぞれ32ビットのデータラインである。
CPU命令デコーダ101は、ROM130から供給される命令をデコードし、デコードした命令の内容に基づいて、CPU100内部の各回路に各種制御信号を出力する機能を有する。なお、図中において、CPU命令デコーダ101から出されている複数の矢印は、CPU命令デコーダ101がCPU100内全体に対して制御信号を出力できることを示している。直接全ての機能部に対して矢印を接続しなかったのは、図面を見やすくするためである。
フラグレジスタ102は、CPU100及び拡張演算器110の演算フラグを格納する機能を有する。また、フラグレジスタ102は、命令実行中に割込みが発生した場合に拡張演算器のレジスタからデータの退避が終了したか否かを示すフラグを格納する機能も有する。また、フラグレジスタ102は、割込みの際に拡張演算器のレジスタから退避させたデータを再度格納する場合に、データの再格納が終了したかどうかを示すフラグを格納する機能を有する。
スタックポインタ格納レジスタ103は、CPU命令デコーダ101から供給される制御信号に応じて保持する値をRAM140へアドレス値として出力する機能を有する。また、スタックポインタ格納レジスタ103は、CPU命令デコーダ101から供給される制御信号に応じて保持する値に定数を加算、あるいは減算して格納しなおす機能も有する。
汎用レジスタ104は、CPU100及び拡張演算器110の演算入出力値を格納する機能を有する。汎用レジスタ104の各レジスタは、32ビットのデータを格納する機能を有する。
拡張演算器110は、ROM130から供給される命令によって各種情報処理を実行する機能を有し、拡張演算器命令デコーダ111と、第1演算器112と、第1演算結果格納レジスタ113と、第2演算器114と、第2演算結果格納レジスタ115と、セレクタ116と、搭載演算器情報出力回路117と、論理和回路118とを含んで構成される。
拡張演算器命令デコーダ111は、ROM130から供給される命令をデコードし、デコードした命令の内容に基づいて、拡張演算器110内部の各回路に各種制御信号を出力する機能を有する。なお、図中において、拡張演算器命令デコーダ111から出されている複数の矢印は、拡張演算器命令デコーダ111が拡張演算器110内全体に対して制御信号を出力できることを示している。直接全ての機能部に対して矢印を接続しなかったのは、図面を見やすくするためである。
第1演算器112は、乗算器である。第1演算器112は、拡張演算器命令デコーダ111から供給される制御信号によって第1データ入力バス120及び第2データ入力バス121によって転送されたデータを取得し、第1データ入力バス120と第2データ入力バス121とから得られた2つの値の乗算演算を行う機能を有する。32ビットのデータ2つの乗算結果は、最大で64ビットになるので、第1演算器112は、64ビット中、上位32ビットの演算結果を第1演算結果格納レジスタ113に格納し、64ビット中、下位32ビットの演算結果をセレクタ116に出力する。また、第1演算器112は、演算の結果が負であることを示す等の演算結果フラグを論理和回路118に出力する。また、第1演算器112は、拡張演算器命令デコーダ111からの制御信号に基づいて、第1演算結果格納レジスタ113からデータを出力したり、第2データ入力バス121の値を格納する機能も有する。
第1演算結果格納レジスタ113は、第1演算器112における演算に係るデータを格納する機能を有する。
第2演算器114は、除算器である。第2演算器114は、拡張演算器命令デコーダ111から供給される制御信号によって第1データ入力バス120及び第2データ入力バス121によって転送されたデータに基づく除算演算を行う機能を有する。第2演算器114は、剰余を第2演算結果格納レジスタ115に出力し、商をセレクタ116に出力する。また、第2演算器114は、演算のオーバーフローを示す等の演算結果フラグを論理和回路118に出力する。
第2演算結果格納レジスタ115は、第2演算器114における演算に係るデータを格納する機能を有する。
セレクタ116は、拡張演算器命令デコーダ111から供給される制御信号によって第1演算器112の演算結果、第1演算結果格納レジスタ113の出力値、第2演算器114の演算結果及び第2演算結果格納レジスタ115の出力値のいずれかを選択し選択した値をデータ出力バス122に出力する。
搭載演算器情報出力回路117は、拡張演算器110が搭載する演算器個数(本実施の形態の場合2個)の情報を保持し、拡張演算器命令デコーダ110から供給される制御信号によって第1データ入力バス120から入力した値と保持する演算器個数とを比較し、同じもしくは入力した値のほうが大きい場合にフラグ値1を出力し、入力した値のほうが小さい場合にフラグ値0を出力する機能を有する。なお、搭載演算器情報出力回路117は、演算器の個数として、実質的には、演算器個数「2」より、1少ない「1」を保持している。これは、「0」を一つの値として考慮しているためである。
論理和回路118は、第1演算器112から出力される演算結果フラグ、第2演算器114から出力される演算結果フラグ及び搭載演算器情報出力回路117の出力値の論理和を出力する機能を有する。
以上が、情報処理装置150の各部の機能の説明である。
<コマンド>
では、ここから、CPU命令デコーダ101及び拡張演算器命令デコーダ111によってデコードされ、実行される各種命令について説明する。
<拡張演算命令>
まず、CPU100及び拡張演算器110両方に読み出され実行される拡張演算命令について説明する。
図2は、CPU100と拡張演算器110とがROM130から読み出し実行する拡張演算命令とCPU110と拡張演算器110の動作の対応を示した表である。当該表に基づいて、各命令の内容と、各命令実行時の、CPU100と拡張演算器110との動作について説明する。上述の取得命令は、ここの「GETACX」が該当し、格納命令は、ここの「PUTACX」命令が該当する。
<MULQ Dm,Dn命令>
「MULQ Dm,Dn」命令は、拡張演算器110が乗算を実行するための拡張演算命令である。
「MULQ Dm,Dn」命令をROM130からCPU100が読み出すことにより、CPU命令デコーダ101は、「MULQ Dm,Dn」命令をデコードしCPU100内部の各回路に制御信号を出力する。ここでm及びnは命令のオペランドで指定される汎用レジスタ104のレジスタ番号である。また、「Dm」は汎用レジスタ104のm番目のレジスタが保持する値のことであり、「Dn」は汎用レジスタ104のn番目のレジスタが保持する値のことである。「m」、「n」、「Dm」、「Dn」については以降同様とする。
また、CPU命令デコーダ101と同じタイミングで拡張演算器命令デコーダ111は「MULQ Dm,Dn」命令をROM130から読み出してデコードする。そして拡張演算器命令デコーダ111は、拡張演算器110内部の各回路に制御信号を出力する。
各制御信号に従い、まず、汎用レジスタ104は、Dmを第1データ入力バス120に出力し、Dnを第2データ入力バス121に出力する。
第1演算器112は、第1データ入力バス120のDmを読み取り、第2データ入力バス121のDnを読み取る。そして第1演算器112は、Dmを被乗数、Dnを乗数とする乗算演算を行う。第1演算器112は、積の上位ビット側の結果を第1演算結果格納レジスタ113に格納し、積の下位ビット側の結果をセレクタ116に出力し、演算結果フラグを論理和回路118に出力する。
セレクタ116は、拡張演算器命令デコーダ111から出力される制御信号によって第1演算器112の出力を選択してデータ出力バス122に出力する。汎用レジスタ104は、データ出力バス122に出力された積の下位ビット側の結果をn番目のレジスタに保持する。
論理和回路118は、第1演算器113の演算結果フラグ、第2演算器114の演算結果フラグ及び搭載演算器情報出力回路117の出力の論理和演算を行い、この場合第1演算器112の演算結果フラグを出力する。そして、フラグレジスタ106は拡張演算器110から出力される第1演算器112の演算結果フラグを格納する。
以上が、「MULQ Dm,Dn」命令の説明である。
<DIVQ Dm,Dn命令>
「DIVQ Dm,Dn」命令は、拡張演算器110が除算を実行するための拡張演算命令である。
「DIVQ Dm,Dn」命令をROM130からCPU100が読み出すことにより、CPU命令デコーダ101は、「MULQ Dm,Dn」命令をデコードしCPU100内部の各回路に制御信号を出力する。
また、CPU命令デコーダ101とほぼ同じタイミングで拡張演算器命令デコーダ111は、「DIVQ Dm,Dn」命令をROM130から読み出してデコードする。そして拡張演算器命令デコーダ111は、拡張演算器110内部の各回路に制御信号を出力する。
汎用レジスタ104は、Dmを第1データ入力バス120に出力し、Dnを第2データ入力バス121に出力する。
第2演算器114は、第1データ入力バス120のDmを読み取り、第2データ入力バス121のDnを読み取る。そして、第2演算器114は、Dmを被除数とし、Dnを除数とする除算を行う。第2演算器114は、演算結果の剰余を第2演算結果格納レジスタ115に格納し、商をセレクタ116に出力し、演算結果フラグを論理和回路117に出力する。
セレクタ116は、拡張演算器命令デコーダ111から出力される制御信号によって第2演算器114の出力を選択してデータ出力バス122に出力する。汎用レジスタ104は、データ出力バス122に出力された商をn番目のレジスタに保持する。
論理和回路118は、第1演算器112の演算結果フラグ、第2演算器114の演算結果フラグ及び搭載演算器情報出力回路117の出力の論理和演算を行い、この場合第2演算器115の演算結果フラグを出力する。そして、フラグレジスタ102は、拡張演算器110から出力された第2演算器114の演算結果フラグを格納する。
以上が、「DIVQ Dm,Dn」命令の説明である。
<GETACX Dm,Dn命令>
「GETACX Dm,Dn」命令は、割込み発生時に拡張演算器110のレジスタからデータを退避させるための拡張演算命令である。
「GETACX Dm,Dn」命令をROM130からCPU100が読み出すことにより、CPU命令デコーダ101は、「GETACX Dm,Dn」命令をデコードし、CPU100内部の各回路に制御信号を出力する。
また、CPU命令デコーダ101と同じタイミングで拡張演算器命令デコーダ111は「GETACX Dm,Dn」命令をROM130から読み出してデコードする。そして拡張演算器命令デコーダ111は、拡張演算器110内部の各回路に制御信号を出力する。
制御信号に基づいて、まず、汎用レジスタ104は、Dmを第1データ入力バス120に出力し、Dnを第2データ入力バス121に出力する。
これ以降の動作について、第1演算結果格納レジスタ113から値を読み出す場合と、第2演算結果格納レジスタ115の値を読み出す場合との2通りの場合があるので、それぞれの場合の情報処理装置150の動作を分けて説明する。
(1)第1演算結果格納レジスタ113から値を読み出す場合
第1演算器112は、第1データ入力バス120のDmが第1演算器112を表す「0」を読み込む。第1演算器112は、第1演算結果格納レジスタ113が保持する値をセレクタ116に出力させる。セレクタ116は、拡張演算器命令デコーダ111から出力される制御信号によって第1演算結果格納レジスタ113の出力を選択してデータ出力バス122に出力する。
搭載演算器情報出力回路117は、拡張演算器命令デコーダ111から供給された制御信号によって第1データ入力バス120から取得した値と保持する演算器個数とを比較し、「0」は「1」より小さいのでフラグ値0を出力する。論理和回路118は、第1演算器112の演算結果フラグ、第2演算器114の演算結果フラグ及び搭載演算器情報出力回路117の出力の論理和演算を行い、この場合、搭載演算器情報出力回路117のフラグ値「0」を出力する。
データ出力バス122は、セレクタ116から出力される第1演算結果格納レジスタ113の出力値をCPU100の汎用レジスタ104に転送する。汎用レジスタ104は、データ出力バス122の値を入力してn番目のレジスタに保持する。フラグレジスタ102は、拡張演算器110から出力される搭載演算器情報出力回路117のフラグ値「0」を演算結果フラグに格納する。
(2)第2演算結果格納レジスタ115に値を書込む場合
第2演算器114は、第1データ入力バス120のDmが第2演算器114を表す「1」を読み込む。第2演算結果格納レジスタ115は、保持する値をセレクタ116に出力する。セレクタ116は、拡張演算器命令デコーダ111から出力される制御信号によって第2演算結果格納レジスタ115の出力を選択してデータ出力バス122に出力する。
搭載演算器情報出力回路117は、拡張演算器命令デコーダ111から供給される制御信号によって第1データ入力バス120から入力した値と保持する演算器個数とを比較し同じなのでフラグ値1を出力する。論理和回路118は、第1演算器112の演算結果フラグ、第2演算器114の演算結果フラグ及び搭載演算器情報出力回路117の出力の論理和演算を行い、この場合搭載演算器情報出力回路117のフラグ値「1」を出力する。
データ出力バス122は、セレクタ116から出力される第2演算結果格納レジスタ115の出力値をCPU100の汎用レジスタ104に転送する。汎用レジスタ104は、データ出力バス122の値を入力してn番目のレジスタに保持する。
フラグレジスタ102は、拡張演算器110から出力される搭載演算器情報出力回路117のフラグ値「1」を演算結果フラグに格納する。
以上が、本実施の形態に係る各拡張演算命令の内容である。
<PUTACX Dm,Dn命令>
「PUTACX Dm,Dn」命令は、割込み発生時に拡張演算器110のレジスタから退避させたデータを再度格納しなおすための拡張演算命令である。
「PUTACX Dm,Dn」命令をROM130からCPU100が読み出すことにより、CPU命令デコーダ101は、「PUTACX Dm,Dn」命令をデコードしCPU100内部の各回路に制御信号を出力する。
また、CPU命令デコーダ101と同じタイミングで拡張演算器命令デコーダ111は「PUTACX Dm,Dn」命令をROM130から読み出してデコードする。そして拡張演算器命令デコーダ111は、拡張演算器110内部の各回路に制御信号を出力する。
制御信号に基づいて、まず、汎用レジスタ104は、Dmを第1データ入力バス120に出力し、Dnを第2データ入力バス121に出力する。
これ以降の動作について、第1演算結果格納レジスタ113に値を書き込む場合と、第2演算結果格納レジスタ115に値を書き込む場合との2通りの場合があるので、それぞれの場合の情報処理装置150の動作を分けて説明する。
(1)第1演算結果格納レジスタ113に値を書込む場合
第1演算器112は、第1データ入力バス120のDmが第1演算器112を表す「0」を読み込んだ場合に、第2データ入力バス121のDnを読み取る。そして、Dnを第1演算結果格納レジスタ114に格納する。
搭載演算器情報出力回路117は、拡張演算器命令デコーダ111から供給される制御信号によって第1データ入力バス120から入力された値と保持している演算器個数とを比較し、「0」は「1」より小さいのでフラグ値「0」を出力する。
論理和回路118は、第1演算器112の演算結果フラグ、第2演算器114の演算結果フラグ及び搭載演算器情報出力回路117の出力の論理和演算を行い、この場合、搭載演算器情報出力回路117のフラグ値0を出力する。
フラグレジスタ102は、拡張演算器110から出力された搭載演算器情報出力回路117のフラグ値0を演算結果フラグに格納する。当該フラグにより、CPU100は、データの再格納がまだ終了していないことを認識できる。
(2)第2演算結果格納レジスタ115に値を書込む場合
第2演算器114は第1データ入力バス120のDmが第2演算器114を表す「1」を読み込んだ場合に、第2データ入力バス122のDnを第2演算結果格納レジスタ115に格納する。
搭載演算器情報出力回路117は、拡張演算器命令デコーダ111から供給される制御信号によって第1データ入力バス120から読み取った値と保持する演算器個数とを比較し、同じなのでフラグ値「1」を出力する。
論理和回路118は第1演算器112の演算結果フラグ、第2演算器114の演算結果フラグ及び搭載演算器情報出力回路117の出力の論理和演算を行い、この場合、搭載演算器情報出力回路117のフラグ値「1」を出力する。
そして、フラグレジスタ102は、拡張演算器110から出力される搭載演算器情報出力回路117のフラグ値「1」を演算結果フラグに格納する。フラグレジスタ102のフラグ値が「1」になったことで、CPU100は、退避させていた全てのデータの再格納が終了したことを認識できる。
<CPU実行命令>
ここから、CPU100においてのみ実行されるCPU実行命令について説明する。
次に、図4を用いて、CPU100からデータの退避、及び復帰に用いられるCPU実行命令のニーモニックと、CPUの動作の一例を示す図である。以下、CPUがROM130から読み込み、実行する各CPU実行命令について説明する。なお、CPU実行命令においては、「SP」と「(SP)」と区別して記載している。「SP」は、直接スタックポインタ格納レジスタ107に格納されている値に対する操作を実行する場合に用い、「(SP)」は、RAM140の当該アドレス値で指定されるアドレスに対するデータの読み出しあるいは書込みの操作を実行する場合に用いる。
<MOV Dm,(SP)命令>
「MOV Dm,(SP)」命令は、汎用レジスタ104のm番目のレジスタに格納されている値をスタックポインタ格納レジスタ102に格納されているアドレス値で指定されるRAM140のアドレスに格納するための命令である。
「MOV Dm,(SP)」命令は、ROM130からCPU100に読み出され、CPU命令デコーダ101によりデコードされる。デコードした内容に基づいて、CPU命令デコーダ101は、CPU100内部の各回路に制御信号を出力する。
汎用レジスタ104は、Dmを第1データ入力バス120に出力する。スタックポインタ格納レジスタ103は、保持するアドレス値をRAM130に出力する。RAM140は、スタックポインタ格納レジスタ103から出力されたアドレス値の示す領域に第1データ入力バス120を介して取得したデータを書込む。
以上が、「MOV Dm,(SP)」命令の説明である。
<MOV (SP),Dn命令>
「MOV (SP),Dn」命令は、スタックポインタ格納レジスタ102に格納されているアドレス値で指定されるRAM140のアドレスに格納されている値を、汎用レジスタ104のn番目のレジスタに格納させるための命令である。
「MOV (SP),Dn」命令は、ROM130からCPU100に読み出され、CPU命令デコーダ101によりデコードされる。デコードした内容に基づいて、CPU命令デコーダ101は、CPU100内部の各回路に制御信号を出力する。
当該制御信号に基づいて、まず、スタックポインタ格納レジスタ103は、保持するアドレス値をRAM140に出力する。RAM140は、スタックポインタ格納レジスタ103からアドレスを入力しアドレス値の示す領域のデータをデータ出力バス122に出力する。そして、汎用レジスタ104は、データ出力バス122の値を読み取ってn番目のレジスタに保持する。
以上が、「MOV (SP),Dn命令」の説明である。
<MOV #<即値>,Dn命令>
「MOV #<即値>,Dn」命令は、ROM130から出力される値を、汎用レジスタ104のn番目のレジスタに格納するための命令である。
「MOV #<即値>,Dn」命令は、ROM130からCPU100に読み出され、CPU命令デコーダ101によりデコードされる。デコードした内容に基づいて、CPU命令デコーダ101は、CPU100内部の各回路に制御信号を出力する。汎用レジスタ104は、データ出力バス122の値を読み取ってn番目のレジスタに保持する。
以上が、「MOV #<即値>,Dn」命令の説明である。
<INC Dm命令>
「INC Dm」命令は、汎用レジスタ104のm番目のレジスタに格納されている値をインクリメントするための命令である。
「INC Dm」命令は、ROM130からCPU100に読み出され、CPU命令デコーダ101によりデコードされる。デコードした内容に基づいて、CPU命令デコーダ101は、CPU100内部の各回路に制御信号を出力する。そして、汎用レジスタ104は、m番目のレジスタが保持していた値に1加算した値を保持しなおす。
以上が、「INC Dm」命令の説明である。
<INC SP命令>
「INC SP」命令は、スタックポインタ格納レジスタ103に格納されている値をインクリメントするための命令である。
「INC SP」命令は、ROM130からCPU100に読み出され、CPU命令デコーダ101によりデコードされる。デコードした内容に基づいて、CPU100内部の各回路に制御信号を出力する。スタックポインタ格納レジスタ103は、保持していたアドレス値に定数値を加算した値を保持しなおす。
以上が、「INC SP」命令の説明である。
<Bcc <ラベル>命令>
「Bcc <ラベル>」命令は、フラグレジスタ103に格納されている値に基づいて分岐を実行するための命令である。
「Bcc <ラベル>」命令は、ROM130からCPU100に読み出され、CPU命令デコーダ101によりデコードされる。デコードされた内容に基づいてCPU命令デコーダ101は、CPU100内部の各回路に制御信号を出力する。CPU100は、フラグレジスタ103の保持する値が「0」の場合に<ラベル>のアドレス値をROM130に出力することで、当該アドレス値で指定される箇所に分岐を実施する。なお、フラグレジスタ103の保持する値が「1」の場合には分岐を実施しない。
以上が、「Bcc <ラベル>」命令の説明である。
<CLR Dm命令>
「CLR Dm」命令は、汎用レジスタ104のm番目のレジスタの値を初期化するための命令である。
「CLR Dm」命令は、ROM130からCPU100に読み出され、CPU命令デコーダ101によりデコードされる。デコードされた内容に基づいて、CPU命令デコーダ101は、CPU100内部の各回路に制御信号を出力する。汎用レジスタ104は、m番目のレジスタに保持する値をクリアし、「0」値を保持する。
以上が、「CLR Dm」命令の説明である。
<RTI 命令>
「RTI」命令は、割込みにおいて実行した命令が終了したときに、割込みが発生したときに通常処理で実行していたアドレス値に分岐するための命令である。
「RTI」命令は、ROM130からCPU100に読み出され、CPU命令デコーダ101によりデコードされる。デコードした内容に基づいて、CPU命令デコーダ101は、RTI命令をデコードしCPU100内部の各回路に制御信号を出力する。CPU100は、割込み発生時のアドレス値をROM130に出力することで分岐を実施する。
以上が、「RTI」命令の説明である。
<動作>
ここから、情報処理装置150の特徴部分である割込み発生時のデータの退避と、再格納における拡張演算器命令デコーダ111の動作について説明したのち、具体的な命令列を用いて情報処理装置150の動作を説明する。
まず、「GETACX Dm,Dn」命令実行時の拡張演算器命令デコーダ111の動作を図4のフローチャートに基づいて説明する。
拡張演算器命令デコーダ111は、「GETACX Dm,Dn」命令をROM130から読みだし、デコードする(ステップS401)。
ROM130から取得した命令が、「GETACX Dm,Dn」命令であることを解読した拡張演算器命令デコーダ111は、第1データ入力バス120の値を読み取る(ステップS403)。
拡張演算器命令デコーダ111は、読み取った第1データ入力バス120の値により指定されるレジスタに対して、「GETACX」命令実行を示す制御信号を出力する(ステップS405)。当該制御信号を受け取った演算器は、備えられているレジスタのデータの出力を実行する。
拡張演算器命令デコーダ111は、セレクタ116に対して、指定したレジスタから出力された値をデータ出力バス122に出力される制御信号を出力する(ステップS407)。これにより、レジスタからのデータが退避される。
以上が、「GETACX」命令を解読して実行する時の拡張演算器命令デコーダ111の動作である。
次に、「PUTACX Dm,Dn」命令実行時の拡張演算器110の動作を図5のフローチャートに基づいて説明する。
拡張演算器命令デコーダ111は、「PUTACX Dm,Dn」命令をROM130から読みだし、デコードする(ステップS501)。
ROM130から取得した命令が、「PUTACX Dm,Dn」命令であることを解読した拡張演算器命令デコーダ111は、第1データ入力バス120の値を読み取る(ステップS503)。
拡張演算器命令デコーダ111は、読み取った第1データ入力バス120の値により指定されるレジスタに対して、PUTACX命令実行を示す制御信号を出力する(ステップS505)。
以上が、GETACX命令解読時の拡張演算器命令デコーダ111の動作である。
最後に、図6に示した具体的な命令列に基づいて情報処理装置150の動作を説明する。図6は、図2、図3で説明した命令を用いたアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。
CPU100は、ROM130に格納された通常処理の命令列600を処理する。CPU100は、通常処理の命令列中の「CLR D2」の命令をROM130から読み込み、汎用レジスタ104の2番目のレジスタに「0」値を保持する。
CPU100と拡張演算器110とは、「MULQ D0,D1」の命令をROM130から読み込む。そして第1演算器112は、第1演算結果格納レジスタ113に積の上位ビット側結果を格納し、積の下位ビット側結果をセレクタ116に出力する。セレクタ116は、第1演算器112から出力されたデータをデータ出力バス122に出力し、汎用レジスタ104は、1番目のレジスタに積の下位ビット側結果を保持する。フラグレジスタ102には第1演算器112から出力された演算結果フラグが保持される。
CPU100は、上記「MULQ D0,D1」の命令実行後に、割込みを受付けて、割込みハンドラの命令列610のハンドラ先頭に分岐する。
まず、CPU100は、割込みハンドラの命令列中の汎用レジスタ104の格納値をRAM140に退避する処理を行う。この時汎用レジスタ104の2番目に格納されている「0」値もRAM140に退避される。なお、汎用レジスタに格納されている値と格納されていたレジスタの番号も対応付けて記憶される。また、退避させたデータを元通り戻すために、この時点でスタックポインタ格納レジスタに格納されていたアドレス値をSP初期値としてRAM140に記憶しておく。
CPU100は、「CLR D0」の命令をROM130から読み込み、汎用レジスタ104の0番目のレジスタに「0」値を保持する。
CPU100は、「INC SP」の命令をROM130から読み込み、スタックポインタ格納レジスタ103に保持されているアドレス値に定数値を加算した値を保持しなおす。
CPU100と拡張演算器110は「GETACX D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113が保持する値が、汎用レジスタ104の1番目のレジスタに保持され、搭載演算器情報出力回路117のフラグ値「0」がフラグレジスタ102に格納される。
CPU100は、「MOV D1,(SP)」 の命令をROM130から読み込んで実行する。CPU100は、RAM140のスタックポインタ格納レジスタ103に格納されているアドレス値で指定されるアドレスに、汎用レジスタ104の1番目のレジスタに保持されている値を書き込む。
CPU100は、「INC D0」の命令をROM130から読み込んで実行する。汎用レジスタ104の0番目のレジスタが保持していた値に1を加算した値を保持しなおす。ここで、D0は、「1」を保持することになる。
CPU100は、「Bcc <ラベル1>」の命令をROM30から読み込んで実行する。フラグレジスタ102に格納される値は「0」であり、「1」ではないので<ラベル1>に分岐する。
CPU100は、「INC SP」の命令をROM130から読み込んで実行する。スタックポインタ格納レジスタ103は保持するアドレス値に定数値を加算した値を保持しなおす。
CPU100と拡張演算器110は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。第2演算結果格納レジスタ115が保持する値を汎用レジスタ104の1番目のレジスタに保持する。搭載演算器情報出力回路117は第1データ入力バス120の値「1」を読み取り、保持する演算器情報と比較し、一致するので、フラグ値「1」をフラグレジスタ102に出力する。そしてフラグレジスタ102は、フラグ値「1」を記憶する。
CPU100は、「MOV D1,(SP)」 の命令をROM130から読み込んで実行する。CPU100は、RAM130のスタックポインタ格納レジスタ102に格納されるアドレス値により指定されるアドレスに、汎用レジスタ104の1番目のレジスタに保持されている値を書き込む。
CPU100は、「INC D0」の命令をROM130から読み込んで実行する。汎用レジスタ104は、0番目のレジスタが保持していた値に1を加算した値を保持しなおす。
CPU100は、「Bcc <ラベル1>」の命令をROM130から読み込んで実行する。CPU100は、フラグレジスタ102に格納される値が、「1」であるので、<ラベル1>に分岐しない。
そして、CPU100は、以降割込みハンドラの命令列において実際に実行されるべき命令を実行する。
CPU100は、割込みハンドラの命令列の実行を完了した後に、「CLR D0」の命令を解読し、汎用レジスタ104の0番目のレジスタに「0」値を格納する。また、CPU100は、RAM140に記憶しておいたSP初期値をスタックポインタ格納レジスタ102に上書きする。
CPU100は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ102は、保持しているアドレス値に定数値を加算した値を保持しなおす。
CPU100は、「MOV (SP),D1」 の命令をROM130から読み込んで実行する。RAM140のスタックポインタ格納レジスタ102に格納されるアドレス値により指定されるアドレスに格納されているデータを、汎用レジスタ104の1番目のレジスタに書き込む。
CPU100と拡張演算器110は、「PUTACX D0,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の1番目のレジスタが保持していた値が、第1演算結果格納レジスタ114に格納される。また、搭載演算器情報出力回路117は、保持する演算器個数「1」と第1データ入力バス120の値「0」とを比較し、「0」は「1」より小さいので、フラグ値「0」をフラグレジスタ102に出力する。そして、フラグレジスタ102は、フラグ値「0」を記憶する。
CPU100は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに保持するアドレス値に1を加算した値を保持する。
CPU100は、「Bcc <ラベル2>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ102に格納されている値が「0」であるので<ラベル2>に分岐する。
CPU100は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ102が保持するアドレス値から定数値を加算した値を保持しなおす。
CPU100は、「MOV (SP),D1」 の命令をROM130から読み込んで実行する。RAM140のスタックポインタ格納レジスタ102に格納されているアドレス値で指定されるアドレスに格納されている値を、汎用レジスタ104の1番目のレジスタに書き込む。
CPU100と拡張演算器110は、「PUTACX D0,D1」の命令をROM130から読み込んで実行する。汎用レジスタ104の1番目のレジスタが保持する値を第2演算結果格納レジスタ115に格納される。また、搭載演算器情報出力回路117は、フラグ値1をフラグレジスタ102に格納する。
CPU100は、「INC D0」の命令をROM130から読み込んで実行する。汎用レジスタ104の0番目のレジスタが保持している値に1を加算した値を保持しなおす。
CPU100は、「Bcc <ラベル2>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ102に格納されている値が「1」であるので<ラベル2>に分岐しない。
CPU100は、RAM140に退避した汎用レジスタ104が保持していた値を、汎用レジスタ104に復帰する処理を行う。この時RAM140に退避させていた汎用レジスタ104の2番目の0値も汎用レジスタ104の2番目のレジスタに格納される。
CPU100は、「RTI」の命令をROM130から読み込んで実行する。その結果、通常処理の命令列600に分岐する。これで、割込み発生時の状態に戻ったことになる。
以上、実施の形態1に示したように、情報処理装置において、割込み発生時に「GETACX Dm,Dn」命令という一つの拡張演算命令だけで、全てのレジスタからのデータの退避を実現でき、また、「PUTACX Dm,Dn」命令という一つの拡張演算命令だけで、退避させたデータをレジスタに格納しなおすことが実現できる。
<実施の形態2>
上記実施の形態1では、拡張演算器110に備えられた拡張演算器情報出力回路が全てのレジスタからのデータの退避、あるいは再格納が終了したことを示すフラグを出力することでCPU100は、レジスタからのデータの退避、再格納がなされたことを認識することができた。
本実施の形態2においては、実施の形態1とは異なる方法で、全てのレジスタからのデータの退避あるいは、再格納がなされたことをCPUが認識することができる手法を示す。当該方法とは、情報処理装置のリセット時に拡張演算器からCPUにレジスタ数を伝達するという手法である。
<構成>
本実施の形態2における情報処理装置250は、ROM130と、RAM140と、CPU200と、拡張演算器210とを含んで構成される。
CPU200は、CPU命令デコーダ101と、スタックポインタ格納レジスタ103と、汎用レジスタ104と、フラグレジスタ202とを含んで構成される。
拡張演算器210は、拡張演算器命令デコーダ111と、第1演算器112と、第2演算器113と、第2演算結果格納レジスタ115と、セレクタ116と、レジスタ数発生器211、第1演算結果格納レジスタ213とを含んで構成される。
なお、上記実施の形態1においては、第1演算器112や、第2演算器113における演算結果フラグを論理和回路118を介して出力する構成を有していたが、本実施の形態2においては、発明の特徴となる部分から外れるため省略している。
また、実施の形態1と同名かつ同じ符号を付した機能部については、実施の形態1と同様の機能を果たすものとしてここでは説明を省略する。
フラグ202は、CPU命令デコーダ101からの制御信号に基づき、CPU200で実行される比較命令の結果に応じて、汎用レジスタ104のD0とD3の比較に基づき、D0の値がD3の値以上であった場合に拡張演算器210の全てのレジスタからデータの退避、あるいは復帰が終了したことを示す「1」を記憶し、D0の値がD3より小さい場合に拡張演算器210の全てのレジスタからデータの退避、あるいは復帰が未終了であることを示す「0」を記憶する機能を有する。
レジスタ数発生器211は、拡張演算器210が備えるレジスタの個数を示すレジスタ数を記憶しており、情報処理装置210がリセットされたタイミングで、保持しているレジスタ数を第1演算格納レジスタ213に出力する機能を有する。
第1演算格納レジスタ213は、実施の形態1に示した第1演算格納レジスタ113が有する機能に加え、レジスタ数発生器から出力されたレジスタ数を保持する機能と、保持しているレジスタ数をセレクタ116に出力する機能も有する。
以上が実施の形態1から変更された実施の形態2における情報処理装置240の機能の説明である。
<コマンド>
ここから、実施の形態1に加えて、実施の形態2において用いられる命令の説明をする。
<CPU実行命令>
図8は、ROM130から読み出され、CPU200からRAM140に対してデータの退避・復帰の際に用いられるCPU実行命令のニーモニック、CPUの動作の一例を示した表である。図8を用いて実施の形態2において用いられる命令について説明する。
<CMP Dm,Dn命令>
「CMP Dm,Dn」命令は、DmとDnとの大小を比較するための命令である。
「CMP Dm,Dn」命令は、ROM130からCPU200に読み出され、CPU命令デコーダ101によりデコードされる。デコードした内容に基づいて、CPU命令デコーダ101は、CPU100内部の各回路に制御信号を出力する。汎用レジスタ104は、m番目のレジスタに保持する値とn番目のレジスタに保持する値とを比較し、一致した場合に「1」値をフラグレジスタ202に格納し、一致しない場合は「0」値をフラグレジスタ202に格納する。フラグレジスタ202は、汎用レジスタ104から出力された比較結果の値を保持する。
以上が、「CMP Dm,Dn」命令の説明である。
<動作>
では、ここから実施の形態2に係る情報処理装置250の動作について、図面に基づいて説明する。
まず、本実施の形態における特徴部分であるリセット時の情報処理装置250の動作について、図9のフローチャートと図8のブロック図とに基づいて説明する。
情報処理装置250は、起動時やユーザからのリセット操作などに基づき、リセットされる(ステップS901)。
拡張演算器210のレジスタ数発生器211は、保持しているレジスタ数の情報を第1演算格納レジスタ213に出力する(ステップS903)。
第1演算格納レジスタ213は、入力されたレジスタ数を保持する(ステップS905)。
拡張演算器命令デコーダ111は、「GETACX」命令を解読し、第1演算器112に対して第1演算格納レジスタ213が保持している値を出力させ、セレクタ116に対して、第1演算器112から出力された値をデータ出力バス122に出力させる(ステップS907)。
拡張演算器命令デコーダ111は、セレクタ116に対して第1演算格納レジスタ113から出力されたデータをデータ出力バス122に出力させる制御信号を出力する(ステップS911)。
そして、CPU200は、データ出力バス122に出力されたレジスタ数の情報を汎用レジスタ104に格納する。
以上が、情報処理装置250のリセット時の動作である。
続いて、本実施の形態2における具体的な動作例を図10に示した命令列を用いて説明する。
図10は、図2、図3、図8で説明した命令を用いたアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。図10において、矢印1001は、情報処理装置250のリセットタイミングを示しており、矢印1002は、通常処理の命令列1000を実行しているときに、割込みが発生したタイミングを示している。
CPU200は、リセット解除後、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに「0」値を保持する。
CPU200は、「GETACX D0,D3」の命令をROM130から読み込んで実行する。その結果、レジスタ数発生器211が出力するレジスタ資源数1を保持する。これにより、第1演算結果格納レジスタ213から出力されたレジスタ数の情報が、汎用レジスタ104の3番目のレジスタに保持される。
CPU200は、ROM130に格納されている通常処理の命令列を処理する。
CPU200は、通常処理の命令列1000中の「CLR D2」の命令をROM130から読み込んで実行する。この結果、汎用レジスタ104の2番目のレジスタに「0」値が保持される。
CPU200は、「MULQ D0,D1」の命令をROM130から読み込んで実行する。第1演算結果格納レジスタ213に積の上位ビット側結果を保持し、汎用レジスタ104の1番目のレジスタに積の下位ビット側結果を保持し、フラグレジスタ102に演算結果フラグを保持する。
CPU200は、上記「MULQ D0,D1」の命令実行後に割込みを受付けて、割込みハンドラの命令列1010のハンドラ先頭に分岐する。
CPU200は、割込みハンドラの命令列中の汎用レジスタ104の格納値をRAM140に退避する処理を行う。この時、汎用レジスタ104の2番目に格納されている「0」値もRAM140に退避される。また、CPU100は、RAM140にその時点におけるスタックポインタ格納レジスタ102に格納されているアドレス値をSP初期値として記憶する。
CPU200は、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに「0」値が保持される。
CPU200は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は保持していたアドレス値に定数値を加算した値を保持しなおす。
CPU200は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。すると、第1演算結果格納レジスタ213が保持する値を汎用レジスタ104の1番目のレジスタに保持する。
CPU200は、「MOV D1,(SP)」 の命令をROM130から読み込んで実行する。その結果、RAM130のスタックポインタ格納レジスタ103に保持されているアドレス値で指定されるアドレスに汎用レジスタ104の1番目のレジスタに保持されている値を書き込む。
CPU200は、「CMP D0,D1」の命令をROM130から読み込んで実行する。CPU200は、D0とD1とが一致しないため、「0」値をフラグレジスタ202に書き込む。
CPU200は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに、保持していた値に1を加算した値を保持しなおす。
CPU200は、「Bcc <ラベル1>」の命令をROM130から読み込んで実行する。その結果、CPU200は、フラグレジスタ202に保持されている値が「0」であるので<ラベル1>に分岐する。
CPU200は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は、保持しているアドレス値に定数値を加算した値を保持しなおす。
CPU200は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。その結果、第2演算結果格納レジスタ115が保持していた値が汎用レジスタ104の1番目のレジスタに保持される。
CPU200は、「MOV D1,(SP)」 の命令をROM130から読み込んで実行する。その結果、CPU200は、RAM140のスタックポインタ格納レジスタ103に格納されるアドレス値により指定されるアドレスに、汎用レジスタ104の1番目のレジスタに保持する値を書き込む。
CPU200は、「CMP D0,D1」の命令をROM130から読み込んで実行する。その結果、D0とD1とが共に「1」であり、一致するため「1」値をフラグレジスタ202に書き込む。
CPU200は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに保持するアドレス値に1を加算した値を保持する。
CPU200は「Bcc <ラベル1>」の命令をROM130から読み込んで実行する。その結果、CPU200は、フラグレジスタ202に格納される値が「1」であるので、<ラベル1>に分岐しない。
CPU200は、割込みハンドラにおいて実際に実行する命令列の実行を完了し、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに「0」値を保持する。また、CPU200は、SP初期値をRAM140から読み出してスタックポインタ格納レジスタ102に上書きする。
CPU200は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は保持しているアドレス値から定数値を加算した値を保持しなおす。
CPU200は、「MOV (SP),D1」 の命令をROM130から読み込んで実行する。その結果、RAM140のスタックポインタ格納レジスタ103に格納されているアドレス値で指定されるアドレスに格納されている値を汎用レジスタ104の1番目のレジスタに読み出す。
CPU200は、「PUTACX D0,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の1番目のレジスタが保持していた値が、第1演算結果格納レジスタ213に格納される。
CPU200は、「CMP D0,D1」の命令をROM130から読み込んで実行する。その結果、D0とD1とが一致しないため、CPU200は、「0」値をフラグレジスタ202に書き込む。
CPU200は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに、汎用レジスタ104の0番目のレジスタが保持していた値に1を加算した値を保持しなおす。
CPU200は、「Bcc <ラベル2>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ202に格納されている値が「0」であるので<ラベル2>に分岐する。
CPU200は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は、保持していたアドレス値から定数値を加算した値を保持しなおす。
CPU200は、「MOV (SP),D1」 の命令をROM130から読み込んで実行する。その結果、RAM140のスタックポインタ格納レジスタ103が保持しているアドレス値で指定されるアドレスに格納されている値を汎用レジスタ104の1番目のレジスタに読み出す。
CPU200は、「PUTACX D0,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の1番目のレジスタが保持していた値が、第2演算結果格納レジスタ115に格納される。
CPU200は、「CMP D0,D1」の命令をROM130から読み込んで実行する。その結果、D0とD1とが一致するため「1」値をフラグレジスタ202に書き込む。
CPU200は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに、汎用レジスタ104の0番目のレジスタが保持している値に1を加算した値を保持しなおす。
CPU200は、「Bcc <ラベル2>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ202に格納されている値が「1」であるので<ラベル2>に分岐しない。
CPU200は、RAM140に退避させていた値を、汎用レジスタ104に復帰する処理を行う。この時、RAM140に退避されていた汎用レジスタ104の2番目の0値も汎用レジスタ104の2番目のレジスタに格納される。
CPU200は、「RTI」の命令をROM130から読み込んで実行する。その結果、通常処理の命令列1000に分岐する。
CPU200は、「GETACX D2,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ213が保持していた値が汎用レジスタ104の2番目のレジスタに保持され、搭載演算器情報出力回路117のフラグ値「0」をフラグレジスタ202に格納する。
以上に説明してきたように、本実施の形態2においては、情報処理装置250がリセットされたタイミングにおいて、レジスタ数発生器211が保持する拡張演算器210に搭載されているレジスタ数の情報が第1演算結果格納レジスタ213に格納される。そしてCPU200は、処理を実行する前に、第1演算結果格レジスタ213に格納された値を獲得することで、拡張演算器210に搭載されているレジスタ数を検知することができ、割込み発生した場合に、レジスタからデータを退避させる際に全てのレジスタに対してデータの退避の指示ができたかどうかを自身で認識することができるようになる。
<実施の形態3>
上記実施の形態2においては、単純にレジスタ数の情報を出力したのみであるが、CPUが拡張演算器に搭載される演算器の種類を予め記憶しておれば、演算器の種類からレジスタ数を決定することができる。そこで、本実施の形態においては、レジスタ数ではなく、拡張演算器に搭載されている演算器の情報をCPUが認識でき、当該認識に基づいて、拡張演算器に搭載されているレジスタ数を特定できる実施の形態を示す。
<構成>
本実施の形態2における情報処理装置350は、ROM130と、RAM140と、CPU300と、拡張演算器310とを含んで構成される。
CPU200は、CPU命令デコーダ101と、スタックポインタ格納レジスタ103と、汎用レジスタ104と、フラグレジスタ202とを含んで構成される。
拡張演算器210は、拡張演算器命令デコーダ111と、第1演算器112と、セレクタ116と、レジスタ数発生器311と、第1演算結果格納レジスタ313と、第3演算器314と、第3演算結果格納レジスタ315とを含んで構成される。
なお、上記実施の形態1においては、第1演算器112や、第2演算器113における演算結果フラグを論理和回路118を介して出力する構成を有していたが、本実施の形態3においては、発明の特徴となる部分から外れるため省略している。
また、実施の形態1あるいは実施の形態2と同名かつ同じ符号を付した機能部については、実施の形態1と同様の機能を果たすものとしてここでは説明を省略する。
レジスタ情報発生器311は、拡張演算器310に搭載されている演算器の種類に関する情報を保持する機能を有し、情報処理装置350がリセットされたタイミングで保持していた値を第1演算結果格納レジスタ313に出力する機能を有する。
レジスタ情報発生器311が保持しているレジスタ情報について詳細に述べると、レジスタ情報発生器311は、「0b0101」という情報を保持している。本実施の形態においては、拡張演算器に搭載され得る演算器の種類は4種類であるとする。レジスタ情報発生器311が保持している値の、第1ビットは第1演算器の有無を、第2ビットは第2演算器の有無を、第3ビットは第3演算器の有無を、第4ビットは第4演算器の有無を示す。拡張演算器350に、その演算器が搭載されているならば、「1」を用いてそのことを示し、搭載されていないならば、「0」を用いてそのことを示す。ここでは、拡張演算器310には、第1演算器112と、第3演算器314とが搭載されているので、レジスタ情報発生器311が保持する値は、「0b0101」となっている。仮に、拡張演算器350に搭載されている演算器が、第2演算器と第4演算器とであった場合には、レジスタ情報発生器311が保持する値は、「0b1010」となる。
第3演算器314は、積和演算器であり、積和演算を実行する機能を有する。具体的には、第3演算器314は、拡張演算器命令デコーダ110から供給される制御信号によって第1データ入力バス120及び第2データ入力バス121を介して転送されたデータ及び第3演算結果格納レジスタ315に予め保持されている値を入力とする積和演算を実行する。第1データ入力バス120及び第2データ入力バス121を介して転送されたデータの積を行った後に、第3演算結果格納レジスタ315が保持する値を加算する積和演算を行い、演算結果を第3演算結果格納レジスタ315に格納する。
第3演算結果格納レジスタ315は、第3演算器314で実行する演算に必要なデータと、演算結果のデータを格納する機能を有する。
<コマンド>
ここから本実施の形態3において用いられる命令について説明する。
<拡張演算命令>
図12は、図2に加えてCPU300及び拡張演算器301に読み出される拡張演算器命令のニーモニック、CPUの動作、拡張演算器の動作の一例を示す図である。
<MAC Dm,Dn命令>
「MAC Dm,Dn」命令は、拡張演算器301において積和演算を実行するための拡張演算命令である。
「MAC Dm,Dn」命令は、ROM130からCPU300及び拡張演算器310に読み出されることにより実行される。
CPU命令デコーダ101は、「MAC Dm,Dn」命令をデコードし、デコードした内容に基づいて、CPU300内部の各回路に制御信号を出力する。ここでm及びnは命令のオペランドで指定されるレジスタ番号である。
拡張演算器命令デコーダ111は、「MAC Dm,Dn」命令をデコードし拡張演算器310内部の各回路に制御信号を出力する。
汎用レジスタ104は、Dmを第1データ入力バス120に出力し、Dnを第2データ入力バス121に出力する。第3演算器314は、第1データ入力バス120を介してDmを取得し、第2データ入力バス121を介してDnを取得する。そして、第3演算器314は、Dmを被乗数、Dnを乗数とする積を求める。そして、積の結果と、第3演算結果格納レジスタ315に予め保持されていた値との和を求める。そして第3演算器314は、当該和の演算結果を第3演算結果格納レジスタ315に格納する。第3演算結果格納レジスタ315は、第3演算器314が実行した積和演算の演算結果の値を保持する。
以上が、「MAC Dm,Dn」命令の説明である。
<CPU実行命令>
次いで、本実施の形態3において用いるCPU実行命令について説明する。図13は、図3及び図6に加えてCPU300からRAM140に対してデータの退避・復帰の際に用いられる命令のニーモニック、CPUの動作の一例を示す図である。
<MOV Dm,Dn命令>
「MOV Dm,Dn」命令は、Dmを汎用レジスタのn番目のレジスタに格納するための命令である。
「MOV Dm,Dn」命令は、ROM130からCPU300に読み出されて実行される。CPU命令デコーダ104は、「MOV Dm,Dn」命令をデコードし、デコードした内容に基づいてCPU300内部の各回路に制御信号を出力する。出力された制御信号に基づいて、汎用レジスタ104は、m番目のレジスタに保持する値をn番目のレジスタに保持する。
以上が、「MOV Dm,Dn」命令の説明である。
<AND #<即値>,Dm命令>
「AND #<即値>,Dm」命令は、即値データと、Dmとの論理積を演算するための命令である。
「AND #<即値>,Dm」命令は、ROM130からCPU300に読み出され、CPU命令デコーダ101によりデコードされる。デコードした内容に基づいてCPU命令デコーダ101は、CPU200内部の各回路に制御信号を出力する。データ出力バス122は、ROM130から出力される即値データを、CPU300の汎用レジスタ104に転送する。CPU300は、データ出力バス122の値と、汎用レジスタ104のn番目のレジスタに保持する値との論理積演算を行い、演算結果を汎用レジスタ104のn番目のレジスタに保持する。
以上が、「AND #<即値>,Dm」命令の説明である。
<動作>
ここから本実施の形態3における情報処理装置350の動作について説明する。図14及び図15は、図2、図3、図8、図12、図13を用いて説明した命令を用いたアセンブラプログラムの一例を示す命令列である。以下に、情報処理装置350が、この命令列を実行する際の動作について説明する。なお、図中において示した矢印1401は、情報処理装置350においてリセットしたタイミングを示しており、矢印1402は、命令列1400を実行しているときに、割込みが発生したタイミングを示している。
CPU300は、リセット解除後、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに「0」値を保持する。
CPU300は、「GETACX D0,D3」の命令をROM130から読み込んで実行する。その結果、レジスタ情報「0b0101」を保持する第1演算結果格納レジスタ313から、当該レジスタ情報「0b0101」が出力され、汎用レジスタ104の3番目のレジスタに保持される。これにより、CPU300に、拡張演算器310に搭載されている演算器の情報が保持されたことになる。
CPU300は、ROM130に格納された通常処理の命令列を処理する。
CPU300は、通常処理の命令列1400中の「MOV #0,D2」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の2番目のレジスタに「0」値が保持される。
CPU300は、「MAC D0,D1」の命令をROM130から読み込んで実行する。その結果、第3演算結果格納レジスタ315に積和演算の演算結果の値が保持される。
CPU300は、上記「MAC D0,D1」の命令実行後割込みを受付けて、割込みハンドラの命令列1410のハンドラ先頭に分岐する。
CPU300は、まず、汎用レジスタ104の格納値をRAM140に退避する処理を行う。この時、汎用レジスタ104の2番目に格納されている「0」値もRAM140に退避される。
CPU300は、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに「0」値が保持される。また、スタックポインタ格納レジスタ103に格納されているアドレス値をSP初期値としてRAM140に記憶する。
ここから図15に示した命令列1411に基づいて説明する。
CPU300は、「MOV D3,D2」の命令をROM130から読み込んで実行する。その結果、CPU300は、汎用レジスタ104の3番目のレジスタに保持されている「0b0101」値を2番目のレジスタに保持する。
CPU300は、「AND #0b0001,D2」の命令をROM130から読み込んで実行する。その結果、CPU300は、汎用レジスタ104の2番目のレジスタに保持にする「0b0101」値と、即値として与えられた「0b0001」との論理積を演算する。そして、CPU300は、演算結果の「0b0001」値を汎用レジスタ104の2番目のレジスタに保持にする。
CPU300は、「MOV #0b0001,D1」の命令をROM130から読み込んで実行する。その結果、CPU300は、汎用レジスタ104の1番目のレジスタに「0b0001」値を保持する。
CPU300は、「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、一致するため「1」値をフラグレジスタ202に書き込む。
CPU300は、「Bcc <ラベル1>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ202に格納されている値が「1」であるので分岐しない。
CPU300は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は、保持していたアドレス値に定数値を加算した値を保持しなおす。
CPU300は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ313が保持していた値が、汎用レジスタ104の1番目のレジスタに保持される。
CPU300は、「MOV D1,(SP)」 の命令をROM130から読み込んで実行する。その結果、RAM140のスタックポインタ格納レジスタ103に格納されるアドレス値で指定されるアドレスに、汎用レジスタ104の1番目のレジスタが保持する値を書き込む。
CPU300は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104は、0番目のレジスタが保持している値に1加算した値を保持しなおす。
CPU300は、「MOV D3,D2」の命令をROM130から読み込み、汎用レジスタ104の3番目のレジスタが保持している「0b0101」値を2番目のレジスタに保持にさせる。
CPU300は、「AND #0b0010、D2」の命令をROM130から読み込んで実行する。CPU200は、汎用レジスタ104の2番目のレジスタに保持している「0b0101」値と、即値として与えられら「0b0010」との論理積を演算する。そして、CPU200は、当該論理積の演算結果の「0b0000」値を汎用レジスタ104の2番目のレジスタに保持する。
CPU300は、「MOV #0b0010,D1」の命令をROM130から読み込んで実行する。その結果、CPU200は、汎用レジスタ104の1番目のレジスタに「0b0010」値を保持させる。
CPU300は、「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、D1とD2とが一致しないため、CPU200は、「0」値をフラグレジスタ103に書き込む。
CPU300は、「Bcc <ラベル2>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ103に格納されている値が「0」であるので<ラベル2>に分岐する。
CPU300は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104は、0番目のレジスタが保持するアドレス値に「1」を加算した値を0番目のレジスタに保持しなおす。
CPU300は、「MOV D3,D2」の命令をROM130から読み込み、汎用レジスタ104の3番目のレジスタが保持していた「0b0101」値を2番目のレジスタに保持する。
CPU300は、「AND #0b0100,D2」の命令をROM130から読み込み、汎用レジスタ104の2番目のレジスタに保持にする「0b0101」値と即値として与えられる「0b0100」との論理積を演算する。CPU300は、当該論理積の演算結果の「0b0100」値を汎用レジスタ104の2番目のレジスタに保持させる。
CPU300は、「MOV #0b0100,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の1番目のレジスタに「0b0100」値が保持される。
CPU300は、「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、CPU202は、D1とD2とが一致するため「1」値をフラグレジスタ202に書き込む。
CPU300は、「Bcc <ラベル3>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ202に格納されている値が「1」であるので、CPU300は、<ラベル3>に分岐せず、以降の命令を実行する。
CPU300は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は保持していたアドレス値に定数値を加算した値を保持しなおす。
CPU300は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。その結果、第3演算結果格納レジスタ315が保持していた値が汎用レジスタ104の1番目のレジスタに保持される。
CPU300は、「MOV D1,(SP)」 の命令をROM130から読み込んで実行する。その結果、CPU200は、RAM140のスタックポインタ格納レジスタ103に格納されているアドレス値で指定されるアドレスに汎用レジスタ104の1番目のレジスタが保持する値を書き込む。
CPU300は、ここから割込みハンドラの命令列の実行する。
CPU300は、割込みハンドラの実際に処理すべき命令列の実行を終えると、まず、SP初期値をRAM140から読み出し、スタックポインタ格納レジスタ103に上書きする。
そして、CPU300は、「MOV D3,D2」の命令をROM130から読み込み、汎用レジスタ104の3番目のレジスタが保持する「0b0101」値を2番目のレジスタに保持にする。
CPU300は、「AND #0b0001,D2」の命令をROM130から読み込んで実行する。CPU300は、汎用レジスタ104の2番目のレジスタが保持する「0b0101」と即値として与えられる「0b0001」との論理積を演算する。CPU300は、当該論理積の演算結果の「0b0001」値を汎用レジスタ104の2番目のレジスタに保持する。
CPU300は、「MOV #0b0001,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の1番目のレジスタは、「0b0001」値を保持する。
CPU300は、「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、D1とD2とが一致するため「1」値をフラグレジスタ103に書き込む。
CPU300は、「Bcc <ラベル4>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ103に格納されている値が「1」であるので、ラベル4に分岐しない。
CPU300は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は、保持していたアドレス値から定数値を加算した値を保持しなおす。
CPU300は、「MOV (SP),D1」 の命令をROM130から読み込んで実行する。その結果、RAM140のスタックポインタ格納レジスタ103に格納されているアドレス値で指定されるアドレスに格納されている値を汎用レジスタ104の1番目のレジスタに読み出す。
CPU300と拡張演算器310は、「PUTACX D0,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の1番目のレジスタが保持していた値が、第1演算結果格納レジスタ313に格納される。
CPU300は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタは、保持していた値に「1」を加算した値を保持しなおす。
CPU300は、「MOV D3,D2」の命令をROM130から読み込み、汎用レジスタ104の3番目のレジスタが保持している「0b0101」値を2番目のレジスタに保持する。
CPU300は、「AND #0b0010,D2」の命令をROM130から読み込んで実行する。CPU300は、汎用レジスタ104の2番目のレジスタに保持にされている「0b0101」値と、即値で与えられる「0b0010」との論理積を演算する。当該論理積の演算結果の「0b0000」値を汎用レジスタ104の2番目のレジスタに保持する。
CPU300は、「MOV #0b0010,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の1番目のレジスタに「0b0010」値を保持する。
CPU300は、「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、D1とD2とが一致しないため「0」値をフラグレジスタ202に書き込む。
CPU300は、「Bcc <ラベル5>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ202に格納される値が「0」であるので<ラベル5>に分岐する。
CPU300は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタは、保持していた値に1を加算した値を保持しなおす。
CPU300は、「MOV D3,D2」の命令をROM130から読み込み、汎用レジスタ104の3番目のレジスタが保持している「0b0101」値を2番目のレジスタに保持する。
CPU300は、「AND #0b0100,D2」の命令をROM130から読み込んで実行する。CPU300は、汎用レジスタ104の2番目のレジスタに保持にする「0b0101」値と、即値で与えられる「0b0100」との論理積を演算する。そして、CPU300は、当該論理積の演算結果の「0b0100」値を汎用レジスタ104の2番目のレジスタに保持させる。
CPU300は、「MOV #0b0100,D1」の命令をROM130から読み込んで実行する。その結果汎用レジスタ104の1番目のレジスタは、「0b0100」値を保持する。
CPU300は、「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、D1とD2とが一致するため「1」値をフラグレジスタ202に書き込む。
CPU300は、「Bcc <ラベル6>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ202に格納されている値が「1」であるので、ラベル6に分岐しない。
CPU300は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は、保持していたアドレス値から定数値を加算した値を保持しなおす。
CPU300は、「MOV (SP),D1」 の命令をROM130から読み込んで実行する。その結果、RAM140のスタックポインタ格納レジスタ103に格納されているアドレス値で指定されるアドレスに格納されている値を汎用レジスタ104の1番目のレジスタに読み出す。
CPU300は、「PUTACX D0,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の1番目のレジスタが保持する値を第3演算結果格納レジスタ315に格納する。
ここから再び図14に示す命令列1410に戻り、以降の動作の説明を行う。
CPU300は、RAM140に退避させていた値を汎用レジスタ104に復帰する処理を行う。
この時RAM140に退避されていた汎用レジスタ104の2番目の「0」値も汎用レジスタ104の2番目のレジスタに格納される。
CPU300は、「RTI」の命令をROM130から読み込んで実行する。その結果、通常処理の命令列1400に分岐し、後続する「GETACX D2,D1」の命令をROMから読み込んで実行する。
以上に説明したように、本実施の形態3においては、情報処理装置350のリセット時において、拡張演算器310からCPU300に演算器の情報が伝達されるので、どの種類の演算器が拡張演算器310に搭載されているかをCPU300が認識できるようになる。そして取得した演算器の情報に基づいてCPU300から、拡張演算器310に対してレジスタを指定するための番号を第1データ入力バス120に印加することができる。また、CPU300は、印加しなければならない番号も自身で認識できるようになる。
<実施の形態4>
上記実施の形態1〜3においては、全てのレジスタに対してデータの退避を促したが、必ずしも全てのレジスタからのデータの退避を実行する必要がない。割込みが発生した時点で、データ退避の必要のないレジスタからデータを退避させていると、割込みの実際の命令内容を実行できるまでの時間が無駄に長くなることがある。そこで、本実施の形態4においては、その無駄を省くことを目的とする。
では、本実施の形態4において、全てのレジスタからのデータの退避が必要ない場合がどのような場合かを説明する。それは即ち、割込みハンドラの中で、拡張演算器の中で使用しない演算器があることがある。この場合、その演算器に組み込まれているレジスタにデータが格納されて上書きされ、通常処理中に行った演算のデータが消えるという事態が発生しない。
よって、本実施の形態4においては、割込み発生時に、そのような割込み命令において使用しない演算器に対応するレジスタからのデータの退避は行わないことを示す。
<構成>
本実施の形態に係る情報処理装置450の機能構成を図16に示した。図16に示すように、情報処理装置450は、CPU100と、拡張演算器110と、ROM130と、RAM140とを含んで構成される。
CPU200は、CPU命令デコーダ101と、フラグレジスタ102と、スタックポインタ格納レジスタ103と、汎用レジスタ104とを含んで構成される。
拡張演算器210は、拡張演算器命令デコーダ111と、第1演算器112と、第2演算器113と、第2演算結果格納レジスタ115と、セレクタ116と、レジスタ数発生器211、第1演算結果格納レジスタ213とを含んで構成される。
なお、上記実施の形態1においては、第1演算器112や、第2演算器113における演算結果フラグを論理和回路118を介して出力する構成を有していたが、本実施の形態2においては、発明の特徴となる部分から外れるため省略している。
また、実施の形態1と同名かつ同じ符号を付した機能部については、実施の形態1と同様の機能を果たすものとしてここでは説明を省略する。
本実施の形態4において情報処理装置450は、実施の形態1において示した情報処理装置150とは異なり、搭載演算器情報出力回路117に換えて、退避レベル対応搭載演算器情報出力回路417を備えている。
退避レベル対応搭載演算器情報出力回路417は、割込みレベルと退避するレジスタの本数との対応を記憶し、後述する「PUTLVL」実行時において第1データ入力バス120を介して取得する割込みレベルに基づいてデータを退避させるレジスタの本数を決定する機能を有する。そして、退避レベル対応搭載演算器情報出力回路417は、「GETACX」命令の実行時に、データを退避させると決定したレジスタの本数と、第1データ入力バス120を流れる数値とを比較し、両数値が一致したタイミングで、フラグ値「1」を出力する機能を有する。一致しなかった場合には、フラグ値「0」を出力する。
本実施の形態4においては、割込みレベルには、0レベルと1レベルがあるものとする。そして、退避レベル対応搭載演算器情報出力回路417は、割込みレベルが0レベルの場合に、データを退避させるレジスタの本数は2本、割込みレベルが1レベルの場合に、データを退避させるレジスタの本数は1本であると決定する。
<コマンド>
ここから実施の形態4に係る命令について説明する。
<拡張演算命令>
では、本実施の形態4に係る拡張演算器命令について説明する。図17は、ROM130から、CPU400及び拡張演算器410に読み出される拡張演算器命令のニーモニック、CPUの動作、拡張演算器の動作の一例を示す図である。
<PUTLVL Dm,Dn命令>
「PUTLVL Dm,Dn」命令は、拡張演算器410の退避レベル対応搭載演算器情報出力回路に退避レベルに応じたデータを退避させるレジスタの本数を決定し、設定するための命令である。
「PUTLVL Dm,Dn」命令は、ROM130からCPU400及び拡張演算器410に読み出されることにより実行される。CPU命令デコーダ101は、「PUTLVL Dm,Dn」命令をデコードし、デコードした内容に基づいて、CPU400内部の各回路に制御信号を出力する。拡張演算器命令デコーダ111は、「PUTLVL Dm,Dn」命令をデコードし、デコードした内容に基づいて拡張演算器410内部の各回路に制御信号を出力する。汎用レジスタ104は、Dmを第1データ入力バス120に出力し、Dnを第2データ入力バス121に出力する。退避レベル対応搭載演算器情報出力回路417は、第1データ入力バス120を介して取得した値を割込みレベルとして保持し、保持したレベル値によって、データを退避、あるいはデータを復帰すべきレジスタ本数の情報を生成する
<GETACX Dm,Dn命令>
ここで、「GETACX Dm,Dn命令」について、本実施の形態における情報処理装置450の動作を、各割込みレベルの場合それぞれについて説明しておく。
「GETACX Dm,Dn」命令は、ROM130からCPU400及び拡張演算器410に読み出されて実行される。
CPU命令デコーダ101は、「GETACX Dm,Dn」命令をデコードしCPU400内部の各回路に制御信号を出力する。拡張演算器命令デコーダ111もまた、「GETACX Dm,Dn」命令をデコードし拡張演算器410内部の各回路に制御信号を出力する。
汎用レジスタ104は、Dmを第1データ入力バス120に出力し、Dnを第2データ入力バス121に出力する。第1データ入力バス120は、Dmを拡張演算器410の第1演算器112に転送する。第2データ入力バス121はDnを拡張演算器410の第1演算器112に転送する。以下では次の3つの場合について説明する。
(1)退避レベル対応搭載演算器情報出力回路417が保持する割込みレベルが0の時 に第1演算結果格納レジスタ113から値を読み出す場合
(2)退避レベル対応搭載演算器情報出力回路417が保持する割込みレベルが1の時 に第1演算結果格納レジスタ113から値を読み出す場合
(3)退避レベル対応搭載演算器情報出力回路417が保持する割込みレベルが0の時 に第2演算結果格納レジスタ115から値を読み出す場合
なお、前述したように、割込みレベルが1の場合には、第2格納演算結果格納レジスタ115からは、データは読み出されない。
(1)退避レベル対応搭載演算器情報出力回路417が保持する割込みレベルが0の時に第1演算結果格納レジスタ113から値を読み出す場合
第1演算器112は、第1データ入力バス120を介して、Dmが第1演算器112を表す「1」であることを読み込む。第1演算結果格納レジスタ113は、保持する値をセレクタ116に出力する。
セレクタ116は、拡張演算器命令デコーダ111から出力される制御信号によって第1演算結果格納レジスタ113から出力されたデータを選択してデータ出力バス122に出力する。
退避レベル対応搭載演算器情報出力回路417は、拡張演算器命令デコーダ111から供給される制御信号によって第1データ入力バス120から入力した値と退避/復帰すべきレジスタ本数値とを比較し、比較の結果入力された値の方が小さいのでフラグ値「0」を出力する。
論理和回路118は、第1演算器112の演算結果フラグ、第2演算器114の演算結果フラグ及び退避レベル対応搭載演算器情報出力回路417の出力の論理和演算を行い、この場合退避レベル対応搭載演算器情報出力回路417のフラグ値0を出力する。
セレクタ116から出力された第1演算結果格納レジスタ113の出力値を、データ出力バス122を介して、CPU400の汎用レジスタ104に転送する。汎用レジスタ104は、データ出力バス122の値を取得してn番目のレジスタに保持する。フラグレジスタ102は、拡張演算器410の退避レベル対応搭載演算器情報出力回路417から出力されたフラグ値「0」を演算結果フラグに格納する。
(2)退避レベル対応搭載演算器情報出力回路417が保持する割込みレベルが1の時に第1演算結果格納レジスタ113から値を読み出す場合
第1演算器112は、第1データ入力バス120を介して、第1演算器112を表す「1」を読み込む。第1演算結果格納レジスタ113は、保持する値をセレクタ116に出力する。
セレクタ116は、拡張演算器命令デコーダ111から出力される制御信号によって、第1演算結果格納レジスタ113から出力されたデータを選択してデータ出力バス122に出力する。
退避レベル対応搭載演算器情報出力回路417は、拡張演算器命令デコーダ111から供給される制御信号によって第1データ入力バス120から取得した値と退避/復帰すべきレジスタ本数値とを比較する。当該比較の結果、取得した値の方が大きいのでフラグ値「1」を出力する。
論理和回路118は、第1演算器112の演算結果フラグ、第2演算器114の演算結果フラグ及び退避レベル対応搭載演算器情報出力回路417の出力の論理和演算を行い、この場合、退避レベル対応搭載演算器情報出力回路417のフラグ値「1」を出力する。
セレクタ116から出力された第1演算結果格納レジスタ113の出力値はデータ出力バス122を介してCPU400の汎用レジスタ104に転送される。
汎用レジスタ104は、データ出力バス122の値を取得してn番目のレジスタに保持する。フラグレジスタ102は、拡張演算器410の退避レベル対応搭載演算器情報出力回路417から出力されたフラグ値「1」を演算結果フラグに格納する。
(3)退避レベル対応搭載演算器情報出力回路417が保持する割込みレベルが0の時に第2演算結果格納レジスタ115から値を読み出す場合
第2演算器114は、第1データ入力バス120から第2演算器114を表す「2」を読み込む。第2演算結果格納レジスタ115は、保持する値をセレクタ116に出力する。
セレクタ116は、拡張演算器命令デコーダ111から出力される制御信号によって第2演算結果格納レジスタ115から出力されたデータを選択してデータ出力バス122に出力する。
退避レベル対応搭載演算器情報出力回路417は、拡張演算器命令デコーダ111から供給される制御信号によって第1データ入力バス120から取得した値と退避/復帰すべきレジスタ本数値とを比較し、比較の結果取得した値のほうが大きいのでフラグ値「1」を出力する。
論理和回路118は、第1演算器112の演算結果フラグ、第2演算器114の演算結果フラグ及び退避レベル対応搭載演算器情報出力回路417の出力の論理和演算を行い、この場合、退避レベル対応搭載演算器情報出力回路417のフラグ値「1」を出力する。
セレクタ116から出力された第2演算結果格納レジスタ115の出力値は、データ出力バス122を介してCPU400の汎用レジスタ104に転送される。
汎用レジスタ104は、データ出力バス122の値を取得してn番目のレジスタに保持する。フラグレジスタ102は拡張演算器410から出力される退避レベル対応搭載演算器情報出力回路417のフラグ値1を演算結果フラグに格納する。
以上が、本実施の形態における「GETACX Dm,Dn」命令の説明である。
<動作>
本実施の形態4における情報処理装置450の動作を命令列の具体例を用いて説明する。まず、図18を用いて、割込みレベルが、「0」の場合を説明し、その後に、図19を用いて、割込みレベルが、「1」の場合を説明する。
図18は、図2、図3、図13、図17で示した命令を用いたレベル0割込み発生時のアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。なお、図中において矢印1801は割込みが発生したタイミングを示している。
CPU400は、ROM130に格納された通常処理の命令列1800を処理する。
CPU400は、通常処理の命令列1800中の「CLR D2」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の2番目のレジスタに「0」値を保持する。
CPU400は、「MULQ D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113に積の上位ビット側結果が保持され、汎用レジスタ104の1番目のレジスタに積の下位ビット側結果が保持され、フラグレジスタ102に演算結果フラグが保持される。
CPU400は、上記「MULQ D0,D1」の命令実行後割込みを受付けて、割込みハンドラの命令列1810のハンドラ先頭に分岐する。
CPU400は、汎用レジスタ104に格納されている値をRAM140に退避する処理を行う。この時、汎用レジスタ104の2番目に格納されている0値もRAM140に退避する。
CPU400は、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに「0」値が保持される。また、CPU400は、このときスタックポインタ格納レジスタに格納されていたアドレス値をSP初期値としてRAM140に記憶する。
CPU400は、「MOV D0,D1」の命令をROM130から読み込み、CPU200は、汎用レジスタ104の0番目のレジスタが保持する「0」値を1番目のレジスタに保持させる。
CPU400は、「PUTLVL D1,D2」の命令をROM130から読み込んで実行する。その結果、退避レベル対応搭載演算器情報出力回路417は割込みレベルとして「0」値を保持し、保持したレベル値0によって退避/復帰すべきレジスタ本数を2本とする。
CPU400は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103に保持するアドレス値に定数値を加算した値を保持する。
CPU400は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113が保持していた値が、汎用レジスタ104の1番目のレジスタに保持される。また、退避レベル対応搭載演算器情報出力回路417が出力したフラグ値「0」がフラグレジスタ102に格納される。
CPU400は、「MOV D1,SP」 の命令をROM130から読み込んで実行する。その結果、CPU400は、RAM140のスタックポインタ格納レジスタ103に格納されているアドレス値で指定されるアドレスに汎用レジスタ104の1番目のレジスタが保持している値を書き込む。
CPU400は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104は、0番目のレジスタに保持されている値に1を加算した値を保持しなおす。
CPU400は、「Bcc <ラベル1>」の命令をROM130から読み込んで実行する。その結果、CPU400は、フラグレジスタ102に格納されている値が「0」であるので<ラベル1>に分岐する。
CPU400は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は、保持していたアドレス値に定数値を加算した値を保持しなおす。
CPU400は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。その結果、CPU400は、第2演算結果格納レジスタ115が保持する値を汎用レジスタ104の1番目のレジスタに保持し、退避レベル対応搭載演算器情報出力回路417から出力されたフラグ値「1」をフラグレジスタ102に格納する。
CPU400は、「MOV D1,(SP)」 の命令をROM130から読み込んで実行する。その結果、RAM140のスタックポインタ格納レジスタ103に格納されているアドレス値で指定されるアドレスに汎用レジスタ104の1番目のレジスタが保持する値を書き込む。
CPU400は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104は、汎用レジスタ104の0番目のレジスタが保持している値に1を加算した値を保持しなおす。
CPU400は、「Bcc <ラベル1>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ102に格納されている値が「1」であるので<ラベル1>に分岐しない。CPU400は、以降、割込みハンドラの命令列の命令を実行する。
CPU400は、割込みハンドラの命令列の実行を完了した後に、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに「0」値が保持される。また、CPU400は、SP初期値をRAM140から読み出してスタックポインタ格納レジスタ103に上書きする。
CPU400は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103に保持するアドレス値に定数値を加算した値を保持する。
CPU400は、「MOV (SP),D1」 の命令をROM130から読み込んで実行する。その結果、CPU400は、RAM140のスタックポインタ格納レジスタ103に格納されているアドレス値で指定されるアドレスに格納されている値を汎用レジスタ104の1番目のレジスタに読み出す。
CPU400は、「PUTACX D0,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の1番目のレジスタが保持していた値が第1演算結果格納レジスタ113に格納され、退避レベル対応搭載演算器情報出力回路417が出力したフラグ値「0」がフラグレジスタ102に格納される。
CPU400は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタは、汎用レジスタ104の0番目のレジスタが保持していたアドレス値に1を加算した値を保持しなおす。
CPU400は、「Bcc <ラベル2>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ102に格納されている値が「0」であるので<ラベル2>に分岐する。
CPU400は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は、保持していたアドレス値に定数値を加算した値を保持しなおす。
CPU400は、「MOV (SP),D1」 の命令をROM130から読み込んで実行する。その結果、RAM140のスタックポインタ格納レジスタ103に格納されるアドレスに格納される値を汎用レジスタ104の1番目のレジスタに読み出す。
CPU400は、「PUTACX D0,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の1番目のレジスタが保持する値が第2演算結果格納レジスタ115に格納され、退避レベル対応搭載演算器情報出力回路417から出力されたフラグ値「1」がフラグレジスタ102に格納される。
CPU400は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタは、保持していた値に「1」を加算した値を保持しなおす。
CPU400は、「Bcc <ラベル2>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ102に格納されている値が「1」であるので、<ラベル2>に分岐しない。
CPU400は、RAM140に退避した値を汎用レジスタ104に復帰する処理を行う。この時、RAM140に退避されていた汎用レジスタ104の2番目の「0」値も汎用レジスタ104の2番目のレジスタに格納される。
CPU400は、「RTI」の命令をROM130から読み込んで実行する。その結果、通常処理の命令列1800に分岐する。
CPU400は、「GETACX D2,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113が保持している値が汎用レジスタ104の2番目のレジスタに保持され、退避レベル対応搭載演算器情報出力回路417から出力されたフラグ値「0」がフラグレジスタ102に格納される。
次に、レベル1割込み発生時の情報処理装置450の動作について説明する。
図19は、図2、図3、図13、図17及び上記で説明した命令を用いたレベル1割込み発生時のアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。
CPU400は、ROM130に格納された通常処理の命令列1900を処理する。
CPU400は、通常処理の命令列1900中の「CLR D2」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の2番目のレジスタは、「0」値を保持する。
CPU400は、「MULQ D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113に積の上位ビット側結果が保持され、汎用レジスタ104の1番目のレジスタに積の下位ビット側結果が保持され、フラグレジスタ102に演算結果フラグが保持される。
CPU400は、上記「MULQ D0,D1」の命令実行後割込みを受付けて、割込みハンドラの命令列1910のハンドラ先頭に分岐する。
CPU400は、割込みハンドラの命令列中の汎用レジスタ104の格納値をRAM140に退避する処理を行う。この時汎用レジスタ104の2番目に格納されている「0」値もRAM140に退避される。
CPU400は、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタは、「0」値を保持する。また、CPU400は、その時にスタックポインタ格納レジスタ103に格納されているアドレス値をSP初期値としてRAM140に記憶する。
CPU400は、「MOV D0,D1」の命令をROM130から読み込み、汎用レジスタ104の0番目のレジスタが保持する「0」値を1番目のレジスタに保持にする。
CPU400は、「ADD #1,D1」の命令をROM130から読み込み、汎用レジスタ104の1番目のレジスタが保持する値に1を加え、「1」値を保持する。
CPU400は、「PUTLVL D1,D2」の命令をROM130から読み込んで実行する。その結果、退避レベル対応搭載演算器情報出力回路417は割込みレベルとして「1」値を保持し、保持したレベル値1によって退避/復帰すべきレジスタ本数を1本とする。
CPU400は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は、保持していたアドレス値に定数値を加算した値を保持しなおす。
CPU400は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113が保持する値が汎用レジスタ104の1番目のレジスタに保持され、退避レベル対応搭載演算器情報出力回路417から出力されたフラグ値「1」がフラグレジスタ102に格納される。
CPU400は、「MOV D1,(SP)」 の命令をROM130から読み込んで実行する。その結果、RAM140のスタックポインタ格納レジスタ103に格納されるアドレスに汎用レジスタ104の1番目のレジスタに保持する値を書き込む。
CPU400は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタは、保持していた値に1を加算した値を保持しなおす。
CPU400は、「Bcc <ラベル1>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ102に格納されている値が「1」であるので<ラベル1>に分岐しない。
そして、CPU400は、以降割込みハンドラの命令列の命令を実行する。
CPU400は、割込みハンドラの命令列の実行を完了し、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに「0」値を保持する。また、CPU400は、SP初期値をRAM140から読み出し、スタックポインタ格納レジスタ103に上書きする。
CPU400は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は、保持していたアドレス値に定数値を加算した値を保持しなおす。
CPU400は、「MOV (SP),D1」 の命令をROM130から読み込んで実行する。その結果、RAM140のスタックポインタ格納レジスタ103に格納されるアドレス値で指定されるアドレスに格納されている値を汎用レジスタ104の1番目のレジスタに読み出す。
CPU400と拡張演算器410は、「PUTACX D0,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の1番目のレジスタが保持する値が第1演算結果格納レジスタ113に格納され、退避レベル対応搭載演算器情報出力回路417から出力されたフラグ値「1」がフラグレジスタ102に格納される。
CPU400は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタは、保持していた値に1を加算した値を保持しなおす。
CPU400は、「Bcc <ラベル2>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ102に格納されている値が「1」であるので、CPU400は、<ラベル2>に分岐しない。
CPU400は、RAM140に退避させた値を汎用レジスタ104に復帰する処理を行う。この時、RAM140に退避されていた汎用レジスタ104の2番目の「0」値も汎用レジスタ104の2番目のレジスタに格納する。
CPU400は、「RTI」の命令をROM130から読み込んで実行する。その結果、通常処理の命令列1900に分岐する。
CPU400は、「GETACX D2,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113が保持している値が汎用レジスタ104の2番目のレジスタに保持され、退避レベル対応搭載演算器情報出力回路417から出力されたフラグ値「0」がフラグレジスタ102に格納される。そして、情報処理装置450は、以降の処理を実行する。
以上に説明してきたように、本実施の形態4においては、割込みのレベルに応じて、そのレベルにおいて使用する演算器が予め定まっているので、割込みのレベルに応じてデータを退避させるレジスタを特定することを特徴としている。これによって、無駄にレジスタからのデータの退避が行われなくなるので、割込みに移行する際の退避処理に要する時間や、割込みを終了して通常処理に戻る際の復帰処理に要する時間を短縮し得る。
<実施の形態5>
上記実施の形態において、タスク中で拡張演算命令を実行しない場合であっても、タスク切替によってレジスタ資源の退避/復帰を行うオーバーヘッドが生じてしまう。本実施の形態5においては、当該オーバーヘッドを減じることを示す。
<構成>
実施の形態5に係る情報処理装置550の機能構成を、図20のブロック図に示した。
本図20を見れば分かるように、情報処理装置550は、ROM130、RAM140、CPU500、拡張演算器510を含んで構成される。
CPU500は、CPU命令デコーダ101と、スタックポインタ格納レジスタ103と、汎用レジスタ104とを含んで構成される。
拡張演算器510は、拡張演算器命令デコーダ111と、第1演算器112と第1演算結果格納レジスタ113と、第2演算器114と、第2演算結果格納レジスタ115と、セレクタ116と、実行タスク管理回路517と、拡張演算実行フラグレジスタ518とを含んで構成される。
なお、上記実施の形態1においては、第1演算器112や、第2演算器113における演算結果フラグを論理和回路118を介して出力する構成を有していたが、本実施の形態2においては、発明の特徴となる部分から外れるため省略している。
また、ここでは、実施の形態1と同名かつ同じ符号を付した機能部については、実施の形態1と同様の機能を果たすものとしてここでは説明を省略する。
実行タスク管理回路517は、拡張演算実行フラグレジスタ518を含んで構成される。実行タスク管理回路517は、拡張演算器510が実行しているタスクを管理する機能を有し、拡張演算実行フラグレジスタ518に拡張演算が実行されているか否かを示す数値を格納する機能を有する。また、CPU命令コーダ501に対して、割込みを要求するための割込み要求信号を出力する機能を有する。また、本実施の形態5においては、実行タスク管理回路517は、「GETACX Dm,Dn」命令以外の拡張演算命令が実行された場合に、拡張演算実行フラグレジスタ518に「1」値を格納する機能を有する。
拡張演算実行フラグレジスタ518は、実行タスク管理回路517によりセット及びクリアされる拡張演算器の実行状況を保持する。
<コマンド>
図21は、ROM130から、CPU500及び拡張演算器510に読み出される拡張演算器命令のニーモニック、CPUの動作、拡張演算器の動作の一例を示す図である。
<PUTTSK Dm,Dn命令>
「PUTTSK Dm,Dn」命令は、ROM130からCPU500及び拡張演算器510に読み出され、実行される。CPU命令デコーダ501は、「PUTTSK Dm,Dn」命令をデコードしCPU500内部の各回路に制御信号を出力する。拡張演算器命令デコーダ110もまた、「PUTTSK Dm,Dn」命令をデコードし拡張演算器510内部の各回路に制御信号を出力する。
汎用レジスタ104は、Dmを第1データ入力バス120に出力し、Dnを第2データ入力バス121に出力する。第1データ入力バス120は、Dmを拡張演算器510の実行タスク管理回路517に転送する。実行タスク管理回路517は第1データ入力バス120から取得した値をタスク番号として保持し、拡張演算器実行フラグ518が保持する値をクリアする。
<動作>
ここから命令列の具体例を用いて本実施の形態5における情報処理装置550の動作を説明する。
図22は、図2、図3、図10、図14、図18及び上記で説明した命令を用いたタスク切替発生時のアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。
CPU500は、ROM130に格納されたタスク0の命令列2200を処理する。
CPU500は、タスク0の命令列2200中の「CLR D2」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の2番目のレジスタは、「0」値を保持する。
CPU500は、「PUTTSK D0,D1」の命令をROM130から読み込んで実行する。その結果、実行タスク管理回路517は、タスク番号「0」を保持し、拡張演算実行フラグレジスタ518に「0」値が書き込まれる。
CPU500は、矢印2201で示されるタイミングで、タスク切替を受付け、タスク1の命令列2210に分岐する。
CPU500は、タスク1の命令列2210中の「MOV #1,D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに「1」値を保持する。
CPU500は、「PUTTSK D0,D1」の命令をROM130から読み込んで実行する。その結果、実行タスク管理回路517は、タスク番号1を保持し、拡張演算実行フラグレジスタ518に「0」値が書き込まれる。この時、拡張演算実行フラグレジスタ518が保持する値が「0」であるので割込みは発生しない。ここからタスク1の命令列2210の本来実行する命令内容を実行する。
CPU500は、タスク1の命令列2210中の実際に実行すべき命令の実行を完了する。
CPU500は、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに「0」値が保持される。
CPU500は、「PUTTSK D0,D1」の命令をROM130から読み込んで実行する。その結果、実行タスク管理回路517がタスク番号0を保持し、拡張演算実行フラグレジスタ518に「0」値が書き込まれる。この時、拡張演算実行フラグレジスタ518が保持する値は、「0」であるので割込みは発生しない。
CPU500は、タスク0の命令列2200の続きの命令を実行する。
CPU500は、「MULQ D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113には、積の上位ビット側結果が保持され、汎用レジスタ104の1番目のレジスタには、積の下位ビット側結果が保持され、拡張演算実行フラグレジスタ518には「1」値がセットされる。
CPU500は、矢印2202で示されるタイミングでタスク切替を受付け、タスク1の命令列2220に分岐する。
CPU500は、タスク1の命令列2220中の「MOV #1,D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ104の0番目のレジスタに「1」値が保持される。
CPU500は、「PUTTSK D0,D1」の命令をROM130から読み込んで実行する。その結果、実行タスク管理回路517がタスク番号1を保持し、拡張演算実行フラグレジスタ518に「0」値が書き込まれる。この時、拡張演算実行フラグレジスタ518が保持する値が「1」であるので、矢印2221で示されるタイミングで、割込みが発生する。
CPU500は、割込みハンドラの命令列2230に分岐する。
CPU500は、割込みハンドラの命令列を実行しタスク0の拡張演算器レジスタ資源に格納された値をRAM140に退避する。なお退避の具体的な処理は前記第一乃至第四の実施の形態の動作と同じである。
CPU500は、タスク1の拡張演算器レジスタ資源に格納された値をRAM140から復帰する。CPU500は「RTI」命令を実行して割込みハンドラ処理を終了しタスク1の命令列2200に復帰する。
CPU500は、「MULQ D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113に積の上位ビット側結果を保持し、汎用レジスタ104の1番目のレジスタに積の下位ビット側結果を保持し、拡張演算実行フラグレジスタ518に「1」値がセットされる。
CPU500は、タスク1の命令列2220中の実際に処理すべき命令の実行を完了する。
CPU500は、「CLR D0」の命令をROM130から読み込んで実行する。その結果汎用レジスタ104の0番目のレジスタに0値を保持する。
CPU500は、「PUTTSK D0,D1」の命令をROM130から読み込んで実行する。その結果、実行タスク管理回路517がタスク番号0を保持し、拡張演算実行フラグレジスタ518に「0」値が書き込まれる。この時拡張演算実行フラグレジスタ518が保持する値が「1」であるので、矢印2222で示されるタイミングで、割込みが発生する。
CPU500は、割込みハンドラの命令列2240に分岐する。
CPU500は、割込みハンドラの命令列2240を実行しタスク1の拡張演算器レジスタ資源に格納された値をRAM140に退避する。なお退避の具体的な処理は上述した実施の形態1〜4における動作と同じである。
CPU500は、タスク0の拡張演算器レジスタ資源に格納された値をRAM140から復帰する。
CPU500は、「RTI」命令を実行して割込みハンドラ処理を終了しタスク1の命令列に復帰する。
CPU500は、タスク0の命令列2200の後続の命令を実行する。
以上に説明してきたように、情報処理装置550においては、複数のタスクを切り替えて実行することがある場合において、タスクの切り替えに応じて、拡張演算を実行した否かに基づき、データの退避が必要な場合に拡張演算器側からCPUに対して割込みを要求できるようになり、タスク中において拡張演算を実行していない場合には割込みを発生させないようにすることができる。
<実施の形態6>
上記実施の形態1においては、割込みが発生した場合には、必ず、拡張演算器110に備えられたレジスタからデータの退避を実行していた。しかし、拡張演算器110において拡張演算が実行されていなかった場合などには、この処理は無駄な処理となり、割込みハンドラへの実際の命令の処理の開始が遅れることになり、オーバーヘッドが発生する。本実施の形態6においては、このオーバーヘッドを除去することを示す。
<構成>
実施の形態6における情報処理装置650の構成を図23に示した。図23は、情報処理装置650の機能構成を示したブロック図である。
図23に示すように情報処理装置650は、ROM130と、RAM140と、CPU600と、拡張演算器610とを含んで構成される。
CPU600は、CPU命令デコーダ101と、フラグレジスタ602と、スタックポインタ格納レジスタ103と、汎用レジスタ604とを含んで構成される。
拡張演算器610は、拡張演算器命令デコーダ111と、第1演算器112と、第1演算結果格納レジスタ113と、レジスタアクセス管理回路617とを含んで構成される。
なお、上記実施の形態1においては、第1演算器112や、第2演算器113における演算結果フラグを論理和回路118を介して出力する構成を有していたが、本実施の形態6においては、発明の特徴となる部分から外れるため省略している。
また、ここでは、実施の形態1と同名かつ同じ符号を付した機能部については、実施の形態1と同様の機能を果たすものとしてここでは説明を省略する。
レジスタアクセス管理回路617は、第1演算器112が演算を実行したか否かに基づいて、第1演算結果格納レジスタ113にデータが格納されているか否かの情報を管理する機能を有する。具体的には、レジスタアクセス管理回路617は、第1演算器112が演算を実行するための命令を拡張演算器命令デコーダ111が解読した場合に、演算を実行していることを示す情報を保持する。また、レジスタアクセス管理回路617は、拡張演算器命令デコーダ111が「GETACX命令」を解読した場合に、保持していた演算を実行していることを示す情報を実行していないことを示す情報に書き換えて保持する。なお、第1演算器112が演算を実行している場合には「1」を、命令を実行していない場合には「0」を保持する。
<コマンド>
ここから、本実施の形態6において用いられる命令について説明する。
<拡張演算命令>
図24は、ROM130からCPU600及び拡張演算器610に読み出される拡張演算器命令のニーモニック、CPUの動作、拡張演算器の動作の一例を示す図である。
<GETACX Dm,Dn命令>
「GETACX Dm,Dn」命令は、ROM130からCPU600及び拡張演算器610に読み出されることにより実行される。基本的には、「GETACX Dm,Dn命令」が実行されると、実施の形態1と同様に、データの取得が行われるので、その部分についての説明は省略し、ここでは異なる部分、即ち、「GETACX Dm,Dn命令」実行時のレジスタアクセス管理回路の動作を説明する。
レジスタアクセス管理回路617は、「GETACX Dm,Dn命令」に基づいて、拡張演算器命令デコーダ111から供給される制御信号によって保持するレジスタアクセス情報を、「0」値にクリアする。そして、レジスタアクセス管理回路617は、保持するレジスタアクセス情報(ここでは、「0」値)をCPU600に出力する。
そして、フラグレジスタ602は、拡張演算器610から出力されたレジスタアクセス情報を演算結果フラグに格納する。
<CPU実行命令>
図25は、CPU600からRAM140に対してデータの退避・復帰の際に用いられる命令のニーモニック、CPUの動作の一例を示す図である。以下に「MOV フラグ,Dn命令」及び「MOV Dm,フラグ命令」を実行する際の動作について説明する。
<MOV フラグ,Dn命令>
「MOV フラグ,Dn命令」は、ROM130からCPU600に読み出されることにより実行される。「MOV フラグ,Dn命令」は、フラグレジスタ602に格納されているフラグ値を汎用レジスタ604に取り込むための命令である。
CPU命令デコーダ101は、「MOV フラグ,Dn命令」をデコードし、CPU600内部の各回路に制御信号を出力する。フラグレジスタ602は保持するフラグ値を汎用レジスタ604に出力する。汎用レジスタ604はフラグレジスタ602が出力するフラグ値をn番目のレジスタに保持する。
<MOV Dm,フラグ命令>
「MOV Dm,フラグ命令」は、ROM130からCPU600に読み出されることにより実行される。「MOV Dm,フラグ命令」は、CPU600がフラグレジスタ602の値を書き換えるための命令である。
CPU命令デコーダ101は、「MOV Dm,フラグ命令」をデコードし、CPU600内部の各回路に制御信号を出力する。汎用レジスタ604はm番目のレジスタに保持する値をフラグレジスタ602に出力する。フラグレジスタ602は、汎用レジスタ604の出力値をフラグ値として保持する。
<動作>
図26は、図2、図3、図8、図12、図13、図17、図21、図24、図25を用いて上記で説明した命令を用いた割込み発生時のアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。なお、図中において矢印2601、2602は、割込みが発生したタイミングを示している。
CPU600は、ROM130に格納された通常処理の命令列2600を処理する。
CPU600は、割込みを受付けて、矢印2601で示されるタイミングで、割込みハンドラの命令列2610のハンドラ先頭に分岐する。この間、拡張演算器命令は実行していないものとする。
CPU600は、割込みハンドラの命令列中の汎用レジスタ604の格納値をRAM140に退避する処理を行う。
CPU600は、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ604の0番目のレジスタに「0」値を保持する。
CPU600は、その時点でスタックポインタ格納レジスタ103に格納されているアドレス値をSP初期値としてRAM140に記憶する。
CPU600は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ603に保持するアドレス値に定数値を加算した値を保持する。
CPU600は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113が保持する値を汎用レジスタ604の1番目のレジスタに保持し、レジスタアクセス管理回路617が保持するレジスタアクセス情報0値をフラグレジスタ602に保持する。
CPU600は、「Bcc <ラベル1>」の命令をROM130から読み込んで実行する。その結果、CPU600は、フラグレジスタ602に格納される値が「0」であるので<ラベル1>に分岐する。
CPU600は、「MOV フラグ,D3」命令をROM130から読み込み、フラグレジスタ602が保持する「0」値を汎用レジスタ604の3番目のレジスタに保持する。
CPU600は、割込みハンドラの命令列の実行を完了し、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ604の0番目のレジスタに「0」値を保持する。
CPU600は、SP初期値をRAM140から読み出してスタックポインタ格納レジスタ103に上書きする。
CPU600は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は、保持しているアドレス値に定数値を加算した値を保持しなおす。
CPU600は、「MOV D3,フラグ」命令をROM130から読み込み、汎用レジスタ604の3番目のレジスタに保持する「0」値をフラグレジスタ602に書き込む。
CPU600は、「Bcc <ラベル2>」の命令をROM130から読み込んで実行する。その結果、CPU600は、フラグレジスタ602に格納される値が「0」であるので<ラベル2>に分岐する。
CPU600は、RAM140に退避した値を汎用レジスタ604に復帰する処理を行う。
CPU600は、「RTI」の命令をROM130から読み込んで実行する。その結果、通常処理の命令列2600に分岐する。
CPU600は、ROM130に格納された通常処理の命令列を処理する。
CPU600は、「MULQ D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113に積の上位ビット側結果が保持され、汎用レジスタ604の1番目のレジスタに積の下位ビット側結果が保持され、フラグレジスタ602に演算結果フラグが保持され、レジスタアクセス情報に「1」値がセットされる。
CPU600は、上記「MULQ D0,D1」の命令実行後割込みを受付けて、割込みハンドラの命令列2611の先頭に分岐する。
CPU600は、割込みハンドラの命令列2611中の汎用レジスタ604の格納値をRAM140に退避する処理を行う。
CPU600は、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ604の0番目のレジスタは、「0」値を保持する。
CPU600は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ603に保持するアドレス値に定数値を加算した値を保持する。
CPU600は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113が保持する値を汎用レジスタ604の1番目のレジスタに保持し、レジスタアクセス管理回路617が保持するレジスタアクセス情報「1」値をフラグレジスタ602に保持する。
CPU600は、「Bcc <ラベル1>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ602に格納される値が1であるので分岐しない。
CPU600は、「MOV D1,(SP)」 の命令をROM130から読み込んで実行する。その結果、CPU600は、RAM140のスタックポインタ格納レジスタ103に格納されるアドレスに汎用レジスタ604の1番目のレジスタが保持している値を書き込む。
CPU600は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ604の0番目のレジスタは、保持していた値に1を加算した値を保持しなおす。
CPU600は、「MOV フラグ,D3」命令をROM130から読み込み、フラグレジスタ602が保持している「1」値を汎用レジスタ604の3番目のレジスタに保持する。
CPU600は、割込みハンドラの実処理の命令列の実行を完了し、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ604の0番目のレジスタに「0」値を保持する。また、CPU600は、SP初期値をRAM140から読み出しスタックポインタ格納レジスタ103に上書きする。
CPU600は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は保持していたアドレス値に定数値を加算した値を保持しなおす。
CPU600は、「MOV D3,フラグ」命令をROM130から読み込み、汎用レジスタ604の3番目のレジスタに保持する1値をフラグレジスタ602に書き込む。
CPU600は、「Bcc <ラベル2>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ602に格納される値が1であるので分岐しない。
CPU600は、「MOV (SP),D1」 の命令をROM130から読み込んで実行する。その結果、RAM140のスタックポインタ格納レジスタ103に格納されるアドレスに格納される値を汎用レジスタ604の1番目のレジスタに読み出す。
CPU600は、「PUTACX D0,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ604の1番目のレジスタが保持する値を第1演算結果格納レジスタ113に格納する。
CPU600は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ604の0番目のレジスタに保持するアドレス値に1を加算した値を保持する。
CPU600は、RAM140に退避した値を汎用レジスタ604に復帰する処理を行う。
CPU600は、「RTI」の命令をROM130から読み込んで実行する。その結果、通常処理の命令列2600に分岐し、「GETACX D2,D1」の命令を実行する。
以上に説明してきたように、本実施の形態6に置ける情報処理装置650は、拡張演算器が実際に拡張演算を実行しているか否かに応じて、データの退避を実行するかどうかを決定する。拡張演算器において拡張演算を行っていない場合や、行ったとしてもレジスタからのデータを取得した後などにおいては、割込みが発生した時にデータを退避させる必要がない。このような場合に、情報処理装置は、データを退避させる処理を省略することができる。
<実施の形態7>
上記実施の形態6において、拡張演算器において演算が実行されているか否かに応じて、レジスタからのデータの退避を実行するか否かを決定することを示した。本実施の形態7においては、実施の形態6に示した情報処理装置を発展させ、複数の演算器が搭載されている場合について、各レジスタごとにデータの退避の実行をするか否かを判断する場合について説明する。
<構成>
図27は、本実施の形態7における情報処理装置750の機能構成を示したブロック図である。
図27に示すように、情報処理装置750は、ROM130と、RAM140と、CPU700と、拡張演算器710とを含んで構成される。
CPU700は、CPU命令デコーダ101と、フラグレジスタ702と、スタックポインタ格納レジスタ103と、汎用レジスタ704とを含んで構成される。
拡張演算器710は、拡張演算器命令デコーダ111と、第1演算器112と、第1演算結果格納レジスタ113と、第2演算器114と、第2演算結果格納レジスタ115と、セレクタ716と、レジスタアクセス状況管理回路717とを含んで構成される。
なお、上記実施の形態1においては、第1演算器112や、第2演算器113における演算結果フラグを論理和回路118を介して出力する構成を有していたが、本実施の形態7においては、発明の特徴となる部分から外れるため省略している。
また、ここでは、実施の形態1と同名かつ同じ符号を付した機能部については、実施の形態1と同様の機能を果たすものとしてここでは説明を省略する。
レジスタアクセス状況管理回路717は、拡張演算器710に備えられている各演算器において演算が実行され、それぞれに対応するレジスタに演算に係るデータが格納されているか否かの情報を管理する機能を有する。レジスタアクセス状況管理回路717は、拡張演算器命令デコーダ111からの制御信号に基づいて、どの演算器において演算が実行されたかを認識し、その演算器に対応するビット値を「1」にする。また、「GETACX Dm,Dn命令」が実行されると、そのレジスタに対応する演算器のビット値を「0」にする。また、「GETSTT Dm,Dn命令」実行時には、保持する実行情報をセレクタ116に出力する機能も有する。また、「PUTSTT Dm,Dn命令」実行時には、Dnを実行情報として保持する機能を有する。
<コマンド>
ここから、本実施の形態7に係る各種命令について説明する。
<拡張演算命令>
図28は、ROM130からCPU700及び拡張演算器710に読み出される拡張演算器命令のニーモニック、CPUの動作、拡張演算器の動作の一例を示す図である。以下「MULQ Dm,Dn」命令、「DIVQ Dm,Dn」、「GETACX Dm,Dn」命令、「GETSTT Dm,Dn」及び「PUTSTT Dm,Dn」の命令を実行する際の動作について説明する。なお、「MULQ Dm,Dn」命令、「DIVQ Dm,Dn」、「GETACX Dm,Dn」命令については実施の形態1において説明した各命令と略同一であり、異なる部分、即ち、レジスタアクセス状況管理回路717の、各命令実行時の、動作についてのみ説明する。
<MULQ Dm,Dn命令>
拡張演算器710の各回路は、実施の形態1に示したように、「MULQ Dm,Dn」命令に基づいて、乗算を実行する。このとき、レジスタアクセス状況管理回路717は、第1演算器112が実行したことを検知し実行情報のビット0に1をセットする。なおビット0に1をセットするとは、例えば、「0b0000」を「0b0001」にすることであり、あるいは「0b1010」を「0b1011」にすることである。
<DIVQ Dm,Dn命令>
拡張演算器710の各回路は、実施の形態1に示したように、「DIVQ Dm,Dn」命令に基づいて、除算を実行する。このとき、レジスタアクセス状況管理回路717は、第2演算器114が実行したことを検知し実行情報のビット1に1をセットする。なお、ビット1に1をセットするとは、例えば、「0b0000」を「0b0010」にすることであり、あるいは「0b1001」を「0b1011」にすることである。
<GETACX Dm,Dn命令>
情報処理装置700は、「GETACX Dm,Dn」命令に基づいて、拡張演算器710のレジスタに格納されているデータの退避を実行する。以下では次の2つの場合についてのレジスタアクセス状況管理回路の動作を説明する。
(1)第1演算結果格納レジスタ113から値を読み出す場合
(2)第2演算結果格納レジスタ115から値を読み出す場合
(1)第1演算結果格納レジスタ113から値を読み出す場合
レジスタアクセス状況管理回路717は第1演算結果格納レジスタ113は保持する値が読み出されたことを検知し実行情報のビット0を「0」にクリアする。
(2)第2演算結果格納レジスタ115に値を書込む場合
レジスタアクセス状況管理回路717は第2演算結果格納レジスタ115は保持する値が読み出されたことを検知し実行情報のビット1を「0」にクリアする。
<GETSTT Dm,Dn命令>
「GETSTT Dm,Dn」命令は、CPU700が、各レジスタにデータが格納されているかどうかの情報を得るための命令である。
「GETSTT Dm,Dn」命令は、ROM130からCPU700及び拡張演算器710に読み出されることにより、CPU命令デコーダ101は「GETSTT Dm,Dn」命令をデコードし、CPU700内部の各回路に制御信号を出力する。また、拡張演算器命令デコーダ111は、「GETSTT Dm,Dn」命令をデコードし、拡張演算器710内部の各回路に制御信号を出力する。
レジスタアクセス状況管理回路717は、保持している実行情報をセレクタ716に出力する。セレクタ716は、拡張演算器命令デコーダ111から出力される制御信号によってレジスタアクセス状況管理回路717からの出力を選択してデータ出力バス122に出力する。
データ出力バス122は、実行情報をCPU700の汎用レジスタ704に転送する。汎用レジスタ704は、データ出力バス122の値を取得してn番目のレジスタに保持する。
<PUTSTT Dm,Dn命令>
「PUTSTT Dm,Dn」命令は、割込み発生時において退避させたレジスタアクセス状況管理回路717が保持していた各レジスタのアクセス状況の情報を復帰させるための命令である。
「PUTSTT Dm,Dn」命令は、ROM130からCPU700及び拡張演算器710に読み出され、CPU命令デコーダ101は、「PUTSTT Dm,Dn」命令をデコードし、CPU700内部の各回路に制御信号を出力する。また、拡張演算器命令デコーダ111は「PUTSTT Dm,Dn」命令をデコードし、拡張演算器710内部の各回路に制御信号を出力する。
汎用レジスタ704は、Dmを第1データ入力バス120に出力し、Dnを第2データ入力バス121に出力する。第1データ入力バス120は、Dmを拡張演算器710のレジスタアクセス状況管理回路717に転送する。レジスタアクセス状況管理回路717は、第1データ入力バス120から入力した値を実行情報として保持する。
<動作>
図29及び図30は、図2、図3、図10、図14、図18、図21、図22、図25、図28及び上記で説明した命令を用いたアセンブラプログラムの一例を示す命令列である。以下にこの命令列を実行する際の動作について説明する。
CPU700は、ROM130に格納された通常処理の命令列2900を処理する。
CPU700は、「MULQ D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113に積の上位ビット側結果が保持され、汎用レジスタ704の1番目のレジスタに積の下位ビット側結果が保持される。また、レジスタアクセス状況管理回路717は、第1演算器112が実行したことを検知し、実行情報のビット0に「1」をセットする。
CPU700は、割込みを受付けて、割込みハンドラの命令列2910のハンドラ先頭に分岐する。
CPU700は、割込みハンドラの命令列2910中の汎用レジスタ704の格納値をRAM140に退避する処理を行う。
CPU700は、「GETSTT D0,D3」の命令をROM130から読み込んで実行する。その結果、レジスタアクセス状況管理回路717が保持する実行情報0b0001を汎用レジスタ704の3番目のレジスタに書き込む。
CPU700は、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の0番目のレジスタに「0」値を保持する。CPU700は、SP初期値の記憶処理を行った後、命令列2911の命令を実行する。
CPU700は、「MOV D3,D2」の命令をROM130から読み込み、汎用レジスタ704の3番目のレジスタに保持する「0b0001」値を2番目のレジスタに保持にする。
CPU700は、「AND #0b0001,D2」の命令をROM130から読み込み、汎用レジスタ704の2番目のレジスタに保持にする「0b0001」値と「0b0001」との論理積を演算し、演算結果の「0b0001」値を汎用レジスタ704の2番目のレジスタに保持にする。
CPU700は、「MOV #0b0001,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の1番目のレジスタは、「0b0001」値を保持する。
CPU700は、「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、一致するため1値をフラグレジスタ703に書き込む。
CPU700は、「Bcc <ラベル1>」の命令をROM130から読み込んで実行する。その結果、CPU700は、フラグレジスタ703に格納される値が「1」であるので<ラベル1>に分岐しない。
CPU700は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103は、保持していたアドレス値に定数値を加算した値を保持する。
CPU700は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113が保持していた値が、汎用レジスタ704の1番目のレジスタに保持される。
CPU700は、「MOV D1,(SP)」 の命令をROM130から読み込んで実行する。その結果、RAM140のスタックポインタ格納レジスタ103に格納されるアドレスに汎用レジスタ704の1番目のレジスタに保持する値を書き込む。
CPU700は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の0番目のレジスタは、保持していた値に1を加算した値を保持しなおす。
CPU700は、「MOV D3,D2」の命令をROM130から読み込み、汎用レジスタ704の3番目のレジスタに保持する「0b0001」値を2番目のレジスタに保持する。
CPU700は、「AND #0b0010,D2」の命令をROM130から読み込んで実行する。その結果、CPU700は、汎用レジスタ704の2番目のレジスタに保持する「0b0001」値と「0b0010」との論理積を演算し、演算結果の「0b0000」値を汎用レジスタ704の2番目のレジスタに保持する。
CPU700は、「MOV #0b0010,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の1番目のレジスタは「0b0010」値を保持する。
CPU700は、「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、CPU700は、D1とD2とが一致しないため「0」値をフラグレジスタ703に書き込む。
CPU700は、「Bcc <ラベル2>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ703に格納される値が0であるので<ラベル2>に分岐する。
CPU700は、割込みハンドラの命令列の実行を完了する。CPU700は「MOV D3,D2」の命令をROM130から読み込み、汎用レジスタ704の3番目のレジスタに保持する「0b0001」値を2番目のレジスタに保持する。
CPU700は、「AND #0b0001,D2」の命令をROM130から読み込んで実行する。CPU700は、汎用レジスタ704の2番目のレジスタに保持する「0b0001」値と「0b0001」値との論理積を演算し、演算結果の「0b0001」値を汎用レジスタ704の2番目のレジスタに保持する。
CPU700は、「MOV #0b0001,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の1番目のレジスタは、「0b0001」値を保持する。
CPU700は、「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、一致するため1値をフラグレジスタ703に書き込む。
CPU700は、「Bcc <ラベル3>」の命令をROM130から読み込んで実行する。その結果、CPU700は、フラグレジスタ703に格納されている値が「1」であるので、<ラベル3>に分岐しない。
CPU700は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103に保持するアドレス値に定数値を加算した値を保持する。
CPU700は、「MOV (SP),D1」 の命令をROM130から読み込んで実行する。その結果、CPU700は、スタックポインタ格納レジスタ103に格納されるアドレス値で指定されるRAM140のアドレスに格納されている値を汎用レジスタ704の1番目のレジスタに読み出す。
CPU700は、「PUTACX D0,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の1番目のレジスタが保持している値が第1演算結果格納レジスタ113に格納される。
CPU700は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の0番目のレジスタは、保持していたアドレス値に1を加算した値を保持しなおす。
CPU700は、「MOV D3,D2」の命令をROM130から読み込み、汎用レジスタ704の3番目のレジスタが保持する「0b0001」値を、汎用レジスタ704の2番目のレジスタに保持する。
CPU700は、「AND #0b0010,D2」の命令をROM130から読み込み、汎用レジスタ704の2番目のレジスタが保持する「0b0001」値と「0b0010」との論理積を演算し、演算結果の「0b0000」値を汎用レジスタ704の2番目のレジスタに保持する。
CPU700は、「MOV #0b0010,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の1番目のレジスタに「0b0010」値を保持する。
CPU700は、「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、D1とD2とが一致しないため「0」値をフラグレジスタ703に書き込む。
CPU700は、「Bcc <ラベル4>」の命令をROM130から読み込んで実行する。その結果、CPU700は、フラグレジスタ703に格納されている値が「0」であるので<ラベル4>に分岐する。
CPU700は、「PUTSTT D3,D0」命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の3番目のレジスタに保持する実行情報「0b0001」をレジスタアクセス状況管理回路717に書き込む。
CPU700は、RAM140に汎用レジスタ704から退避した値を汎用レジスタ704に復帰する処理を行う。
CPU700は、「RTI」の命令をROM130から読み込んで実行する。その結果、通常処理の命令列2900に分岐する。
CPU700は、ROM130に格納された通常処理の命令列を処理する。
CPU700は、「CLR D0」の命令をROM130から読み込んで実行する。その結果汎用レジスタ704の0番目のレジスタに「0」値を保持する。
CPU700は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。その結果、第1演算結果格納レジスタ113が保持する値を汎用レジスタ704の1番目のレジスタに保持し、レジスタアクセス状況管理回路717が保持する実行情報のビット0をクリア、即ち「0」にする。
CPU700は、「DIVQ D0,D1」の命令をROM130から読み込んで実行する。その結果、第2演算結果格納レジスタ115に剰余の値が保持され、汎用レジスタ704の1番目のレジスタに演算結果の商が保持される。また、レジスタアクセス状況管理回路717は、第2演算器114が実行したことを検知し、実行情報のビット1に「1」をセットする。
CPU700は、割込みを受付けて、割込みハンドラの命令列2920のハンドラ先頭に分岐する。
CPU700は、割込みハンドラの命令列2920中の汎用レジスタ704の格納値をRAM140に退避する処理を行う。
CPU700は、「GETSTT D0,D3」の命令をROM130から読み込んで実行する。その結果、CPU700は、レジスタアクセス状況管理回路717が保持していた実行情報「0b0010」を、汎用レジスタ704の3番目のレジスタに書き込む。
CPU700は、「CLR D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の0番目のレジスタに「0」値を保持する。また、CPU700は、SP初期値を記憶する処理を実行し、命令列2921を実行する。
CPU700は、「MOV D3,D2」の命令をROM130から読み込み、汎用レジスタ704の3番目のレジスタに保持する「0b0010」値を2番目のレジスタに保持にする。
CPU700は、「AND #0b0001,D2」の命令をROM130から読み込み、汎用レジスタ704の2番目のレジスタに保持にする「0b0010」値と「0b0001」値との論理積を演算し、演算結果の「0b0000」値を汎用レジスタ704の2番目のレジスタに保持する。
CPU700は、「MOV #0b0001,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の1番目のレジスタに「0b0001」値を保持する。
CPU700は、「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、D1とD2とが一致しないため「0」値をフラグレジスタ703に書き込む。
CPU700は、「Bcc <ラベル1>」の命令をROM130から読み込んで実行する。その結果、CPU700は、フラグレジスタ703に格納されている値が「0」であるので<ラベル1>分岐する。
CPU700は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の0番目のレジスタに保持するアドレス値に1を加算した値を保持する。
CPU700は、「MOV D3,D2」の命令をROM130から読み込み、汎用レジスタ704の3番目のレジスタに保持する「0b0010」値を2番目のレジスタに保持にする。
CPU700は、「AND #0b0010,D2」の命令をROM130から読み込み、汎用レジスタ704の2番目のレジスタが保持する「0b0010」値と「0b0010」値との論理積を演算し、演算結果の「0b0010」値を汎用レジスタ704の2番目のレジスタに保持する。
CPU700は、「MOV #0b0010,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の1番目のレジスタに「0b0010」値を保持する。
CPU700は、「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、一致するため1値をフラグレジスタ703に書き込む。
CPU700は、「Bcc <ラベル2>」の命令をROM130から読み込んで実行する。その結果、CPU700は、フラグレジスタ703に格納されている値が「1」であるので<ラベル2>に分岐しない。
CPU700は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103に保持するアドレス値に定数値を加算した値を保持する。
CPU700は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。その結果、第2演算結果格納レジスタ115が保持する値を汎用レジスタ704の1番目のレジスタに保持する。
CPU700は、「MOV D1,(SP)」 の命令をROM130から読み込んで実行する。その結果、RAM140のスタックポインタ格納レジスタ103に、汎用レジスタ704の1番目のレジスタが保持する値を書き込む。
そして、CPU700は、割込みハンドラの実際の処理を実行する。
CPU700は、割込みハンドラの命令列の実行を完了すると、「MOV D3,D2」の命令をROM130から読み込み、汎用レジスタ704の3番目のレジスタに保持する「0b0010」値を2番目のレジスタに保持にする。
CPU700は、「AND #0b0001,D2」の命令をROM130から読み込み、汎用レジスタ704の2番目のレジスタに保持する「0b0010」値と「0b0001」との論理積を演算し、演算結果の「0b0000」値を汎用レジスタ704の2番目のレジスタに保持する。
CPU700は、「MOV #0b0001,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の1番目のレジスタは、「0b0001」値を保持する。
CPU700は、「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、一致しないため0値をフラグレジスタ703に書き込む。
CPU700は、「Bcc <ラベル3>」の命令をROM130から読み込んで実行する。その結果、フラグレジスタ703に格納されている値が「0」であるので<ラベル3>に分岐する。
CPU700は、「INC D0」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の0番目のレジスタは、保持していた値に1を加算した値を保持しなおす。
CPU700は、「MOV D3,D2」の命令をROM130から読み込み、汎用レジスタ704の3番目のレジスタが保持する「0b0010」値を2番目のレジスタに保持する。
CPU700は、「AND #0b0010,D2」の命令をROM130から読み込み、汎用レジスタ704の2番目のレジスタが保持している「0b0010」値と「0b0010」との論理積を演算し、演算結果の「0b0010」値を汎用レジスタ704の番目のレジスタに保持する。
CPU700は、「MOV #0b0010,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の1番目のレジスタは「0b0010」値を保持する。
CPU700は「CMP D1,D2」の命令をROM130から読み込んで実行する。その結果、D1とD2とが一致するため、CPU700は、「1」値をフラグレジスタ703に書き込む。
CPU700は、「Bcc <ラベル4>」の命令をROM130から読み込んで実行する。その結果、CPU700は、フラグレジスタ703に格納されている値が「1」であるので<ラベル4>に分岐しない。
CPU700は、「INC SP」の命令をROM130から読み込んで実行する。その結果、スタックポインタ格納レジスタ103に保持するアドレス値に定数値を加算した値を保持する。
CPU700は、「MOV (SP),D1」 の命令をROM130から読み込んで実行する。その結果、RAM140のスタックポインタ格納レジスタ103に格納されるアドレスに格納される値を汎用レジスタ704の1番目のレジスタに読み出す。
CPU700は、「PUTACX D0,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の1番目のレジスタが保持する値を第2演算結果格納レジスタ115に格納する。
CPU700は、「PUTSTT D3,D0」命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の3番目のレジスタに保持する実行情報「0b0010」をレジスタアクセス状況管理回路717に書き込む。
CPU700は、RAM140に退避した値を汎用レジスタ704に復帰する処理を行う。CPU700は「RTI」の命令をROM130から読み込んで実行する。その結果、通常処理の命令列に分岐する。
CPU700は、ROM130に格納された通常処理の命令列を処理する。
CPU700は、「MOV #1,D1」の命令をROM130から読み込んで実行する。その結果、汎用レジスタ704の1番目のレジスタに「1」値を保持する。
CPU700は、「GETACX D0,D1」の命令をROM130から読み込んで実行する。その結果、第2演算結果格納レジスタ115が保持する値を汎用レジスタ704の1番目のレジスタに保持し、レジスタアクセス状況管理回路717が保持する実行情報のビット1をクリアする。
以上に説明してきたように、本実施の形態7においては、レジスタアクセス状況管理回路が各レジスタ毎に、データを格納しているかどうかを認識している。そして、各レジスタ毎のアクセス状況を示す情報が、割込み発生時に拡張演算器からCPUに伝達されるので、CPUは、その情報に基づいてレジスタを指定するレジスタ情報を、過不足なく、第1データ入力バス120に出力することができる。即ち、データが格納されているレジスタのみからデータを退避させているので、データがないレジスタからのデータの退避を促していた場合のオーバーヘッドを短縮できる。
<補足>
本発明の情報処理装置の実施の形態を、上記実施の形態に基づいて説明してきたが、本発明がこれらの実施の形態に限定されるものではないことは勿論である。以下、情報処理装置の変形例を説明する。
(1)上記実施の形態においては、各演算機が演算にかかるデータを保持する形で図示し、各演算器がそれぞれの保持するレジスタの値を出力、あるいは与えられたデータや算出したデータを格納することとした。しかし、これ以外にも、例えば図31に示すような構成をとってもよい。
図31に示すように、情報処理装置850は、ROM130と、RAM140と、CPU800と、拡張演算器810とを含んで構成される。
CPU800は、CPU命令デコーダ101と、フラグレジスタ102と、スタックポインタ格納レジスタ103と、汎用レジスタ104とを含んで構成される。
拡張演算器810は、拡張演算器命令デコーダ111と、第1演算器111と、第1演算結果格納レジスタ113と、第2演算器114と、第2演算結果格納レジスタ115と、セレクタ116と、拡張演算器譲歩出力回路117と、論理和回路118と、第1演算入力データ格納レジスタ801と、第2演算入力データ格納レジスタ802、803とを含んで構成される。
基本的に、各機能部は、上記実施の形態1に示した内容で動作する。但し、上記実施の形態1とは、異なり、演算に係るデータを格納するレジスタが第1演算器内部にはない構成になっている。
そして、各演算器に代わって、拡張演算器810の各レジスタからのデータの出力とデータの格納とを拡張演算器命令デコーダ111が実行することとしてもよい。
各実施の形態における情報処理装置は、このように演算器内部にレジスタがない構成にしてもよい。
(2)上記実施の形態においては、搭載演算器情報出力回路117は、搭載する演算器数と同じ値が入力された際に「1」値を出力する例を示したが、演算器数よりも大きい値を入力された際に「1」値を出力することでも同様の効果が得られることが可能となる。
(3)上記実施の形態においては、情報処理装置を32ビットマイコンとして説明したが、これは32ビットに限定するものではなく、例えば64ビットであってもよい。
(4)上記実施の形態においては、「PUTACX」命令により、割込み終了後にデータを格納する処理において、第1演算結果格納レジスタ113から順にデータを格納する手法をとった。
これは、逆順、即ち、第2演算結果格納レジスタ115からデータを格納してもよい。この場合、D0は、フラグレジスタ102が「1」になった時点のD0の値を記憶しておき、「PUTACX」命令実行時には記憶しておいたD0から1ずつ、「0」になるまでデクリメントしていく構成にしてもよい。
(5)上記実施の形態においては、データ入力バス2本と、データ出力バスとをわけて記載したが、バス上を流れるデータがそれぞれ、どの機能部にあてたものであるかが認識できる構成、例えばデータのヘッダとして識別子を付す構成にするならば、当該バスラインは共有されていてもよい。
本発明に係る情報処理装置は、少ない拡張演算命令数で割込み発生時の拡張演算器からのデータの退避とその復帰が可能な情報処理装置として有用である。
実施の形態1に係る情報処理装置150の機能構成を示したブロック図である。 ROM130からCPU100及び拡張演算器110に読み出される拡張演算器命令のニーモニック、CPUの動作、拡張演算器の動作の一例を示した表である。 CPU100からRAM140に対してデータの退避・復帰の際に用いられるCPU実行命令のニーモニック、CPUの動作の一例を示した表である。 「GETACX」命令実行時の拡張演算器命令デコーダ111の動作を示したフローチャートである。 「PUTACX」命令実行時の拡張演算器命令デコーダ111の動作を示したフローチャートである。 実施の形態1に係るアセンブラプログラムの一例を示す命令列を示す図である。 実施の形態2に係る情報処理装置250の機能構成を示したブロック図である。 ROM130から読み出され、CPU200からRAM140に対してデータの退避・復帰の際に用いられる命令のニーモニック、CPUの動作の一例を示した表である。 実施の形態2におけるリセット時の情報処理装置の動作を示したフローチャートである。 実施の形態2に係るアセンブラプログラムの一例を示す命令列を示す図である。 実施の形態3に係る情報処理装置350の機能構成を示したブロック図である。 ROM130からCPU300及び拡張演算器310に読み出される拡張演算器命令のニーモニック、CPUの動作、拡張演算器の動作の一例を示した表である。 CPU300からRAM140に対してデータの退避・復帰の際に用いられる命令のニーモニック、CPUの動作の一例を示した表である。 実施の形態3に係るアセンブラプログラムの一例を示す命令列を示す図である。 実施の形態3に係るアセンブラプログラムの一例を示す命令列を示す図である。 実施の形態4に係る情報処理装置450の機能構成を示したブロック図である。 ROM130からCPU400及び拡張演算器410に読み出される拡張演算器命令のニーモニック、CPUの動作、拡張演算器の動作の一例を示した表である。 レベル0割込み発生時のアセンブラプログラムの一例を示す命令列を示す図である。 レベル1割込み発生時のアセンブラプログラムの一例を示す命令列を示す図である。 実施の形態5に係る情報処理装置550の機能構成を示したブロック図である。 ROM130からCPU500及び拡張演算器510に読み出される拡張演算器命令のニーモニック、CPUの動作、拡張演算器の動作の一例を示した表である。 タスク切り替え発生時のアセンブラプログラムの一例を示す命令列を示す図である。 実施の形態6に係る情報処理装置650の機能構成を示したブロック図である。 ROM130からCPU600及び拡張演算器610に読み出される拡張演算器命令のニーモニック、CPUの動作、拡張演算器の動作の一例を示した表である。 CPU600からRAM140に対してデータの退避・復帰の際に用いられる命令のニーモニック、CPUの動作の一例を示した表である。 実施の形態6に係るアセンブラプログラムの一例を示す命令列を示す図である。 実施の形態7に係る情報処理装置750の機能構成を示したブロック図である。 ROM130からCPU700及び拡張演算器710に読み出される拡張演算器命令のニーモニック、CPUの動作、拡張演算器の動作の一例を示す表である。 実施の形態7に係るアセンブラプログラムの一例を示す命令列を示す図である。 実施の形態7に係るアセンブラプログラムの一例を示す命令列を示す図である。 実施の形態以外の情報処理装置の機能構成例を示したブロック図である。
符号の説明
100、200、300、400、500、600、700 CPU
101 CPU命令デコーダ
102、202、602、702 フラグレジスタ
103 スタックポインタ格納レジスタ
104 汎用レジスタ
110、210、310、410、510、610、710 拡張演算器
111 拡張演算器命令デコーダ
112 第1演算器
113、213、313 第1演算結果格納レジスタ
114 第2演算器
115 第2演算結果格納レジスタ
116、716 セレクタ
117 拡張演算器情報出力回路
118 AND回路
120 第1データ入力バス
121 第2データ入力バス
122 データ出力バス
130 ROM
140 RAM
150、250、350、450、550、650、750 情報処理装置
211 レジスタ数発生器
311 レジスタ情報発生器
417 退避レベル対応搭載演算器情報出力回路
517 実行タスク管理回路
518 拡張演算器実行フラグ
617 レジスタアクセス管理回路
717 レジスタアクセス状況管理回路

Claims (15)

  1. 命令列中の各命令を逐次解読して実行するCPUと、前記CPUと第1バス及び第2バスで接続され、演算に係るデータを格納するための1以上のレジスタを有し、前記CPUが解読中の命令を共に解読して、当該命令に係る演算を前記CPUが前記第1バスに出力したデータに基づいて実行し、演算結果を前記第2バスに出力する拡張演算器とから構成される情報処理装置であって、
    前記CPUは、
    解読対象の命令が、前記拡張演算器のレジスタ内のデータを取得するための取得命令であったときには、前記拡張演算器のレジスタを指定するためのレジスタ情報を前記第1バスに出力し、前記第2バスを介して当該レジスタに格納されていたデータを取得する情報取得手段を備え、
    前記拡張演算器は、
    解読対象の命令が前記取得命令であったときには、前記第1バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを退避させるレジスタを特定する退避レジスタ特定手段と、
    前記退避レジスタ特定手段により特定されるレジスタ内のデータを前記第2バスに出力するデータ出力手段とを備える
    ことを特徴とする情報処理装置。
  2. 前記情報処理装置はさらに、前記拡張演算器における演算の結果としてのフラグが前記拡張演算器から前記CPUに出力されるための信号線を備え、
    前記CPUは、さらに、
    前記信号線を介して、拡張演算器からデータの取得が終了したかどうかを示すフラグを受信し、保持していたフラグを受信したフラグで書き換える保持手段を備え、
    前記レジスタ情報は、レジスタを指定するためのレジスタ番号であり、
    前記情報取得手段は、
    前記レジスタ番号を出力する都度、前記レジスタ番号に1加算して、前記第1バスに出力するレジスタ番号出力手段を備え、
    前記拡張演算器は、さらに、
    前記拡張演算器からデータの退避が必要なレジスタの合計数と、前記第1バスに出力されているレジスタ番号nとを比較し、レジスタ番号nが前記合計数以上である場合に、前記フラグをデータの退避が終了したことを示す情報にして出力する出力手段を備え、
    前記退避レジスタ特定手段は、前記レジスタ番号に基づいてデータを退避させるレジスタを特定し、
    前記レジスタ番号出力手段は、前記保持手段が保持しているフラグが、データの退避が終了したことを示す情報に書き換えられているときに、前記第1バスへのレジスタ情報の出力を終了する
    ことを特徴とする請求項1記載の情報処理装置。
  3. 前記第1バスは、少なくとも、第1のデータを転送するための第1入力バスと、第2のデータを転送するための第2入力バスとから構成され、
    前記CPUは、さらに、
    前記情報取得手段により前記第2バスから取得されるデータを、逐次、格納アドレス値を所定値ごとに加算して、メモリに記録する記録手段と、
    解読対象の命令が、前記取得命令により取得した一のレジスタからのデータを、当該一のレジスタに格納しなおすための格納命令であった場合には、当該一のレジスタから退避させていたデータを前記メモリから読み出し、読み出したデータを前記第1入力に、当該一のレジスタを指定するレジスタ番号を前記第2入力バスに出力する格納指示手段とを備え、
    前記拡張演算器は、さらに、
    解読対象の命令が、前記格納命令であった場合には、前記第1バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを格納させるレジスタを特定する格納レジスタ特定手段と、
    前記特定手段により特定されるレジスタに、前記第1バスを介して取得したデータを格納する格納手段とを備える
    ことを特徴とする請求項2記載の情報処理装置。
  4. 前記拡張演算器は、さらに、
    前記レジスタの個数を示すレジスタ数を記憶するレジスタ数記憶手段と、
    前記CPUに対して前記レジスタ数を前記第2バスに出力するレジスタ数出力手段と、
    解読対象の命令が前記格納命令であったときに、前記第1バスを介して得られた数値で指定されるレジスタに、前記第1バスを介して得られるデータを格納するデータ格納手段とを備え、
    前記CPUは、さらに、
    前記レジスタ数出力手段により出力された前記レジスタ数を記憶するレジスタ数記憶手段を備え、
    前記レジスタ情報は、レジスタを指定するための番号であり、
    前記情報取得手段は、前記番号を1ずつ加算して、逐次前記第1バスにレジスタ数と、データを出力する第2レジスタ数出力手段を備え、
    前記第2レジスタ数出力手段は、前記番号と前記レジスタ数とが一致した数値を最後に、前記第1バスへのレジスタ数の出力を終了する
    ことを特徴とする請求項1記載の情報処理装置。
  5. 前記CPUは、さらに、
    前記情報取得手段により前記第2バスから取得されるデータを、逐次、格納アドレス値を所定値ごとに加算して、メモリに記録する記録手段と、
    解読対象の命令が、前記メモリに記録したデータをレジスタに格納しなおすための格納命令であった場合には、前記メモリに格納されているデータを、指定アドレス値を前記所定値ごとに加算して、レジスタを指定する数値とともに前記第1バスに出力する格納指示手段を備え、
    前記拡張演算器は、
    解読対象の命令が、前記格納命令であった場合には、前記特定手段により特定されるレジスタに、当該レジスタを特定するために用いたレジスタ情報と共に取得したデータを格納する格納手段を備える
    ことを特徴とする請求項4記載の情報処理装置。
  6. 前記レジスタ数出力手段は、前記レジスタ数を情報処理装置を初期化した時に前記CPUに対して出力する
    ことを特徴とする請求項5記載の情報処理装置。
  7. 前記拡張演算器は、さらに、
    前記拡張演算器に備えられている演算器の種類を示す演算器情報を出力する演算器情報出力手段を備え、
    前記CPUは、さらに、
    前記演算器情報を記憶する演算器情報記憶手段と、
    前記演算器情報に基づいて出力するレジスタ情報を決定する決定手段とを備え、
    前記情報取得手段は、前記決定手段により決定されたレジスタ情報の前記第1バスに出力する
    ことを特徴とする請求項1記載の情報処理装置。
  8. 前記CPUは、さらに、
    前記情報取得手段により前記第2バスから取得されるデータを、逐次、格納アドレス値を所定値ごとに加算して、メモリに記録する記録手段と、
    解読対象の命令が、前記取得命令により取得した一のレジスタからのデータを、当該一のレジスタに格納しなおすための格納命令であった場合には、当該一のレジスタから退避させていたデータを前記メモリから読み出し、読み出したデータと当該一のレジスタを指定するレジスタ番号とを前記第1バスに出力する格納指示手段とを備え、
    前記拡張演算器は、さらに、
    解読対象の命令が、前記格納命令であった場合には、前記第1バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを格納させるレジスタを特定する格納レジスタ特定手段と、
    前記特定手段により特定されるレジスタに、前記第1バスを介して取得したデータを格納する格納手段とを備える
    ことを特徴とする請求項7記載の情報処理装置
  9. 前記演算器情報出力手段は、前記演算器情報を情報処理装置のリセット時に前記CPUに対して出力する
    ことを特徴とする請求項7記載の情報処理装置。
  10. 前記情報処理装置は、実行していた処理に対して割込みが発生した場合に前記取得命令を実行し、当該割込みには、当該割込みにおいて実行する処理内容に応じて割込みレベルが設定されており、
    前記拡張演算器は、
    前記割込みレベルに応じて、データを退避させるレジスタ数を決定する決定手段と、
    前記取得命令に応じて、前記決定手段により決定されたレジスタ数に基づいて、データを出力するレジスタを決定するレベル対応決定手段を供え、
    前記出力手段は、前記決定手段により決定されたレジスタ数と、前記レジスタ番号とが一致したときに、前記フラグをデータの退避が終了したことを示す情報にして出力する
    ことを特徴とする請求項1記載の情報処理装置。
  11. 前記CPUは、さらに、
    前記情報取得手段により前記第2バスから取得されるデータを、逐次、格納アドレス値を所定値ごとに加算して、メモリに記録する記録手段と、
    解読対象の命令が、前記割込みレベルに応じて前記取得命令により取得した一のレジスタからのデータを、当該一のレジスタに格納しなおすための格納命令であった場合には、当該一のレジスタから退避させていたデータを前記メモリから読み出し、読み出したデータと当該一のレジスタを指定するレジスタ番号とを前記第1バスに出力する格納指示手段とを備え、
    前記拡張演算器は、さらに、
    解読対象の命令が、前記格納命令であった場合には、前記第1バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを格納させるレジスタを特定する格納レジスタ特定手段と、
    前記特定手段により特定されるレジスタに、前記第1バスを介して取得したデータを格納する格納手段とを備える
    ことを特徴とする請求項10記載の情報処理装置。
  12. 前記拡張演算器は、第1のタスクと第2のタスクとを切り替えて実行することが可能な演算器であり、
    前記拡張演算器は、さらに、
    第1のタスクを実行中に第2のタスクに切り替える場合であって、第1のタスクにおいて実行した演算に係るデータがレジスタに格納されている場合に、前記CPUに対して割込みの発生を要求する割込み要求手段を備え、
    前記CPUは、前記割込み要求に対応して割込みを発生させ、
    当該割込みに応じて前記CPUと前記拡張演算器とは前記取得命令を実行する
    ことを特徴とする請求項1記載の情報処理装置。
  13. 前記拡張演算器は、さらに、
    演算を実行した否かを示す演算実行情報を記憶する演算実行情報記憶手段と、
    前記取得命令を解読したときに、前記演算実行情報を前記CPUに出力する演算実行情報出力手段を備え、
    前記CPUは、前記取得命令を解読した場合であって、前記演算実行情報が前記拡張演算器において演算が実行されていることを示していたときには、拡張演算器のレジスタからのデータの取得を実行し、前記演算実行情報が前記拡張演算器において演算が実行されていることを示していたときには、前記拡張演算器のレジスタからのデータの取得を実行しない
    ことを特徴とする請求項2記載の情報処理装置。
  14. 前記演算情報実行記憶手段は、さらに、前記拡張演算器において各レジスタごとに演算に係るデータを格納しているか否かを示すレジスタ対応演算実行情報を記憶し、
    前記拡張演算器は、さらに、前記CPUに前記レジスタ対応演算実行情報を出力するレジスタ対応演算実行情報出力手段を備え、
    前記CPUは、
    前記レジスタ対応演算実行情報に基づいて、前記取得命令を解読したときにレジスタを指定するレジスタ情報を前記第1バスに出力する
    ことを特徴とする請求項13記載の情報処理装置。
  15. 前記CPUは、さらに、
    前記情報取得手段により前記第2バスから取得されるデータを、逐次、格納アドレス値を所定値ごとに加算して、メモリに記録する記録手段と、
    解読対象の命令が、前記取得命令により取得した一のレジスタからのデータを、当該一のレジスタに格納しなおすための格納命令であった場合には、当該一のレジスタから退避させていたデータを前記メモリから読み出し、読み出したデータと当該一のレジスタを指定するレジスタ番号とを前記第1バスに出力する格納指示手段とを備え、
    前記拡張演算器は、さらに、
    解読対象の命令が、前記格納命令であった場合には、前記第1バスを介して前記レジスタ情報を取得して当該レジスタ情報に基づいて、データを格納させるレジスタを特定する格納レジスタ特定手段と、
    前記特定手段により特定されるレジスタに、前記第1バスを介して取得したデータを格納する格納手段とを備える
    ことを特徴とする請求項13記載の情報処理装置。
JP2007159388A 2007-06-15 2007-06-15 情報処理装置 Withdrawn JP2008310693A (ja)

Priority Applications (3)

Application Number Priority Date Filing Date Title
JP2007159388A JP2008310693A (ja) 2007-06-15 2007-06-15 情報処理装置
US12/033,538 US7877576B2 (en) 2007-06-15 2008-02-19 Processing system having co-processor for storing data
CNA2008100950386A CN101324839A (zh) 2007-06-15 2008-04-23 信息处理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2007159388A JP2008310693A (ja) 2007-06-15 2007-06-15 情報処理装置

Publications (1)

Publication Number Publication Date
JP2008310693A true JP2008310693A (ja) 2008-12-25

Family

ID=40133445

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2007159388A Withdrawn JP2008310693A (ja) 2007-06-15 2007-06-15 情報処理装置

Country Status (3)

Country Link
US (1) US7877576B2 (ja)
JP (1) JP2008310693A (ja)
CN (1) CN101324839A (ja)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPWO2011135759A1 (ja) * 2010-04-30 2013-07-18 日本電気株式会社 情報処理装置及びタスク切り替え方法
EP2787444A2 (en) 2013-04-01 2014-10-08 Nec Corporation Central processing unit, information processing apparatus, and intra-virtual-core register value acquisition method
JP2015185076A (ja) * 2014-03-26 2015-10-22 株式会社メガチップス Vliwプロセッサ

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101395260B1 (ko) * 2009-11-30 2014-05-15 라코르스 게엠바하 마이크로프로세서 및 마이크로프로세서 상에서의 향상된 정밀 곱들의 합 계산 방법
CN103970709A (zh) * 2014-04-29 2014-08-06 国家电网公司 一种fft协处理器与主处理器通信方法
CN104572133B (zh) * 2015-02-06 2020-05-08 上海莉莉丝科技股份有限公司 一种用于执行计算任务中多用户的操作的方法与设备
CN111338826B (zh) * 2020-02-28 2021-02-02 北京嘀嘀无限科技发展有限公司 一种电子设备以及设备联动控制系统、方法

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2987308B2 (ja) 1995-04-28 1999-12-06 松下電器産業株式会社 情報処理装置
GB2317469B (en) 1996-09-23 2001-02-21 Advanced Risc Mach Ltd Data processing system register control
US5983338A (en) * 1997-09-05 1999-11-09 Motorola, Inc. Method and apparatus for interfacing a processor to a coprocessor for communicating register write information
US6434689B2 (en) * 1998-11-09 2002-08-13 Infineon Technologies North America Corp. Data processing unit with interface for sharing registers by a processor and a coprocessor
US7395410B2 (en) 2004-07-06 2008-07-01 Matsushita Electric Industrial Co., Ltd. Processor system with an improved instruction decode control unit that controls data transfer between processor and coprocessor

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPWO2011135759A1 (ja) * 2010-04-30 2013-07-18 日本電気株式会社 情報処理装置及びタスク切り替え方法
JP5776688B2 (ja) * 2010-04-30 2015-09-09 日本電気株式会社 情報処理装置及びタスク切り替え方法
EP2787444A2 (en) 2013-04-01 2014-10-08 Nec Corporation Central processing unit, information processing apparatus, and intra-virtual-core register value acquisition method
US9690603B2 (en) 2013-04-01 2017-06-27 Nec Corporation Central processing unit, information processing apparatus, and intra-virtual-core register value acquisition method
JP2015185076A (ja) * 2014-03-26 2015-10-22 株式会社メガチップス Vliwプロセッサ

Also Published As

Publication number Publication date
CN101324839A (zh) 2008-12-17
US7877576B2 (en) 2011-01-25
US20080313429A1 (en) 2008-12-18

Similar Documents

Publication Publication Date Title
JP5889986B2 (ja) 実行された命令の結果を選択的にコミットするためのシステムおよび方法
CN106648843B (zh) 用于改善连续的事务性存储器区的吞吐量的系统、方法和装置
US7434024B2 (en) SIMD processor with register addressing, buffer stall and methods
US7624253B2 (en) Determining register availability for register renaming
US8707015B2 (en) Reclaiming physical registers renamed as microcode architectural registers to be available for renaming as instruction set architectural registers based on an active status indicator
US20170031685A1 (en) Apparatus with reduced hardware register set
JP2008310693A (ja) 情報処理装置
CN108319559B (zh) 用于控制矢量内存存取的数据处理装置及方法
CN113703832A (zh) 一种立即数转移指令的执行方法、装置及介质
US8151096B2 (en) Method to improve branch prediction latency
CN107870780B (zh) 数据处理装置和方法
JP4243271B2 (ja) データ処理装置およびデータ処理方法
JP4985452B2 (ja) ベクトル処理装置
KR20090023418A (ko) 프로세서 및 코프로세서를 인터페이싱하는 방법 및 장치
TWI770079B (zh) 向量產生指令
CN111814093A (zh) 一种乘累加指令的处理方法和处理装置
JP2004192021A (ja) マイクロプロセッサ
CN107003855B (zh) 带进位的原子加法指令
US7565511B2 (en) Working register file entries with instruction based lifetime
JP3554211B2 (ja) マイクロプログラムを用いた命令制御装置および方法
CN114514505A (zh) 退役队列压缩
JP2006293741A (ja) プロセッサ
JP5480793B2 (ja) プログラマブルコントローラ
CN109002322B (zh) 用于执行部件模块级验证的寄存器分配与释放方法及部件
US11036503B2 (en) Predicate indicator generation for vector processing operations

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20100305

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20110907

A761 Written withdrawal of application

Free format text: JAPANESE INTERMEDIATE CODE: A761

Effective date: 20110908