CN101324839A - 信息处理装置 - Google Patents
信息处理装置 Download PDFInfo
- Publication number
- CN101324839A CN101324839A CNA2008100950386A CN200810095038A CN101324839A CN 101324839 A CN101324839 A CN 101324839A CN A2008100950386 A CNA2008100950386 A CN A2008100950386A CN 200810095038 A CN200810095038 A CN 200810095038A CN 101324839 A CN101324839 A CN 101324839A
- Authority
- CN
- China
- Prior art keywords
- register
- cpu
- instruction
- data
- 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.)
- Pending
Links
- 230000010365 information processing Effects 0.000 title abstract description 4
- 238000004364 calculation method Methods 0.000 claims abstract description 208
- 238000003860 storage Methods 0.000 claims description 315
- 230000003750 conditioning effect Effects 0.000 claims description 105
- 238000012545 processing Methods 0.000 claims description 82
- 230000014509 gene expression Effects 0.000 claims description 71
- 238000011084 recovery Methods 0.000 claims description 23
- 230000005540 biological transmission Effects 0.000 claims description 15
- 230000000295 complement effect Effects 0.000 claims description 10
- 238000006243 chemical reaction Methods 0.000 claims description 4
- 230000004044 response Effects 0.000 claims description 2
- 238000000034 method Methods 0.000 description 42
- 230000008569 process Effects 0.000 description 36
- 238000007726 management method Methods 0.000 description 27
- ODYAQBDIXCVKAE-UHFFFAOYSA-N 4-[4-(2-fluorophenyl)phenyl]-N-(4-hydroxyphenyl)butanamide Chemical compound C1=CC(O)=CC=C1NC(=O)CCCC1=CC=C(C=2C(=CC=CC=2)F)C=C1 ODYAQBDIXCVKAE-UHFFFAOYSA-N 0.000 description 14
- 101000711846 Homo sapiens Transcription factor SOX-9 Proteins 0.000 description 14
- 102100034204 Transcription factor SOX-9 Human genes 0.000 description 14
- 230000006870 function Effects 0.000 description 13
- 238000004321 preservation Methods 0.000 description 11
- 238000013500 data storage Methods 0.000 description 9
- 230000000694 effects Effects 0.000 description 4
- 230000004048 modification Effects 0.000 description 4
- 238000012986 modification Methods 0.000 description 4
- 241001269238 Data Species 0.000 description 3
- 230000014759 maintenance of location Effects 0.000 description 2
- 230000032696 parturition Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000008859 change Effects 0.000 description 1
- 238000012790 confirmation Methods 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 238000012423 maintenance Methods 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
- G06F9/30043—LOAD or STORE instructions; Clear instruction
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/30032—Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30181—Instruction operation extension or modification
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3853—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3877—Concurrent instruction execution, e.g. pipeline, look ahead using a slave processor, e.g. coprocessor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline, look ahead
- G06F9/3885—Concurrent instruction execution, e.g. pipeline, look ahead using a plurality of independent parallel functional units
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- Computational Mathematics (AREA)
- Mathematical Analysis (AREA)
- Mathematical Optimization (AREA)
- Pure & Applied Mathematics (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
当本发明公开了一种信息处理装置,其在发生中断时,单个专用指令“GETACX Dm,Dn”的执行完成了从所有寄存器保存需要的数据。“Dm”为从通用寄存器组104向第一数据输入总线120输出的值。实施在协处理器110中的每个计算单元识别存储在其中的值。如果值“Dm”指定一个计算单元,该指定的计算单元向选择器116输出存储在指定的计算单元中包括的寄存器中的数据。实施的计算单元信息输出电路117将实施在协处理器110中的计算单元的数量存储在其中。如果第一数据输入总线120的值大于计算单元的数量,则实施的计算单元信息输出电路117向标志寄存器102输出值“1”。基于存储在标志寄存器102中的值为“1”的事实,CPU 100确认从寄存器保存数据已经完成。
Description
技术领域
本发明涉及一种由CPU和协处理器构成的信息处理装置。本发明尤其涉及与由协处理器执行的计算有关的数据的保存以及该保存的数据的恢复。
背景技术
一些信息处理装置具有CPU和连接到CPU的协处理器,用于改进信息处理装置的基本性能。
作为这种信息处理装置的一个示例,专利文献1(专利号为2987308的日本专利)公开了一种信息处理装置,该装置具有主要运行以执行处理的CPU和物理连接到CPU并执行特殊计算的协处理器。协处理器解码与CPU解码的指令相同的指令。如果解码的指令是可执行的,则当有关计算的数据从CPU提供出来时,协处理器执行计算。协处理器向CPU输出计算的结果。在协处理器执行计算的同时,CPU执行其它指令。因此,改进了信息处理装置的基本性能。
通过制造按照用途具有不同结构的协处理器并且将这种协处理器连接到CPU,可以无需修改CPU的物理结构而容易地改进信息处理装置的性能。同时,由于只有协处理器的结构需要按照用途修改,与制造为指定用途专门设计的一种新的信息处理装置的情况相比,可以减少开发这种信息处理装置需要的时间周期。
这里,专利文献1公开的信息处理装置的协处理器在协处理器中包括的寄存器中临时存储计算需要的数据和计算结果数据。当在信息处理装置执行正常处理的同时发生中断时,协处理器会执行计算并且使用计算的结果等改写寄存器中存储的数据。因此,在中断发生之前,需要从寄存器保存与已经执行的计算有关的数据。
为了处理中断,需要用于从寄存器保存数据的专用指令。同时,在已经执行中断指令之后,需要恢复保存的数据。因此,还需要用于恢复保存的数据的指令。如在专利文献1中所公开的,可以为每个寄存器产生用于直接指定从其输出数据的寄存器的专用指令。但是,由协处理器可执行的扩展计算指令的数量是有限的。在将来,期望增加由协处理器可执行的计算的类型。伴随这种增加,寄存器的数量也需要增加。在这种情况下,如果为每个寄存器分配专用的扩展计算指令,则专用的扩展计算指令的数量将会太多。
发明内容
考虑到上述问题,本发明的目的在于提供一种包括CPU和协处理器的信息处理装置,其可以在无需无益地增加专用指令数量的情况下实现从寄存器的数据保存和保存的数据到寄存器的恢复。
为了解决上述问题,根据本发明的信息处理装置是一种包括CPU、协处理器的信息处理装置,其中CPU依次解码和执行包括在指令序列中的指令以执行计算,并且协处理器经由第一总线和第二总线与CPU相连接,该协处理器包括用于在其中存储与计算有关的数据的一个或多个寄存器,与CPU并行地解码正在由CPU解码的任何指令,基于从CPU向第一总线输出的数据而执行与任一指令有关的计算,并且向第二总线输出计算的结果。所述CPU包括信息获取单元,用于在要解码的指令是用于获取存储在任一寄存器中的数据的获取指令时,输出向第一总线分配任一寄存器的寄存器信息段,并且经由第二总线获取存储在该任一寄存器中的数据;而且所述协处理器包括:保存寄存器指定单元和数据输出单元,其中保存寄存器指定单元用于在要解码的指令是获取指令时经由第一总线获取该寄存器信息段,并且基于获取的寄存器信息段而指定要从其保存数据的寄存器,而所述数据输出单元用于向第二总线输出由保存寄存器指定单元指定的寄存器中存储的数据。
技术效果
通过上述结构,对于协处理器基于由CPU向第一总线输出的寄存器信息段而指定寄存器,以及对于CPU从指定的寄存器获取数据,只需要单一获取指令。根据该结构,为了从寄存器获取数据,只使用一条指令作为由协处理器可执行的扩展计算指令。因此,可以利用最小数量的指令从协处理器的所有寄存器保存数据。
同时,该信息处理装置还可以包括信号线,用于根据由协处理器执行的计算结果而从所述协处理器向所述CPU输出标志,其中所述CPU还可以包括保持单元,用于将标志保持在其中,经由所述信号线从协处理器接收表示是否已经保存数据的标志,并且用接收的标志代替其中保持的标志,所述信息获取单元可以向所述第一总线输出用于指定寄存器的寄存器号作为寄存器信息段,每次输出使寄存器号加1,所述协处理器还可以包括输出单元,用于将从其保存数据的寄存器的总数与输出到第一总线的寄存器号进行比较,并且,如果寄存器号不小于总数,则输出表示已经保存数据的标志,并且当保持单元中保持的标志表示已经保存数据时,所述信息获取单元可以停止向第一总线输出寄存器号。
根据上述结构,为协处理器的每个寄存器分配寄存器号。CPU向第一总线输出寄存器号。基于输出的寄存器号,协处理器可以指定寄存器。这种简单结构实现了从所有寄存器保存数据。同时,当寄存器号与存储在协处理器中的寄存器数量相匹配时,协处理器向CPU输出表示寄存器号与寄存器数量相匹配的标志。因此,CPU可以容易地检测到数据保存已经完成的时间。此外,根据现有技术,CPU将与由协处理器执行的计算结果相关的数据,诸如计算结果的正/负数据,存储到标志寄存器中。该标志寄存器还用作其中存储有表示是否保存数据已经完成的标志的标志寄存器。因此,可以有效地利用传统已经使用的资源。
同时,第一总线可以由至少分别用于传输不同类型的数据的第一输入总线和第二输入总线构成,所述CPU还包括:记录单元,用于向连接到CPU的存储器的每个第N存储地址值依次记录由所述信息获取单元经由第二总线获取的数据,所述N为预定的值;以及恢复指示单元,用于在要解码的指令是用于恢复已经保存的数据的恢复指令时,从存储器读取数据,向所述第一输入总线输出读取的数据,并且向所述第二输入总线输出用于指定寄存器的寄存器号,并且所述协处理器还可以包括:恢复寄存器指定单元,用于在要解码的指令是恢复指令时,经由第二输入总线获取寄存器号,并且基于获取的寄存器号而指定从其已经保存数据的寄存器;以及恢复单元,用于将经由第一输入总线获取的数据恢复到由恢复寄存器指定单元指定的寄存器。
根据上述结构,通过使用是单一扩展计算指令的恢复指令,可以恢复已经保存的数据。换句话说,通过使用单一恢复指令,可以将根据获取指令保存的数据状态恢复到还没有执行该获取指令的状态。
同时,协处理器还可以包括:第一寄存器数量存储单元,用于将寄存器的总数存储在其中;寄存器数量输出单元,用于经由第二总线向CPU输出所述总数,所述CPU还可以包括:第二寄存器数量存储单元,用于将已经由第一寄存器数量输出单元输出的总数存储在其中;信息获取单元,可以依次向第一总线输出用于指定任一寄存器的寄存器号作为寄存器信息段,每次输出使寄存器号加1,并且当所述寄存器号与第二寄存器数量存储单元中存储的总数相匹配,所述信息获取单元可以停止向第一总线输出寄存器号。
根据上述结构,协处理器向CPU传送其中包括的寄存器的数量。因此,CPU可以根据获取指令确认从其需要保存数据的寄存器的数量,而不需要向协处理器询问寄存器的数量,从而从所有寄存器保存数据。
同时,当所述信息处理装置复位时,所述第一寄存器数量输出单元可以向CPU输出总数。
根据上述结构,当信息处理装置在启动时或例如基于用户的复位操作而复位时,CPU可以从协处理器获取与寄存器数量相关的信息。当信息处理装置复位时,在协处理器中没有执行计算并且在协处理器的寄存器中没有存储与计算相关的数据。因此,这时,协处理器将与寄存器的数量相关的信息存储在寄存器中用于存储计算结果。然后,CPU将从寄存器输出的信息存储在其中。这样,当信息处理装置复位时,与寄存器的数量相关的信息被传输到CPU。因此,可以在任何时间从协处理器有效地保存数据。
同时,所述协处理器可以包括:计算单元信息输出单元,用于输出表示实施在所述协处理器中的一个或多个计算单元的类型的计算单元信息,所述CPU还可以包括:计算单元信息存储单元,用于将计算单元信息存储在其中;以及确定单元,用于基于计算单元信息而确定要输出的寄存器信息段,并且所述信息获取单元可以向第一总线输出由所述确定单元确定的寄存器信息段。
根据上述结构,基于表示实施在协处理器中的计算单元是什么类型的信息,CPU可以向协处理器有效地输出用于从寄存器保存数据的寄存器信息。
因此,即使CPU之中没有在其中存储表示实施在协处理器中的计算单元是什么类型的信息,该CPU也可以获取该信息。此外,根据计算单元的类型或计算的类型,需要的寄存器的数量不同。CPU可以基于计算单元信息而指定需要的寄存器数量。
同时,当所述信息处理装置复位时,所述计算单元信总输出单元可以向CPU输出计算单元信息。
根据上述结构,当信息处理装置在启动时或例如基于用户的复位操作而复位时,CPU可以从协处理器获取计算单元信息。当信息处理装置复位时,在协处理器中没有执行计算并且在协处理器的寄存器中没有存储与计算相关的数据。因此,这时,协处理器将计算单元信息存储在寄存器中用于存储计算结果。然后,CPU将从寄存器输出的计算单元信息存储在其中。这样,当信息处理装置复位时,计算单元信息信息被传输到CPU。因此,可以在任何时间从协处理器有效地保存数据。
同时,当发生中断同时执行处理时,所述信息处理装置可以执行获取指令,所述中断具有对应于在中断中要执行的处理的中断级别,所述协处理器还包括:确定单元,用于根据中断级别确定要从其保存数据的寄存器的数量;以及级别对应确定单元,用于根据获取指令,基于确定的数量来确定要从其输出数据的任一寄存器,并且当确定的寄存器数量与输出到第一总线的寄存器号相匹配时,数据输出单元可以输出表示已经保存数据的标志。
根据上述结构,信息处理装置可以根据中断级别保存数据。当执行中断处理时,计算单元根据中断级别预先确定要使用的计算单元。因此,根据中断级别,一些计算单元不用于中断处理。在这种情况下,不需要从没有使用的这些计算单元中包括的寄存器保存数据。通过上述结构,可以避免这种不必要的保存并且改进处理效率。
同时,所述协处理器可以用于通过在第一任务和第二任务之前转换来执行所述第一任务和第二任务,所述协处理器还可以包括:中断请求单元,用于当正在执行的第一任务被转换到第二任务并且与在第一任务中执行的计算相关的数据被存储到任一寄存器中时,请求CPU产生中断,响应于该中断请求,CPU可以产生中断,并且当CPU产生中断时,CPU和协处理器执行获取指令。
通过在任务之间转换而执行多个不同的任务。当在一个任务执行期间执行计算时,有时需要保存数据。例如,当第一任务的计算结果存储在寄存器中,并且任务执行从第一任务转换到第二任务,则需要保存第一任务的计算结果。这种情况下,协处理器请求CPU产生中断。因此,可以通过使用中断作为触发来保存数据,并且无需用中断处理中执行的计算结果的数据改写在每个任务中执行的计算结果的数据而在任务之间转换。
同时,所述协处理器还可以包括:计算执行信息存储单元,用于将表示是否已经执行计算的计算执行信息存储在其中;以及计算执行信息输出单元,用于在解码获取指令时向CPU输出计算执行信息,当CPU解码获取指令并且计算执行信息表示在协处理器中已经执行计算时,CPU可以从任一寄存器获取数据,并且当CPU解码获取指令并且计算执行信息表示在协处理器中没有执行计算时,CPU不从任一寄存器获取数据。
例如,当协处理器中没有执行计算并且没有与计算相关的数据存储在协处理器的寄存器中时,不需要从寄存器保存数据。根据上述结构,可以避免这种不必要的保存。
同时,所述计算执行信息存储单元还可以将表示是否每一寄存器中存储有与计算相关的数据的寄存器对应计算执行信息存储在其中,所述协处理器还可以包括寄存器对应计算执行信息输出单元,用于向CPU输出寄存器对应计算执行信息,并且当CPU解码获取指令时,该CPU可以基于输出的寄存器对应计算执行信息而向第一总线输出用于指定任一寄存器的寄存器号。
根据上述结构,基于是否每个计算单元已经执行了计算而确定是否在对应于计算单元的寄存器中存储有数据。因此,协处理器通过判断对应于寄存器的计算单元是否已经执行计算来判断是否在每个寄存器中存储有数据,并且将计算执行信息存储在其中。当中断发生时,CPU获取计算执行信息以执行计算,并且执行获取指令,以使只有存储数据的寄存器来保存数据。因此,可以避免没有存储数据的寄存器不必要地执行获取指令,并且改进处理效率。
附图说明
本发明的这些和其它目的、优势和特征从下面结合表示本发明具体实施方式的附图的说明将变得很明显。
在图中:
图1示出了根据第一实施方式的信息处理装置150的功能结构的方框图;
图2是表示由CPU 100和协处理器110从ROM 130读取的协处理器指令的缩写以及对应于这些缩写的CPU 100的操作和协处理器110的操作的示例列表;
图3是由CPU 100使用的用于向RAM 140保存数据/从RAM 140恢复数据的CPU执行指令的缩写以及对应于这些缩写的CPU 100的操作示例;
图4是表示在执行指令“GETACX Dm,Dn”的情况下协处理器指令解码器111的操作流程图;
图5是表示在执行指令“PUTACX Dm,Dn”的情况下协处理器指令解码器111的操作流程图;
图6所示为表示根据第一实施方式的汇编程序的示例的指令序列;
图7示出了根据第二实施方式的信息处理装置250的功能结构的方框图;
图8是表示由CPU 200从ROM 130读取的用于向RAM 140保存数据/从RAM 140恢复数据的指令的缩写以及对应于这些缩写的CPU 200的操作的示例列表;
图9是表示根据第二实施方式信息处理装置250复位情况下的操作流程图;
图10所示为表示根据第二实施方式的汇编程序的示例的指令序列;
图11示出了根据第三实施方式的信息处理装置350的功能结构的方框图;
图12是表示由CPU 300和协处理器310从ROM 130读取的协处理器指令的缩写以及对应于这些缩写的CPU 300的操作和协处理器310的操作的示例列表;
图13是表示由CPU 300使用的用于向RAM 140保存数据/从RAM 140恢复数据的指令的缩写以及对应于这些缩写的CPU 300的操作的示例列表;
图14所示为表示根据第三实施方式的汇编程序的示例的指令序列;
图15所示为表示根据第三实施方式的汇编程序的示例的指令序列;
图16示出了根据第四实施方式的信息处理装置450的功能结构的方框图;
图17是表示由CPU 400和协处理器410从ROM 130读取的协处理器指令的缩写以及对应于这些缩写的CPU 400的操作和协处理器410的操作的示例列表;
图18所示为表示在中断级别“0”发生中断的情况下汇编程序的示例的指令序列;
图19所示为表示在中断级别“1”发生中断的情况下汇编程序的示例的指令序列;
图20示出了根据第五实施方式的信息处理装置550的功能结构的方框图;
图21是表示由CPU 500和协处理器510从ROM 130读取的协处理器指令的缩写以及对应于这些缩写的CPU 500的操作和协处理器510的操作的示例列表;
图22所示为表示任务转换的汇编程序的示例的指令序列;
图23示出了根据第六实施方式的信息处理装置650的功能结构的方框图;
图24是表示由CPU 600和协处理器610从ROM 130读取的协处理器指令的缩写以及对应于这些缩写CPU 600的操作和协处理器610的操作的示例列表;
图25是表示由CPU 600使用的用于向RAM 140保存数据/从RAM 140恢复数据的指令的缩写以及CPU 600的操作的示例列表;
图26所示为表示根据第六实施方式的汇编程序的示例的指令序列;
图27示出了根据第七实施方式的信息处理装置750的功能结构的方框图;
图28是表示由CPU 700和协处理器710从ROM 130读取的协处理器指令的缩写以及对应于这些缩写的CPU 700的操作和协处理器710的操作的示例列表;
图29所示为表示根据第七实施方式的汇编程序的示例的指令序列;
图30所示为表示根据第七实施方式的汇编程序的示例的指令序列;
图31是表示与这些实施方式不相关的信息处理装置的示例性功能结构的方框图。
附图标记
100、200、300、400、500、600和700:CPU
101:CPU指令解码器
102、202、602和702:标志寄存器
103:堆栈指针存储寄存器
104、604和704:通用寄存器组
110、210、310、410、510、610和710:协处理器
111:协处理器指令解码器
112:第一计算单元
113、213和313:第一计算结果存储寄存器
114:第二计算单元
115:第二计算结果存储寄存器
116和716:选择器
117和417:实施的计算单元信息输出电路
118:或电路
120:第一数据输入总线
121:第二数据输入总线
122:数据输出总线
130:ROM
140:RAM
150、250、350、450、550、650和750:信息处理装置
211:寄存器数量产生器
311:寄存器信息产生器
517:执行任务管理电路
518:扩展计算执行标志寄存器
617:寄存器访问管理电路
717:寄存器访问状态管理电路
具体实施方式
下面参照附图描述一种信息处理装置作为本发明的一个实施方式。
<第一实施方式>
<结构>
图1示出了根据本发明的信息处理装置的功能结构。如图1所示,信息处理装置150包括,CPU(中央处理单元)100、协处理器110、ROM(只读存储器)130和RAM(随机存取存储器)140。这里,信息处理装置150是32位微计算机。
CPU 100输出指令地址,并且根据由ROM 130输出的指令执行各种信息处理。CPU 100包括CPU指令解码器101、标志寄存器102、堆栈指针(SP)存储寄存器103、通用寄存器组104、第一数据输入总线120、第二数据输入总线121和数据输出总线122。第一数据输入总线120、第二数据输入总线121和数据输出总线122分别是32位数据线。
CPU指令解码器101解码由ROM 130输出的指令,并且根据解码的指令向包括在CPU 100中的每个电路输出各种控制信号。请注意,图1中从CPU指令解码器101画出的箭头表示CPU指令解码器101能够向CPU 100的所有部件输出控制信号。为了清楚地查看附图,图1所示的箭头没有直接从CPU指令解码器101连接到CPU 100的所有功能部件。
标志寄存器102中存储有CPU 100和协处理器110的计算结果标志。同时,标志寄存器102中存储有表示数据从协处理器110的寄存器的保存是否已经完成的标志。当指令执行期间发生中断时使用该标志。此外,标志寄存器102中存储有表示数据向协处理器110的寄存器的恢复是否已经完成的标志。当恢复由于中断而从协处理器110的寄存器保存的数据时使用该标记。
堆栈指针存储寄存器103根据由CPU指令解码器101输出的控制信号,向RAM 140输出存储在其中的值作为地址值。同时,根据由CPU指令解码器101输出的控制信号,堆栈指针存储寄存器103使存储在其中的值增加或减少一常数值,并且将该增加或减少的值存储在其中。
通用寄存器组104中存储有CPU 100和协处理器110的计算输入/输出值。通用寄存器组104的每个寄存器中存储有32位数据。
协处理器110根据由ROM 130输出的指令执行各种信息处理。协处理器110包括协处理器指令解码器111、第一计算单元112、第一计算结果存储寄存器113、第二计算单元114、第二计算结果存储寄存器115、选择器116、实施的计算单元信息输出电路117和或电路118。
协处理器指令解码器111解码由ROM 130输出的指令,并且根据解码的指令向包括在协处理器110中的每个电路输出各种控制信号。请注意,图1中从协处理器指令解码器111画出的箭头表示该协处理器指令解码器111能够向协处理器110的所有部件输出控制信号。为了清楚地查看附图,图1所示的箭头没有直接从协处理器指令解码器111连接到协处理器110的所有功能部件。
第一计算单元112是乘法器。根据由协处理器指令解码器111输出的控制信号,第一计算单元112获取分别经由第一数据输入总线120和第二数据输入总线121传输的两段数据。然后,第一计算单元112对从第一数据输入总线120和第二数据输入总线121获取的两段数据执行乘法运算。两段32位数据的乘法结果的位数最大是64位。因此,第一计算单元112在第一计算结果存储寄存器113中存储64位中的高32位,并且向选择器116输出64位中的低32位。同时,第一计算单元112向或电路118输出计算结果标志,例如表示计算结果为负的标志。此外,根据由协处理器指令解码器111输出的控制信号,第一计算单元112输出第一计算结果存储寄存器113的数据。此外,根据由协处理器指令解码器111输出的控制信号,第一计算单元112将第二数据输入总线121的值存储在其中。
第一计算结果存储寄存器113将与在第一计算单元112中执行的计算相关的数据存储在其中。
第二计算单元114是除法器。根据由协处理器指令解码器111输出的控制信号,第二计算单元114对分别经由第一数据输入总线120和第二数据输入总线121传输的两段数据执行除法运算。第二计算单元114向第二计算结果存储寄存器115输出除法的余数,并且向选择器116输出该除法的商。而且,第二计算单元114向或电路118输出计算结果标志,例如表示计算溢出的标志。而且,根据由协处理器指令解码器111输出的控制信号,第二计算单元114输出第二计算结果存储寄存器115的数据。此外,根据由协处理器指令解码器111输出的控制信号,第二计算单元114将第二数据输入总线121的值存储在其中。
第二计算结果存储寄存器115将与在第二计算单元114中执行的计算相关的数据存储在其中。
根据由协处理器指令解码器111输出的控制信号,选择器116选择第一计算单元112的计算结果值、第一计算结果存储寄存器113的输出值、第二计算单元114的计算结果值、第二计算结果存储寄存器115的输出值中的任意一个,并且然后向数据输出总线122输出所选择的值。
实施的计算单元信息输出电路117将在协处理器110中实施的计算单元的数量存储在其中(在第一实施方式中该计算单元的数量为两个)。根据由协处理器指令解码器111输出的控制信号,实施的计算单元信息输出电路117将经由第一数据输入总线120获取的值与存储在其中的计算单元的数量进行比较。如果获取的值不小于计算单元的数量,则实施的计算单元信息输出电路117输出标志值“1”。如果输入值小于计算单元的数量,则实施的计算单元信息输出电路117输出标志值“0”。这里,实施的计算单元信息输出电路117将值“1”作为计算单元的数量存储在其中。值“1”比计算单元“2”的实际数量小1。这是因为值“0”被认为是一个值。
或电路118输出由第一计算单元112输出的计算结果标志、由第二计算单元114输出的计算结果标志以及由实施的计算单元信息输出电路117输出的值的逻辑或结果。
这样完成了包括在信息处理装置150中的组成单元的功能描述。
<命令>
下面描述要由CPU指令解码器101和协处理器指令解码器111解码和执行的各种指令。
<扩展计算指令>
首先,下面描述由CPU 100和协处理器110二者读取和执行的扩展计算指令。
图2是表示扩展计算指令与CPU 100和协处理器110的操作之间的对应列表。由CPU 100和协处理器110从ROM 130中读取扩展计算指令。基于该列表描述了在指令的执行中CPU 100和协处理器110的指令和操作。在“技术效果”中描述的上述“获取指令”和“恢复指令”分别对应于列表中所示的指令“GETACX Dm,Dn”和“PUTACX Dm,Dn”。
<指令“MULQ Dm,Dn”>
指令“MULQ Dm,Dn”是用于协处理器110执行乘法的扩展计算指令。
CPU 100从ROM 130读取指令“MULQ Dm,Dn”。然后,CPU指令解码器101解码读取的指令“MULQ Dm,Dn”,并且向包括在CPU 100中的每个电路输出控制信号。这里,“m”和“n”分别是由指令的操作数指定的包括在通用寄存器组104中的寄存器的寄存器号(register number)。“Dm”是存储在通用寄存器组104的第m个寄存器中的值,而“Dn”是存储在通用寄存器组104的第n个寄存器中的值。这里对“m”、“n”、“Dm”、和“Dn”的定义也适用于下面的描述。
此外,当CPU指令解码器101读取和解码指令“MULQ Dm,Dn”时,协处理器指令解码器111从ROM 130读取指令“MULQ Dm,Dn”并且同时解码读取的指令“MULQ Dm,Dn”。然后,协处理器指令解码器111向包括在协处理器110中的每个电路输出控制信号。
根据该控制信号,通用寄存器组104向第一数据输入总线120输出Dm,并且向第二数据输入总线121输出Dn。
第一计算单元112读取第一数据输入总线120的Dm,并且读取第二数据输入总线121的Dn。然后,第一计算单元112执行Dm作为被乘数而Dn作为乘数的乘法运算。第一计算单元112在第一计算结果存储寄存器113中存储乘法结果的高位,向选择器116输出乘法结果的低位,并且向或电路118输出计算结果标志。
根据由协处理器指令解码器111输出的控制信号,选择器116选择第一计算单元112的输出值,并且将选择的输出值输出到数据输出总线122。CPU 100在通用寄存器组104的第n寄存器中存储已经输出到数据输出总线122的乘法结果的低位。
或电路118对第一计算单元112的计算结果标志、第二计算单元114的计算结果标志和实施的计算单元信息输出电路117的输出值的执行逻辑或操作。这样,或电路118输出第一计算单元112的计算结果标志。然后,标志寄存器102将已经由协处理器110输出的第一计算单元112的计算结果标志存储在其中。
这样完成了指令“MULQ Dm,Dn”的说明。
<指令“DIVQ Dm,Dn”>
指令“DIVQ Dm,Dn”是用于协处理器110执行除法的扩展计算指令。
CPU 100从ROM 130读取指令“DIVQ Dm,Dn”。然后,CPU指令解码器101解码读取的指令“DIVQ Dm,Dn”,并且向包括在CPU 100中的每个电路输出控制信号。
此外,当CPU指令解码器101读取和解码指令“DIVQ Dm,Dn”时,协处理器指令解码器111从ROM 130读取指令“DIVQ Dm,Dn”并且同时解码读取的指令“DIVQ Dm,Dn”。然后,协处理器指令解码器111向包括在协处理器110中的每个电路输出控制信号。
通用寄存器组104向第一数据输入总线120输出Dm,并且向第二数据输入总线121输出Dn。
第二计算单元114读取第一数据输入总线120的Dm,并且读取第二数据输入总线121的Dn。然后,第二计算单元114执行Dm作为被除数而Dn作为除数的除法运算。第二计算单元114在第二计算结果存储寄存器115中存储除法结果的余数,并且向选择器116输出除法结果的商,并且向或电路118输出计算结果标志。
根据由协处理器指令解码器111输出的控制信号,选择器116选择第二计算单元114的输出值,并且将选择的输出值输出到数据输出总线122。CPU 100在通用寄存器组104的第n寄存器中存储已经输出到数据输出总线122的商。
或电路118对第一计算单元112的计算结果标志、第二计算单元114的计算结果标志和实施的计算单元信息输出电路117的输出值执行逻辑或操作。这样,或电路118输出第二计算单元114的计算结果标志。然后,标志寄存器102将已经由协处理器110输出的第二计算单元114的计算结果标志存储在其中。
这样完成了指令“DIVQ Dm,Dn”的说明。
<指令“GETACX Dm,Dn”>
指令“GETACX Dm,Dn”是用于当发生中断时从协处理器110的寄存器保存数据的扩展计算指令。
CPU 100从ROM 130读取指令“GETACX Dm,Dn”。然后,CPU指令解码器101解码读取的指令“GETACX Dm,Dn”,并且向包括在CPU 100中的每个电路输出控制信号。
同时,当CPU指令解码器101读取和解码指令“GETACX Dm,Dn”时,协处理器指令解码器111从ROM 130读取指令“GETACX Dm,Dn”并且同时解码读取的指令“GETACX Dm,Dn”。然后,协处理器指令解码器111向包括在协处理器110中的每个电路输出控制信号。
根据该控制信号,通用寄存器组104向第一数据输入总线120输出Dm,并且向第二数据输入总线121输出Dn。
下面的操作包括两种情况:
(1)从第一计算结果存储寄存器113读取值的情况;和
(2)从第二计算结果存储寄存器115读取值的情况。因此,分别描述在这两种情况下信息处理装置150的操作。
(1)从第一计算结果存储寄存器113读取值的情况
第一计算单元112读取表示第一计算单元112的第一数据输入总线120的Dm“0”。第一计算单元112向选择器116输出第一计算结果存储寄存器113中存储的值。根据协处理器指令解码器111输出的控制信号,选择器116选择第一计算结果存储寄存器113的输出值,并且向数据输出总线122输出选择的值。
根据协处理器指令解码器111输出的控制信号,实施的计算单元信息输出电路117对从第一数据输入总线120获取的值与存储其中的计算单元的数量进行比较。值“0”比计算单元的数量“1”要小,因此实施的计算单元信息输出电路117输出标志值“0”。或电路118对第一计算单元112的计算结果标志、第二计算单元114的计算结果标志和实施的计算单元信息输出电路117的输出值执行逻辑或操作。这样,或电路118输出实施的计算单元信息输出电路117的标志值“0”。
数据输出总线122向CPU 100的通用寄存器组104传输由选择器116输出的第一计算结果存储寄存器113的输出值。通用寄存器组104获取数据输出总线122的值,并且将获取的值存储在其第n寄存器中。标志寄存器102将由协处理器110输出的实施的计算单元信息输出电路117的标志值“0”存储作为计算结果标志。
(2)从第二计算结果存储寄存器115读取值的情况
第二计算单元114读取表示第二计算单元114的第一数据输入总线120的Dm“1”。第二计算结果存储寄存器115向选择器116输出存储在其中的值。根据协处理器指令解码器111输出的控制信号,选择器116选择第二计算结果存储寄存器115的输出值,并且向数据输出总线122输出选择的值。
根据由协处理器指令解码器111输出的控制信号,实施的计算单元信息输出电路117将经由第一数据输入总线120获取的值与存储在其中的计算单元的数量进行比较。如果获取的值与计算单元的数量相匹配,则实施的计算单元信息输出电路117输出标志值“1”。或电路118对第一计算单元112的计算结果标志、第二计算单元114的计算结果标志和实施的计算单元信息输出电路117的输出值执行逻辑或操作。这样,或电路118输出电路117的标志值“1”。
数据输出总线122向CPU 100的通用寄存器组104传输已经由选择器116输出的第二计算结果存储寄存器115的输出值。通用寄存器组104获取数据输出总线122的值,并且将获取的值存储在其第n寄存器中。
标志寄存器102将由协处理器110输出的实施的计算单元信息输出电路117的标志值“1”存储在其中。
这样完成了根据第一实施方式的扩展计算指令的说明。<指令“PUTACX Dm,Dn”>
指令“PUTACX Dm,Dn”是用于将在发生中断时从协处理器110的寄存器保存的数据恢复到寄存器的扩展计算指令。
CPU 100从ROM 130读取指令“PUTACX Dm,Dn”。然后,CPU指令解码器101解码读取的指令“PUTACX Dm,Dn”,并且向包括在CPU 100中的每个电路输出控制信号。
同时,当CPU指令解码器101读取和解码指令“PUTACX Dm,Dn”时,协处理器指令解码器111从ROM 130读取指令“PUTACX Dm,Dn”并且同时解码读取的指令“PUTACX Dm,Dn”。然后,协处理器指令解码器111向包括在协处理器110中的每个电路输出控制信号。
根据控制信号,通用寄存器组104向第一数据输入总线120输出Dm,并且向第二数据输入总线121输出Dn。
下面的操作包括两种情况:
(1)将值写入第一计算结果存储寄存器113的情况;和
(2)将值写入第二计算结果存储寄存器115的情况。因此,分别描述在这两种情况下信息处理装置150的操作。
(1)将值写入第一计算结果存储寄存器113的情况
如果读取表示第一计算单元112的Dm“0”,则第一计算单元112读取第二数据输入总线121的Dn,并且在第一计算结果存储寄存器113中存储Dn。
根据由协处理器指令解码器111输出的控制信号,实施的计算单元信息输出电路117对经由第一数据输入总线120获取的值与存储在其中的计算单元的数量进行比较。获取的值“0”小于计算单元的数量“1”,因此实施的计算单元信息输出电路117输出标志值“0”。
或电路118对第一计算单元112的计算结果标志、第二计算单元114的计算结果标志和实施的计算单元信息输出电路117的输出值执行逻辑或操作。这样,或电路118输出电路117的标志值“0”。
标志寄存器102将由协处理器110输出的实施的计算单元信息输出电路117的标志值“1”作为计算结果标志存储在其中。利用该计算结果标志,CPU100可以检测数据的恢复没有完成。
(2)将值写入第二计算结果存储寄存器115的情况。
如果读取表示第二计算单元114的Dm“1”,则第二计算单元114读取第二数据输入总线121的Dn,并且在第二计算结果存储寄存器115中存储Dn。
根据协处理器指令解码器111输出的控制信号,实施的计算单元信息输出电路117对经由第一数据输入总线120获取的值与存储在其中的计算单元的数量进行比较。获取的值与计算单元的数量相匹配,因此实施的计算单元信息输出电路117输出标志值“1”。
或电路118对第一计算单元112的计算结果标志、第二计算单元114的计算结果标志和实施的计算单元信息输出电路117的输出值执行逻辑或操作。这样,或电路118输出计算单元信息输出电路117的标志值“1”。
然后,标志寄存器102将由协处理器110输出的实施的计算单元信息输出电路117的标志值“1”作为计算结果标志存储在其中。由于标志寄存器102的计算结果标志被更新为值“1”,CPU 100可以检测已经保存的所有数据的恢复已经完成。
<CPU执行指令>
下面描述只由CPU 100执行的CPU执行指令。
图3是由CPU 100使用的用于向RAM 140保存数据/从RAM 140恢复数据的CPU执行指令的缩写以及对应这些缩写的CPU 100的操作。下面是CPU100从RAM 130读取和执行的CPU执行指令的描述。请注意,分别描述包括在CPU执行指令中的“SP”和“(SP)”。“SP”用于执行对直接存储在堆栈指针存储寄存器103中的值的操作。“(SP)”用于指定RAM 140的地址值,用于从该指定的地址值读取数据/向该地址值写入数据。
<指令“MOV Dm,(SP)”>
指令“MOV Dm,(SP)”是用于在由堆栈指针存储寄存器103中存储的地址值指定的RAM 140的地址处存储通用寄存器组104的第m寄存器中存储的值的指令。
CPU 100从ROM 130读取指令“MOV Dm,(SP)”,并且CPU指令解码器101解码读取的指令“MOV Dm,(SP)”。根据解码的指令,CPU指令解码器101向包括在CPU 100中的每个电路输出控制信号。
通用寄存器组104向第一数据输入总线120输出Dm。堆栈指针存储寄存器103向RAM 140输出存储在其中的地址值。RAM 140将经由第一数据输入总线120获取的数据写入已经由堆栈指针存储寄存器103输出的地址值指定的区域。
这样完成了指令“MOV Dm,(SP)”的描述。
<指令“MOV(SP),Dn”>
指令“MOV(SP),Dn”是用于在通用寄存器组104的第n寄存器中存储由堆栈指针存储寄存器103中存储的地址值指定的RAM 140的地址中存储的值的指令。
CPU 100从ROM 130读取指令“MOV(SP),Dn”,并且CPU指令解码器101解码读取的指令“MOV(SP),Dn”。根据解码的指令,CPU指令解码器101向包括在CPU 100中的每个电路输出控制信号。
根据该控制信号,堆栈指针存储寄存器103向RAM 140输出存储在其中的地址值。RAM 140从堆栈指针存储寄存器103获取地址值并且向数据输出总线122输出存储在由该地址值指定的区域中的数据。然后,通用寄存器组104读取数据输出总线122的值,并且将该值存储在第n寄存器中。
这样完成了指令“MOV(SP),Dn”的描述。
<指令“MOV #<Immediate>,Dn”>
指令“MOV #<Immediate>,Dn”是用于在通用寄存器组104的第n寄存器中存储由ROM 130输出的值的指令。
CPU 100从ROM 130读取指令“MOV #<Immediate>,Dn”,并且CPU指令解码器101解码读取的指令“MOV #<Immediate>,Dn”。根据该解码的指令,CPU指令解码器101向包括在CPU 100中的每个电路输出控制信号。通用寄存器组104读取数据输出总线122的值,并且将读取的值存储在第n寄存器中。
这样完成了指令“MOV#<Immediate>,Dn”的描述。
<指令“INC Dm”>
指令“INC Dm”是用于增加存储在通用寄存器组104的第m寄存器中的值的指令。
CPU 100从ROM 130读取指令“INC Dm”,并且CPU指令解码器101解码读取的指令“INC Dm”。根据该解码的指令,CPU指令解码器101向包括在CPU 100中的每个电路输出控制信号。然后,通用寄存器组104使存储在第m寄存器中的值加1,并且将增加后的值存储在第m寄存器中。
这样完成了指令“INC Dm”的描述。
<指令“INC SP”>
指令“INC SP”是用于增加存储在堆栈指针存储寄存器103中的值的指令。
CPU 100从ROM 130读取指令“INC SP”,并且CPU指令解码器101解码读取的指令“INC SP”。根据解码的指令,CPU指令解码器101向包括在CPU 100中的每个电路输出控制信号。CPU 100使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
这样完成了指令“INC SP”的描述。
<指令“Bcc<Label>”>
指令“Bcc<Label>”是用于基于存储在标志寄存器102中的值而执行分支的指令。
CPU 100从ROM 130读取指令“Bcc<Label>”,并且CPU指令解码器101解码读取的指令“Bcc<Label>”。根据该解码的指令,CPU指令解码器101向包括在CPU 100中的每个电路输出控制信号。如果存储在标志寄存器102中的值为“0”,则CPU 100向ROM 130输出<Label>的地址值以将该处理分支到该地址值指定的地址。如果存储在标志寄存器102中的值为“1”,则CPU 100不执行分支操作。
这样完成了指令“Bcc<Label>”的描述。
<指令“CLR Dm”>
指令“CLR Dm”是用于初始化存储在通用寄存器组104的第m寄存器中的值的指令。
CPU 100从ROM 130读取指令“CLR Dm”,并且CPU指令解码器101解码读取的指令“CLR Dm”。根据该解码的指令,CPU指令解码器101向包括在CPU 100中的每个电路输出控制信号。通用寄存器组104清除存储在第m寄存器中的值,并且将值“0”存储到该第m寄存器中。
这样完成了指令“CLR Dm”的描述。
<指令“RTI”>
指令“RTI”是用于当在中断中执行的指令已经完成时将该处理分支到由发生中断时正常处理中执行的地址值指定的地址的指令。
CPU 100从ROM 130读取指令“RTI”,并且CPU指令解码器101解码读取的指令“RTI”。根据解码的指令,CPU指令解码器101向包括在CPU 100中的每个电路输出控制信号。CPU 100向ROM 130输出在发生中断时已经执行的地址值,从而将该处理分支到该地址值。
这样完成了指令“RTI”的描述。
<操作>
下面描述作为在中断发生时保存数据以及协处理器指令解码器111在数据恢复中的操作,其中在中断发生时保存数据是该信息处理装置150的一个特征。然后,利用具体的指令序列描述该信息处理装置150的操作。
首先,参照图4所示的流程图描述在指令“GETACX Dm,Dn”的执行中协处理器指令解码器111的操作。
协处理器指令解码器111从ROM 130读取指令“GETACX Dm,Dn”,并且解码读取的指令“GETACX Dm,Dn”(步骤S401)。
协处理器指令解码器111将从ROM 130获取的指令解码为指令“GETACXDm,Dn”,并且读取第一数据输入总线120的值(步骤S403)。
协处理器指令解码器111输出控制信号,用于使由第一数据输入总线120的读取值指定的寄存器执行指令“GETACX Dm,Dn”(步骤S405)。包括有指定的寄存器的计算单元接收控制信号,并且输出寄存器的数据。
协处理器指令解码器111输出控制信号,用于使选择器116向数据输出总线122输出已经由指定的寄存器输出的值(步骤S407)。因此,从寄存器保存该数据。
这样完成了在指令“GETACX Dm,Dn”的解码和执行中协处理器指令解码器111的操作描述。
下面,参照图5所示的流程图描述在指令“PUTACX Dm,Dn”的执行中协处理器110的操作。
协处理器指令解码器111从ROM 130读取指令“PUTACX Dm,Dn”,并且解码读取的指令“PUTACX Dm,Dn”(步骤S501)。
协处理器指令解码器111将从ROM 130获取的指令解码为指令“PUTACXDm,Dn”,并且读取第一数据输入总线120的值(步骤S503)。
协处理器指令解码器111输出控制信号,用于使由第一数据输入总线120的读取值指定的寄存器执行指令“PUTACX Dm,Dn”(步骤S505)。
这样完成了在指令“PUTACX Dm,Dn”的解码和执行中协处理器指令解码器111的操作描述。
最后,基于图6所示的具体指令序列描述信息处理装置150的操作。图6所示的指令序列是使用图2和图3描述的指令的汇编程序的一个示例。下面描述用于执行该指令序列的操作。
CPU 100执行存储在ROM 130中的正常处理的指令序列600。CPU 100从ROM 130读取包括在指令序列600中的指令“CLR D2”,并且将值“0”存储到通用寄存器组104的第二寄存器中。
CPU 100和协处理器110从ROM 130读取指令“MULQ D0,D1”。第一计算单元112在第一计算结果存储寄存器113中存储乘法结果的高位,并且向选择器116输出乘法结果的低位。选择器116向数据输出总线122输出从第一计算单元112输出的数据。通用寄存器组104在其第一寄存器中存储乘法结果的低位。标志寄存器102将由第一计算单元112输出的计算结果标志存储在其中。
在执行指令“MULQ D0,D1”之后,CPU 100接收到一个中断,并且执行中断句柄的指令序列610头部处的指令。
首先,CPU 100将存储在通用寄存器组104中的值保存到RAM 140,该通用寄存器组104包括在中断句柄的指令序列610中。这时,存储在通用寄存器组104的第二寄存器中的值“0”也保存到RAM 140。请注意,已经存储到通用寄存器组104中的值和其中已经存储有该值的通用寄存器组104的寄存器的寄存器号互相对应地存储在RAM 140中。同时,堆栈指针存储寄存器103中存储的地址值作为SP初始值存储在RAM 140中,以便恢复保存的数据。
CPU 100从ROM 130读取指令“CLR D0”,并且将值“0”存储到通用寄存器组104的第零寄存器中。
CPU 100从ROM 130读取指令“INC SP”,并且使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 100和协处理器110从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。结果,存储在第一计算结果存储寄存器113中的值被存储到通用寄存器组104的第一寄存器中。同时,实施的计算单元信息输出电路117的标志值“0”被存储到标志寄存器102中。
CPU 100从ROM 130读取指令“MOV D1,(SP)”,并且执行读取的指令“MOV D1,(SP)”。CPU 100将存储在通用寄存器组104的第一寄存器中的值写入由存储在堆栈指针存储寄存器103中的地址值指定的RAM 140的地址中。
CPU 100从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。CPU 100使存储在通用寄存器组104的第零寄存器中的值加1,并且将增加后的值存储在第零寄存器中。这里,第零寄存器将值“1”存储在其中。
CPU 100从ROM 130读取指令“Bcc<Label_1>”,并且执行读取的指令“Bcc<Label_1>”。存储在标志寄存器102中的值不是“1”而是“0”。因此,CPU 100将该处理分支到<Label_1>。CPU 100从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。CPU 100使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 100和协处理器110从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。CPU 100将存储在第二计算结果存储寄存器115中的值存储到通用寄存器组104的第一寄存器中。实施的计算单元信息输出电路117读取第一数据输入总线120的值“1”,并且将该值“1”与存储在其中的计算单元信息进行比较。值“1”与计算单元信息相匹配,因此电路117向标志寄存器102输出标志值“1”。然后,标志寄存器102将标志值“1”存储在其中。
CPU 100从ROM 130读取指令“MOV D1,(SP)”,并且执行读取的指令“MOV D1,(SP)”。CPU 100将存储在通用寄存器组104的第一寄存器中的值写入到由存储在堆栈指针存储寄存器103中的地址值指定的RAM 140的地址。
CPU 100从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。CPU 100使存储在通用寄存器组104的第零寄存器中的值加1,并且将增加后的值存储在第零寄存器中。
CPU 100从ROM 130读取指令“Bcc<Label_1>”,并且执行读取的指令“Bcc<Label_1>”。存储在标志寄存器102中的值为“1”。因此,CPU 100不将该处理分支到<Label_1>。
然后,CPU 100执行包括在中断句柄的指令序列中实际要执行的指令。
在中断句柄的指令序列的执行完成之后,CPU 100解码指令“CLR D0”,并且将值“0”存储在通用寄存器组104的第零寄存器中。同时,CPU 100将存储在RAM 140中的SP初始值写入堆栈指针存储寄存器103。
CPU 100从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。CPU 100使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 100从ROM 130读取指令“MOV(SP),D1”,并且执行读取的指令“MOV(SP),D1”。CPU 100将存储在由RAM 140的堆栈指针存储寄存器103中存储的地址值指定的地址中的数据写入通用寄存器组104的第一寄存器中。
CPU 100和协处理器110从ROM 130读取指令“PUTACX D0,D1”,并且执行读取的指令“PUTACX D0,D1”。结果,第一计算单元112将存储在通用寄存器组104的第一寄存器中的值存储到第一计算结果存储寄存器113中。同时,实施的计算单元信息输出电路117对存储在其中的计算单元的数量“1”与第一数据输入总线120的值“0”进行比较。值“0”小于计算单元的数量“1”,因此,实施的计算单元信息输出电路117向标志寄存器102输出标志值“0”。然后,标志寄存器102将标志值“0”存储在其中。
CPU 100从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。CPU 100使存储在通用寄存器组104的第零寄存器中的值加1,并且将增加后的值存储在第零寄存器中。
CPU 100从ROM 130读取指令“Bcc<Label_2>”,并且执行读取的指令“Bcc<Label_2>”。标志寄存器102中存储的值是“0”。因此,CPU 100将该处理分支到<Label_2>。
CPU 100从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。CPU 100使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 100从ROM 130读取指令“MOV(SP),D1”,并且执行读取的指令“MOV(SP),D1”。CPU 100将存储在由RAM 140的堆栈指针存储寄存器103中存储的地址值指定的地址中的数据写入通用寄存器组104的第一寄存器中。
CPU 100和协处理器110从ROM 130读取指令“PUTACX D0,D1”,并且执行读取的指令“PUTACX D0,D1”。第二计算单元114将存储在通用寄存器组104的第一寄存器中的值存储到第二计算结果存储寄存器115中。并且,实施的计算单元信息输出电路117将标志值“1”存储到标志寄存器102。
CPU 100从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。CPU 100使存储在通用寄存器组104的第零寄存器中的值加1,并且将增加后的值存储在第零寄存器中。
CPU 100从ROM 130读取指令“Bcc<Label_2>”,并且执行读取的指令“Bcc<Label_2>”。存储在标志寄存器102中的值是“1”。因此,CPU 100不将该处理分支到<Label_2>。
CPU 100将已经存储在通用寄存器组104中并且保存到RAM 140的值恢复到通用寄存器组104。这时,已经从通用寄存器组104的第二寄存器保存到RAM 140的值“0”也存储到通用寄存器组104的第二寄存器中。
CPU 100从ROM 130读取指令“RTI”,并且执行读取的指令“RTI”。因此,CPU 100执行包括在是正常处理的指令序列600中的指令。因此,CPU 100返回到中断发生时的状态。
如在第一实施方式中所述,当中断发生时,仅有一个扩展计算指令“GETACX Dm,Dn”的执行实现了从所有寄存器的数据保存。同时,仅有一个扩展计算指令“PUTACX Dm,Dn”的执行实现了保存的数据到寄存器的恢复。
<第二实施方式>
在上述第一实施方式中,包括在协处理器110中的计算单元信息输出电路输出表示从所有寄存器保存数据/向所有寄存器恢复数据已经完成的标志。这使得CPU 100可以检测从所有寄存器保存数据/向所有寄存器恢复数据已经完成。
第二实施方式描述一种与第一实施方式中的方法不同的方法用于使CPU检测从所有寄存器保存数据/向所有寄存器恢复数据已经完成。根据该方法,当信息处理装置复位时,将寄存器的数量从协处理器发送到CPU。
<结构>
根据第二实施方式的信息处理装置250包括ROM 130、RAM 140、CPU200和协处理器210。
CPU 200包括CPU指令解码器101、堆栈指针存储寄存器103、通用寄存器组104和标志寄存器202。
协处理器210包括协处理器指令解码器111、第一计算单元112、第二计算单元114、第二计算结果存储寄存器115、选择器116、寄存器数量(registercount)产生器211和第一计算结果存储寄存器213。
上述第一实施方式具有其中第一计算单元112和第二计算单元114的计算结果标志经由或电路118输出的结构。在第二实施方式的描述和附图中省略了该结构,因为这不是第二实施方式的特征。
同时,第二实施方式中与第一实施方式中具有相同名称和附图标记的功能单元执行与第一实施方式中相同的功能。因此这里将省略其描述。
根据由CPU指令解码器101输出的控制信号,标志寄存器202基于在CPU200中执行的比较指令的结果而对D0与D3进行比较。在下文中,Dx(x是一整数)表示在通用寄存器组104的第x寄存器中存储的值。当D0不小于D3时,标志寄存器202存储值“1”,表示从协处理器210的所有寄存器保存数据/向协处理器210的所有寄存器恢复数据已经完成。当D0小于D3时,标志寄存器202存储值“0”表示从协处理器210的所有寄存器保存数据/向协处理器210的所有寄存器恢复数据没有完成。
寄存器数量产生器211将包括在协处理器210中的寄存器的数量存储在其中。根据信息处理装置250复位时的时序,寄存器数量产生器211向第一计算结果存储寄存器213输出存储在其中的寄存器的数量。
除了在第一实施方式中描述的第一计算结果存储寄存器113的功能,第一计算结果存储寄存器213包括用于将由寄存器数量产生器211输出的寄存器的数量存储在其中的功能,和用于向选择器116输出存储在其中的寄存器的数量的功能。
这样完成了根据第二实施方式的信息处理装置250的功能描述,该第二实施方式是第一实施方式的修改。
<命令>
下面描述在第二实施方式以及第一实施方式中使用的指令。
<CPU执行指令>
图8是表示由CPU 200从ROM 130读取的用于保存数据到RAM 140和从RAM 140恢复数据的指令的缩写以及对应这些缩写的CPU 200的操作的示例列表。下面参照图8描述在第二实施方式中使用的指令。
<指令“CMP Dm,Dn”>
指令“CMP Dm,Dn”是用于对Dm和Dn进行比较的指令。
CPU 200从ROM 130读取指令“CMP Dm,Dn”,并且CPU指令解码器101解码读取的指令“CMP Dm,Dn”。根据解码的指令,CPU指令解码器101向包括在CPU 200中的每个电路输出控制信号。通用寄存器组104将在第m寄存器中存储的值和在第n寄存器中存储的值进行比较。如果两个值互相匹配,则通用寄存器组104在标志寄存器202中存储值“1”。如果两个值不互相匹配,则通用寄存器组104在标志寄存器202中存储值“0”。标志寄存器202将由通用寄存器组104输出的比较结果值存储在其中。
这样完成了指令“CMP Dm,Dn”的描述。
<操作>
现在参照附图描述根据第二实施方式的信息处理装置250的操作。
首先,将参照图9所示的流程图和图8所示的方框图描述在信息处理装置250复位时的操作,这是第二实施方式的特征。
在启动时或基于用户的复位操作,信息处理装置250复位(步骤S901)。
协处理器210的寄存器数量产生器211向第一计算结果存储寄存器213输出存储在其中的寄存器的数量(步骤S903)。
第一计算结果存储寄存器213将寄存器的输出数量存储在其中(步骤S905)。
协处理器指令解码器111解码指令“GETACX Dm,Dn”,使第一计算单元112输出存储在第一计算结果存储寄存器213中的值,并且使选择器116向数据输出总线122输出由第一计算单元112输出的值(步骤S907)。
协处理器指令解码器111输出控制信号,用于使选择器116向数据输出总线122输出已经由第一计算结果存储寄存器213输出的数据(步骤S909)。
然后,CPU 200在通用寄存器组104中存储已经输出到数据输出总线122的寄存器的数量(步骤S911)。
这样完成了在信息处理装置250复位时的操作的描述。下面参照图10所示的指令序列描述根据第二实施方式的具体操作。
图10示出了使用图2、图3和图8描述的指令的汇编程序的一个示例的指令序列。下面描述用于执行该指令序列的操作。在图10中,箭头1001表示当信息处理装置250复位时的时序。箭头1002表示在正常处理的指令序列1000的执行期间发生中断时的时序。
在复位之后,CPU 200从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLR D0”。因此,CPU 200将值“0”存储到通用寄存器组104的第零寄存器中。
CPU 200从ROM 130读取指令“GETACX D0,D3”,并且执行读取的指令“GETACX D0,D3”。因此,CPU 200将由寄存器数量产生器211输出的寄存器的数量“1”存储在其中。因此,将与第一计算结果存储寄存器213输出的寄存器的数量相关的信息存储在通用寄存器组104的第三寄存器中。
CPU 200执行存储在ROM 130中的正常处理的指令序列。
CPU 200从ROM 130读取包括在正常处理的指令序列1000中的指令“CLR D2”,并且执行读取的指令“CLR D2”。因此,CPU 200将值“0”存储到通用寄存器组104的第二寄存器中。
CPU 200从ROM 130读取指令“MULQ D0,D1”,并且执行读取的指令“MULQ D0,D1”。第一计算单元112在第一计算结果存储寄存器213中存储乘法结果的高位。同时,CPU 200在通用寄存器组104的第一寄存器中存储乘法结果的低位,并且将计算结果标志存储在标志寄存器202中。
在执行指令“MULQ D0,D1”之后,CPU 200接收中断,并且执行在中断句柄的指令序列1010的头部处的指令。
CPU 200将中断句柄的指令序列中存储在通用寄存器组104中的值保存到RAM 140。这时,也将存储在通用寄存器组104的第二寄存器中的值“0”保存到RAM 140。同时,CPU 200将存储在堆栈指针存储寄存器103中的地址值作为SP初始值存储在RAM 140中。
CPU 200从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLRD0”。因此,CPU 200将值“0”存储到通用寄存器组104的第零寄存器中。
CPU 200从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。因此,CPU 200使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 200从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。CPU 200将存储在第一计算结果存储寄存器213中的值存储在通用寄存器组104的第一寄存器中。
CPU 200从ROM 130读取指令“MOV D1,(SP)”,并且执行读取的指令“MOV D1,(SP)”。因此,CPU 200将存储在通用寄存器组104的第一寄存器中的值写入到由堆栈指针存储寄存器103中存储的地址值指定的RAM 140的地址中。
CPU 200从ROM 130读取指令“CMP D0,D1”,并且执行读取的指令“CMPD0,D1”。D0和D1不互相匹配。因此,CPU 200将值“0”写入到标志寄存器202中。
CPU 200从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。因此,CPU 200使存储在通用寄存器组104的第零寄存器中的值加1,并且将该值存储在第零寄存器中。
CPU 200从ROM 130读取指令“Bcc<Label_1>”,并且执行读取的指令“Bcc<Label_1>”。存储在标志寄存器202中的值为“0”,因此,CPU 200将该处理分支到<Label_1>。
CPU 200从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。因此,CPU 200使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 200从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。因此,存储在第二计算结果存储寄存器115中的值被存储到通用寄存器组104的第一寄存器中。
CPU 200从ROM 130读取指令“MOV D1,(SP)”,并且执行读取的指令“MOV D1,(SP)”。结果,CPU 200将存储在通用寄存器组104的第一寄存器中的值写入由堆栈指针存储寄存器103中存储的地址值指定的RAM 140的地址中。
CPU 200从ROM 130读取指令“CMP D0,D1”,并且执行读取的指令“CMPD0,D1”。D0和D1的每一个具有值“1”,因此这些值互相匹配。因而,CPU200将值“1”写入标志寄存器202。
CPU 200从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。因此,CPU 200使存储在通用寄存器组104的第零寄存器中的值加1,并且将增加后的值存储在第零寄存器中。
CPU 200从ROM 130读取指令“Bcc<Label_1>”,并且执行读取的指令“Bcc<Label_1>”。存储在标志寄存器202中的值为“1”。因此,CPU 200不将该处理分支到<Label_1>。
CPU 200完成实际要执行的中断句柄的指令序列的执行。然后,CPU 200从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLR D0”。结果,CPU 200将值“0”存储到通用寄存器组104的第零寄存器中。同时,CPU 200从RAM 140读取SP初始值,并且将读取的值写入堆栈指针存储寄存器103。
CPU 200从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 200使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 200从ROM 130读取指令“MOV(SP),D1”,并且执行读取的指令“MOV(SP),D1”。因此,CPU 200将由RAM 140的堆栈指针存储寄存器103中存储的地址值指定的地址中存储的值读入到通用寄存器组104的第一寄存器中。
CPU 200从ROM 130读取指令“PUTACX D0,D1”,并且执行读取的指令“PUTACX D0,D1”。因此,第一计算单元112将存储在通用寄存器组104的第一寄存器中的值存储到第一计算结果存储寄存器213中。
CPU 200从ROM 130读取指令“CMP D0,D1”,并且执行读取的指令“CMPD0,D1”。D0和D1不互相匹配。因此,CPU 200将值“0”写入标志寄存器202。
CPU 200从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 200使存储在通用寄存器组104的第零寄存器中的值加1,并且将该增加的值存储在第零寄存器中。
CPU 200从ROM 130读取指令“Bcc<Label_2>”,并且执行读取的指令“Bcc<Label_2>”。存储在标志寄存器202中的值为“0”,因此,CPU 200将该处理分支到<Label_2>。
CPU 200从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 200使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 200从ROM 130读取指令“MOV(SP),D1”,并且执行读取的指令“MOV(SP),D1”。结果,CPU 200将由RAM 140的堆栈指针存储寄存器103中存储的地址值指定的地址中存储的值读入到通用寄存器组104的第一寄存器中。
CPU 200从ROM 130读取指令“PUTACX D0,D1”,并且执行读取的指令“PUTACX D0,D1”。结果,第二计算单元114将存储在通用寄存器组104的第一寄存器中的值存储到第二计算结果存储寄存器115中。
CPU 200从ROM 130读取指令“CMP D0,D1”,并且执行读取的指令“CMPD0,D1”。D0和D1互相匹配。因此,CPU 200将值“1”写入标志寄存器202。
CPU 200从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 200使存储在通用寄存器组104的第零寄存器中的值加1,并且将该增加的值存储在第零寄存器中。
CPU 200从ROM 130读取指令“Bcc<Label_2>”,并且执行读取的指令“Bcc<Label_2>”。存储在标志寄存器202中的值为“1”。因此,CPU 200不将该处理分支到<Label_2>。
CPU 200将已经保存到RAM 140的值恢复到通用寄存器组104。这时,将已经从通用寄存器组104的第二寄存器保存到RAM 140的值“0”存储到通用寄存器组104的第二寄存器中。
CPU 200从ROM 130读取指令“RTI”,并且执行读取的指令“RTI”。结果,CPU 200执行包括在正常处理的指令序列1000中的指令。
CPU 200从ROM 130读取指令“GETACX D2,D1”,并且执行读取的指令“GETACX D2,D1”。结果,存储在第一计算结果存储寄存器213中的值被存储到通用寄存器组104的第二寄存器中。存储在实施的计算单元信息输出电路117中的标志值“0”被存储到标志寄存器202中。
如上所述,在第二实施方式中,根据当信息处理装置250复位时的时序,将在寄存器数量产生器211中存储的协处理器中实施的寄存器的数量存储到第一计算结果存储寄存器213中。在执行处理之前,CPU 200获取存储在第一计算结果存储寄存器213中的值。这使CPU 200可以检测协处理器210中实施的寄存器的数量。当中断发生时,CPU 200可以在不询问处理器寄存器的数量的情况下,检测用于从寄存器保存数据的指令已经发布给所有寄存器。
<第三实施方式>
第二实施方式具有其中寄存器的数量被简单地输出的结构。如果CPU中预先存储有在协处理器中实施的计算单元的类型,可以基于计算单元的类型而确定寄存器的数量。鉴于此,第三实施方式描述一种其中CPU不检测寄存器的数量而能够检测在协处理器中实施的计算单元的信息,并且基于该检测的信息指定在协处理器中实施的寄存器的数量的结构。
<结构>
根据第三实施方式的信息处理装置350包括ROM 130、RAM 140、CPU300和协处理器310。
CPU 300包括CPU指令解码器101、堆栈指针存储寄存器103、通用寄存器组104和标志寄存器202。
协处理器310包括包括协处理器指令解码器111、第一计算单元112、选择器116、寄存器信息产生器311、第一计算结果存储寄存器313、第三计算单元314和第三计算结果存储寄存器315。
上述第一实施方式具有其中第一计算单元112和第二计算单元114的计算结果标志经由或电路118输出的结构。在第三实施方式的描述和附图中省略了该结构,因为这不是第三实施方式的特征。
同时,第三实施方式中和第一实施方式或第二实施方式中具有相同名称和附图标记的功能单元执行与第一实施方式或第二实施方式中相同的功能。因此将有略其描述。
寄存器信息产生器311中存储有与在协处理器310中实施的计算单元的类型相关的信息。根据信息处理装置350复位时的时序,寄存器信息产生器311向第一计算结果存储寄存器313输出存储在其中的值。
具体地,寄存器信息产生器311中存储的寄存器信息为信息“0b0101”。在第三实施方式中,可以在协处理器中实施四种类型的计算单元。寄存器信息产生器311中存储的值的第一到第四位分别表示是否在协处理器中实施第一计算单元到第四计算单元。如果在协处理器310中实施计算单元,则值“1”用于表示实施了计算单元。如果没有在协处理器310中实施计算单元,则值“0”用于表示没有实施计算单元。这里,在协处理器310中实施第一计算单元112和第三计算单元314。因此,寄存器信息产生器311中存储的值为信息“0b0101”。如果在协处理器310中实施第二计算单元和第四计算单元,则寄存器信息产生器311中存储的值是信息“0b1010”。
第三计算单元314为用于执行乘积-求和计算的乘积-求和计算单元。具体地,根据协处理器指令解码器110输出的控制信号,第三计算单元314对经由第一数据输入总线120传输的数据、经由第二数据输入总线121传输的数据以及预先存储在第三计算结果存储寄存器315中的值执行乘积-求和计算。第三计算单元314对经由第一数据输入总线120传输的数据和经由第二数据输入总线121传输的数据执行乘法计算。然后,第三计算单元314对预先存储在第三计算结果存储寄存器315中的值和乘法结果执行求和计算,并且将乘积-求和的结果存储到第三计算结果存储寄存器315中。
第三计算结果存储寄存器315中存储有第三计算单元314执行计算需要的数据和计算结果的数据。
<命令>
下面描述第三实施方式中使用的指令。
<扩展计算指令>
图12是表示由CPU 300和协处理器310从ROM 130读取的协处理器指令的缩写和对应于该缩写的CPU 300的操作和协处理器310的操作的示例列表。
<指令“MAC Dm,Dn”>
指令“MAC Dm,Dn”是用于使协处理器310执行乘积-求和计算的指令。
CPU 300和协处理器310读取指令“MAC Dm,Dn”,并且执行读取的指令指令“MAC Dm,Dn”。
CPU指令解码器101解码指令“MAC Dm,Dn”。根据解码的指令,CPU指令解码器101向包括在CPU 300中的每个电路输出控制信号。这里,“m”和“n”分别是由该指令的操作数指定的寄存器号。
协处理器指令解码器111解码指令“MAC Dm,Dn”,并且向包括在协处理器310中的每个电路输出控制信号。
通用寄存器组104向第一数据输入总线120输出Dm,并且向第二数据输入总线121输出Dn。第三计算单元314经由第一数据输入总线120获取Dm,并且经由第二数据输入总线121获取Dn。第三计算单元314执行Dm作为被乘数而Dn作为乘数的乘法运算。然后,第三计算单元314计算乘法结果与预先存储在第三计算结果存储寄存器315中的值的和。第三计算单元314在第三计算结果存储寄存器315中存储该求和的结果。第三计算结果存储寄存器315中存储有由第三计算单元314执行的乘积-求和计算结果的值。
这样完成了指令“MAC Dm,Dn”的描述。
<CPU执行指令>
下面描述第三实施方式中使用的CPU执行指令。
图13是表示由CPU 300使用的用于保存数据到RAM 140/从RAM 140恢复数据的指令的缩写以及对应于这些缩写的CPU 300的操作的示例列表。<指令“MOV Dm,Dn”>
指令“MOV Dm,Dn”是用于在通用寄存器组104的第n寄存器中存储Dm的指令。
CPU 300从ROM 130读取指令“MOV Dm,Dn”,并且执行读取的指令“MOV Dm,Dn”。CPU指令解码器101解码指令“MOV Dm,Dn”,并且根据解码的指令,CPU指令解码器101向包括在CPU 300中的每个电路输出控制信号。根据该输出控制信号,存储在通用寄存器组104的第m寄存器中的值被存储到通用寄存器组104的第n寄存器中。
这样完成了指令“MOV Dm,Dn”的说明。
<指令“AND #<Immediate>,Dm”>
指令“AND #<Immediate>,Dm”是用于对立即数和Dm执行逻辑与操作的指令。
CPU 300从ROM 130读取指令“AND #<Immediate>,Dm”,并且执行读取的指令“AND #<Immediate>,Dm”。CPU指令解码器101解码指令“AND#<Immediate>,Dm”。根据该解码的指令,CPU指令解码器101向包括在CPU300中的每个电路输出控制信号。数据输出总线122向CPU 300的通用寄存器组104传输由ROM 130输出的立即数。CPU 300对数据输出总线122的值和存储在通用寄存器组104的第n寄存器中的值执行逻辑与操作。CPU 300将该逻辑与操作的结果存储到通用寄存器组104的第n寄存器中。
这样完成了指令“AND #<Immediate>,Dm”的描述。
<操作>
现在描述根据第三实施方式的信息处理装置350的操作。
图14和15分别示出了表示使用参照图2、3、8、12和13描述的指令的汇编程序的示例的指令序列。下面描述执行该指令序列的信息处理装置350的操作。在图14中,箭头1401表示当信息处理装置350复位时的时序。箭头1402表示在指令序列1400的执行期间发生中断时的时序。
在复位之后,CPU 300从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLR D0”。因此,CPU 300将值“0”存储到通用寄存器组104的第零寄存器中。
CPU 300从ROM 130读取指令“GETACX D0,D3”,并且执行读取的指令“GETACX D0,D3”。结果,第一计算结果存储寄存器313输出存储在其中的寄存器信息“0b0101”,并且通用寄存器组104的第三寄存器将输出的寄存器信息“0b0101”存储在其中。因此,CPU 300将与在协处理器310中实施的计算单元相关的信息存储在其中。
CPU 300执行存储在ROM 130中的正常处理的指令序列。
CPU 300从ROM 130读取包括在正常处理的指令序列1400中的指令“MOV #0,D2”,并且执行读取的指令“MOV#0,D2”。结果,CPU 300将值“0”存储到通用寄存器组104的第二寄存器中。
CPU 300从ROM 130读取指令“MAC D0,D1”,并且执行读取的指令指令“MAC D0,D1”。结果,CPU 300将乘积-求和的结果值存储到第三计算结果存储寄存器315中。
在执行上述指令“MAC D0,D1”之后,CPU 300接收到中断,并且执行在中断句柄的指令序列1410头部处的指令。
CPU 300将存储在通用寄存器组104中的值保存到RAM 140。这时,存储在通用寄存器组104的第二寄存器中的值“0”也被保存到RAM 140。
CPU 300从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLRD0”。结果,CPU 300将值“0”存储到通用寄存器组104的第零寄存器中。同时,CPU 300将存储在堆栈指针存储寄存器103中的地址值作为SP初始值存储到RAM 140中。
下面基于图15所示的指令序列1411描述CPU 300的操作。
CPU 300从ROM 130读取指令“MOV D3,D2”,并且执行读取的指令“MOV D3,D2”。结果,CPU 300将存储在通用寄存器组104的第三寄存器中的值“0b0101”存储到通用寄存器组104的第二寄存器中。
CPU 300从ROM 130读取指令“AND#0b0001,D2”,并且执行读取的指令“AND #0b0001,D2”。结果,CPU 300对存储在通用寄存器组104的第二寄存器中的值“0b0101”和作为立即数给出的值“0b0001”进行逻辑与操作。然后,CPU 300在通用寄存器组104的第二寄存器中存储计算结果“0b0001”。
CPU 300从ROM 130读取指令“MOV#0b0001,D1”,并且执行读取的指令“MOV #0b0001,D1”。结果,CPU 300将值“0b0001”存储到通用寄存器组104的第一寄存器中。
CPU 300从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。结果,D1和D2互相匹配,因此CPU 300将值“1”写入标志寄存器202。
CPU 300从ROM 130读取指令“Bcc<Label_1>”,并且执行读取的指令“Bcc<Label_1>”。存储在标志寄存器202中的值为“1”。因此,CPU 300不将该处理分支到<Label_1>。
CPU 300从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 300使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 300从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。结果,CPU 300将存储在第一计算结果存储寄存器313中的值存储到通用寄存器组104的第一寄存器中。
CPU 300从ROM 130读取指令“MOV D1,(SP)”,并且执行读取的指令“MOV D1,(SP)”。结果,CPU 300将存储在通用寄存器组104的第一寄存器中的值写入到由堆栈指针存储寄存器103中存储的地址值指定的RAM 140的地址中。
CPU 300从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 300使存储在通用寄存器组104的第零寄存器中的值加1,并且将该增加的值存储在第零寄存器中。
CPU 300从ROM 130读取指令“MOV D3,D2”,并且将通用寄存器组104的第三寄存器中存储的值“0b0101”存储到通用寄存器组104的第二寄存器中。
CPU 300从ROM 130读取指令“AND #0b0010,D2”,并且执行读取的指令“AND #0b0010,D2”。CPU 300对存储在通用寄存器组104的第二寄存器中的值“0b0101”与作为立即数给出的值“0b0010”执行逻辑与操作。然后,CPU 300在通用寄存器组104的第二寄存器中存储该逻辑与操作的结果值“0b0000”。
CPU 300从ROM 130读取指令“MOV #0b0010,D1”,并且执行读取的指令“MOV #0b0010,D1”。结果,CPU 300将值“0b0010”存储到通用寄存器组104的第一寄存器中。
CPU 300从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。结果,D1和D2不互相匹配,因此CPU 300将值“0”写入标志寄存器202。
CPU 300从ROM 130读取指令“Bcc<Label_2>”,并且执行读取的指令“Bcc<Label_2>”。结果,标志寄存器202中存储的值为“0”。因此,CPU 300将该处理分支到<Label_2>。
CPU 300从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 300使存储在通用寄存器组104的第零寄存器中的值加1,并且将该增加的值存储在第零寄存器中。
CPU 300从ROM 130读取指令“MOV D3,D2”,并且将存储在通用寄存器组104的第三寄存器中的值“0b0101”存储到通用寄存器组104的第二寄存器中。
CPU 300从ROM 130读取指令“AND #0b0100,D2”,并且对存储在通用寄存器组104的第二寄存器中的值“0b0101”与作为立即数给出的值“0b0100”执行逻辑与操作。CPU 300在通用寄存器组104的第二寄存器中存储计算结果值“0b0100”。
CPU 300从ROM 130读取指令“MOV #0b0100,D1”,并且执行读取的指令“MOV #0b0100,D1”。结果,CPU 300将值“0b0100”存储到通用寄存器组104的第一寄存器中。
CPU 300从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。作为结果,D1和D2互相匹配,因此,CPU 300将值“1”写入标志寄存器202。
CPU 300从ROM 130读取指令“Bcc<Label_3>”,并且执行读取的指令“Bcc<Label_3>”。标志寄存器202中存储的值为“1”。因此,CPU 300不将该处理分支到<Label_3>,并且执行后面的指令。
CPU 300从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 300使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 300从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。结果,存储在第三计算结果存储寄存器315中存储的值被存储到通用寄存器组104的第一寄存器中。
CPU 300从ROM 130读取指令“MOV D1,(SP)”,并且执行读取的指令“MOV D1,(SP)”。结果,CPU 300将存储在通用寄存器组104的第一寄存器中的值写入到由堆栈指针存储寄存器103中存储的地址值指定的RAM 140的地址中。
然后,CPU 300执行中断句柄的指令序列。
在完成需要实际执行的指令序列的执行之后,CPU 300从RAM 140读取SP初始值,并且将该SP初始值写入到堆栈指针存储寄存器103。
然后,CPU 300从ROM 130读取指令“MOV D3,D2”,并且将存储在通用寄存器组104的第三寄存器中的值“0b0101”存储到通用寄存器组104的第二寄存器中。
CPU 300从ROM 130读取指令“AND #0b0001,D2”,并且执行读取的指令“AND #0b0001,D2”。CPU 300对存储在通用寄存器组104的第二寄存器中的值“0b0101”和作为立即数给出的值“0b0001”执行逻辑与操作。CPU 300在通用寄存器组104的第二寄存器中存储计算结果值“0b0001”。
CPU 300从ROM 130读取指令“MOV#0b0001,D1”,并且执行读取的指令“MOV#0b0001,D1”。结果,CPU 300将值“0b0001”存储到通用寄存器组104的第一寄存器中。
CPU 300从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。结果,D1和D2互相匹配,因此,CPU 300将值“1”写入标志寄存器202。
CPU 300从ROM 130读取指令“Bcc<Label_4>”,并且执行读取的指令“Bcc<Label_4>”。结果,标志寄存器202中存储的值为“1”。因此,CPU 300不将该处理分支到<Label_4>。
CPU 300从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 300使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 300从ROM 130读取指令“MOV(SP),D1”,并且执行读取的指令“MOV(SP),D1”。结果,CPU 300将由RAM 140的堆栈指针存储寄存器103中存储的地址值指定的地址中存储的值写入到通用寄存器组104的第一寄存器中。
CPU 300和协处理器310从ROM 130读取指令“PUTACX D0,D1”,并且执行读取的指令“PUTACX D0,D1”。结果,第一计算单元112将存储在通用寄存器组104的第一寄存器中的值存储到第一计算结果存储寄存器313中。
CPU 300从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 300使存储在通用寄存器组104的第零寄存器中的值加1,并且将该增加的值存储在第零寄存器中。
CPU 300从ROM 130读取指令“MOV D3,D2”,并且将存储在通用寄存器组104的第三寄存器中的值“0b0101”存储到通用寄存器组104的第二寄存器中。
CPU 300从ROM 130读取指令“AND #0b0010,D2”,并且执行读取的指令“AND #0b0010,D2”。CPU 300对通用寄存器组104的第二寄存器中存储的值“0b0101”和作为立即数给出的值“0b0010”执行逻辑与操作。CPU300将计算结果值“0b0000”存储到通用寄存器组104的第二寄存器中。
CPU 300从ROM 130读取指令“MOV #0b0010,D1”,并且执行读取的指令“MOV #0b0010,D1”。结果,CPU 300将值“0b0010”存储到通用寄存器组104的第一寄存器中。
CPU 300从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。结果,D1和D2不互相匹配,因此,CPU 300将值“1”写入标志寄存器202。
CPU 300从ROM 130读取指令“Bcc<Label_5>”,并且执行读取的指令“Bcc<Label_5>”。结果,标志寄存器202中存储的值为“0”。因此,CPU 300将该处理分支到<Label_5>。
CPU 300从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 300使存储在通用寄存器组104的第零寄存器中的值加1,并且将该增加的值存储在第零寄存器中。
CPU 300从ROM 130读取指令“MOV D3,D2”,并且将存储在通用寄存器组104的第三寄存器中的值“0b0101”存储到通用寄存器组104的第二寄存器中。
CPU 300从ROM 130读取指令“AND #0b0100,D2”,并且执行读取的指令“AND #0b0100,D2”。CPU 300对存储在通用寄存器组104的第二寄存器中的值“0b0101”和作为立即数给出的值“0b0100”执行逻辑与操作。CPU 300将计算结果值“0b0100”存储到通用寄存器组104的第二寄存器中。
CPU 300从ROM 130读取指令“MOV #0b0100,D1”,并且执行读取的指令“MOV #0b0100,D1”。结果,CPU 300将值“0b0100”存储到通用寄存器组104的第一寄存器中。
CPU 300从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。结果,D1和D2互相匹配,因此,CPU 300将值“1”写入标志寄存器202。
CPU 300从ROM 130读取指令“Bcc<Label_6>”,并且执行读取的指令“Bcc<Label_6>”。结果,标志寄存器202中存储的值为“1”。因此,CPU 300不将该处理分支到<Label_6>。
CPU 300从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。作为结果,CPU 300使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储到堆栈指针存储寄存器103中。
CPU 300从ROM 130读取指令“MOV(SP),D1”,并且执行读取的指令“MOV(SP),D1”。结果,CPU 300将由RAM 140的堆栈指针存储寄存器103中存储的地址值指定的地址中存储的值读入到通用寄存器组104的第一寄存器中。
CPU 300从ROM 130读取指令“PUTACX D0,D1”,并且执行读取的指令“PUTACX D0,D1”。结果,第三计算单元314将存储在通用寄存器组104的第一寄存器中的值存储到第三计算结果存储寄存器315中。
回到图14所示的指令序列1410,描述其后面的指令。
CPU 300将已经保存到RAM 140的值恢复到通用寄存器组104中。
此时,已经从通用寄存器组104的第二寄存器保存到RAM 140的值“0”也被存储到通用寄存器组104的第二寄存器中。
CPU 300从ROM 130读取指令“RTI”,并且执行读取的指令“RTI”。结果,CPU 300执行包括在正常处理的指令序列1400中的指令,并且从ROM 130读取指令“GETACX D2,D1”,执行该读取的指令“GETACX D2,D1”。
如上所述,第三实施方式具有其中当信息处理装置350复位时,与计算单元有关的信息从协处理器310传输到CPU 300的结构。因此,CPU 300可以检测在协处理器310中实施的计算单元的类型。基于获取的与计算单元有关的信息,CPU 300可以向第一数据输入总线120输出用于指定寄存器的号。同时,CPU 300可以检测需要输出的号。
<第四实施方式>
在上述第一到第三实施方式中,从所有寄存器保存数据。但是,从所有寄存器保存数据不是必需的。当中断发生时,如果从不需要从其保存数据的寄存器中保存数据,则要花费不必要的长时间周期来开始执行在中断处理中要实际执行的指令。鉴于这个问题,第四实施方式的目的在于消除这种不必要的时间周期。
下面的示例是在第四实施方式中不需要从所有寄存器保存数据的情况。例如,一定的计算单元不用于中断句柄。在这种情况下,不会有数据改写在某一计算单元中实施的没有使用的寄存器中存储的数据。即,正常处理中已经执行的计算不会消失。
因此,第四实施方式描述了其中当发生中断时,不会从对应于在该中断处理中没有使用的计算单元的寄存器保存数据的情况。
<结构>
图16示出了根据第四实施方式的信息处理装置450的功能结构。如图16所示,信息处理装置450包括CPU 400、协处理器410、ROM 130和RAM 140。
CPU 400包括CPU指令解码器101、标志寄存器102、堆栈指针存储寄存器103和通用寄存器组104。
协处理器410包括协处理器指令解码器111、第一计算单元112、第二计算单元114、第一计算结果存储寄存器113、第二计算结果存储寄存器115和选择器116。
第四实施方式中与第一实施方式中具有相同名称和附图标记的功能单元执行与第一实施方式中相同的功能。因此,将省略其描述。
根据第四实施方式的信息处理装置450包括实施的计算单元信息输出电路417,其与根据第一实施方式的信息处理装置150中包括的实施的计算单元信息输出电路117的功能不同。
实施的计算单元信息输出电路417将中断级别和从其保存数据的寄存器的数量之间的对应关系存储在其中。当执行后面描述的指令“PUTLVL Dm,Dn”时,实施的计算单元信息输出电路417基于经由第一数据输入总线120获取的中断级别而确定要从其保存数据的寄存器的数量。当执行指令“GETACX Dm,Dn”时,实施的计算单元信息输出电路417将确定的要从其保存数据的寄存器的数量与第一数据输入总线120的值进行比较。当确定的寄存器的数量与第一数据输入总线120的值相匹配时,实施的计算单元信息输出电路417输出标志值“1”。当确定的寄存器的数量与第一数据输入总线120的值不匹配时,实施的计算单元信息输出电路417输出标志值“0”。
在第四实施方式中,中断级别包括级别“0”和级别“1”。当在级别“0”发生中断时,实施的计算单元信息输出电路417确定要从其保存数据的寄存器的数量是2。而且,当在级别“1”发生中断时,实施的计算单元信息输出电路417确定要从其保存数据的寄存器的数量是1。
<命令>
下面描述根据第四实施方式的指令。
<扩展计算指令>
现在描述根据第四实施方式的协处理器指令。图17是表示由CPU 400和协处理器410从ROM 130读取的协处理器指令的缩写和对应于该缩写的CPU400的操作和协处理器410的操作的示例列表。
<指令“PUTLVL Dm,Dn”>
指令“PUTLVL Dm,Dn”是用于根据中断级别而确定要从其保存数据的寄存器的数量的指令,并且将确定的寄存器的数量设置作为协处理器410的实施的计算单元信息输出电路417的值。
CPU 400和协处理器410读取指令“PUTLVL Dm,Dn”,并且执行读取的指令“PUTLVL Dm,Dn”。CPU指令解码器101解码指令“PUTLVL Dm,Dn”。根据解码的指令,CPU指令解码器101向包括在CPU 400中的每个电路输出控制信号。协处理器指令解码器111解码指令“PUTLVL Dm,Dn”。根据解码的指令,协处理器指令解码器111向包括在协处理器410中的每个电路输出控制信号。通用寄存器组104向第一数据输入总线120输出Dm,并且向第二数据输入总线121输出Dn。实施的计算单元信息输出电路417将经由第一数据输入总线120获取的值作为中断级别存储在其中。根据该存储的值,实施的计算单元信息输出电路417产生表示从其保存数据/向其恢复数据的寄存器的数量的信息。
<指令“GETACX Dm,Dn”>
这里,关于指令“GETACX Dm,Dn”,为每个中断级别描述根据第四实施方式的信息处理装置450的操作。
CPU 400和协处理器410从ROM 130读取指令“GETACX Dm,Dn”,并且执行读取的指令“GETACX Dm,Dn”。
CPU指令解码器101解码指令“GETACX Dm,Dn”,并且向包括在CPU400中的每个电路输出控制信号。同时,协处理器指令解码器111解码指令“GETACX Dm,Dn”,并且向包括在协处理器410中的每个电路输出控制信号。
通用寄存器组104向第一数据输入总线120输出Dm,并且向第二数据输入总线121输出Dn。第一数据输入总线120向协处理器410的第一计算单元112传输Dm。第二数据输入总线121向协处理器410的第一计算单元112传输Dn。
下面描述三种情况:
(1)当实施的计算单元信息输出电路417中存储中断级别“0”时,从第一计算结果存储寄存器113读取值的情况;
(2)当实施的计算单元信息输出电路417中存储中断级别“1”时,从第一计算结果存储寄存器113读取值的情况;和
(3)当实施的计算单元信息输出电路417中存储中断级别“0”时,从第二计算结果存储寄存器115读取值的情况。
注意,当中断级别为“1”时,没有从第二计算结果存储寄存器115读取数据。
(1)当实施的计算单元信息输出电路417中存储中断级别“0”时,从第一计算结果存储寄存器113读取值的情况
第一计算单元112经由第一数据输入总线120,读取Dm,其为表示第一计算单元112的值“1”。第一计算结果存储寄存器113向选择器116输出存储在其中的值。
根据协处理器指令解码器111输出的控制信号,选择器116选择已经由第一计算结果存储寄存器113输出的数据,并且向数据输出总线122输出选择的数据。
根据协处理器指令解码器111输出的控制信号,实施的计算单元信息输出电路417对经由第一数据输入总线120获取的值与从其保存数据/向其恢复数据的寄存器的数量进行比较。获取的值小于寄存器的数量,因此实施的计算单元信息输出电路417输出标志值“0”。
或电路118对第一计算单元112的计算结果标志、第二计算单元114的计算结果标志和实施的计算单元信息输出电路417的输出值执行逻辑或操作。这样,或电路118输出实施的计算单元信息输出电路417的标志值“0”。
经由数据输出总线122向CPU 400的通用寄存器组104传输由选择器116输出的第一计算结果存储寄存器113的输出值。通用寄存器组104获取数据输出总线122的值,并且将该获取的值存储在其第n寄存器中。标志寄存器102存储由协处理器410的实施的计算单元信息输出电路417输出的标志值“0”作为计算结果标志。
(2)当实施的计算单元信息输出电路417中存储中断级别“1”时,从第一计算结果存储寄存器113读取值的情况
第一计算单元112经由第一数据输入总线120读取值“1”,其表示第一计算单元112。第一计算结果存储寄存器113向选择器116输出存储在其中的值。
根据协处理器指令解码器111输出的控制信号,选择器116选择已经由第一计算结果存储寄存器113输出的数据,并且向数据输出总线122输出选择的数据。
根据协处理器指令解码器111输出的控制信号,实施的计算单元信息输出电路417对经由第一数据输入总线120获取的值与从其保存数据/向其恢复数据的寄存器的数量进行比较。获取的值大于寄存器的数量,因此实施的计算单元信息输出电路417输出标志值“1”。
或电路118对第一计算单元112的计算结果标志、第二计算单元114的计算结果标志和实施的计算单元信息输出电路417的输出值执行逻辑或操作。这样,或电路118输出实施的计算单元信息输出电路417的标志值“1”。
经由数据输出总线122向CPU 400的通用寄存器组104传输由选择器116输出的第一计算结果存储寄存器113的输出值。
通用寄存器组104获取数据输出总线122的值,并且将该获取的值存储在其第n寄存器中。标志寄存器102中存储由协处理器410的实施的计算单元信息输出电路417输出的标志值“1”作为计算结果标志。
(3)当实施的计算单元信息输出电路417中存储中断级别“0”时,从第二计算结果存储寄存器115读取值的情况
第二计算单元114经由第一数据输入总线120读取值“2”,该值表示第二计算单元114。第二计算结果存储寄存器115向选择器116输出存储在其中的值。
根据协处理器指令解码器111输出的控制信号,选择器116选择已经由第二计算结果存储寄存器115输出的数据,并且向数据输出总线122输出选择的数据。
根据协处理器指令解码器111输出的控制信号,实施的计算单元信息输出电路417对经由第一数据输入总线120获取的值与从其保存数据/向其恢复数据的寄存器的数量进行比较。获取的值大于寄存器的数量,因此实施的计算单元信息输出电路417输出标志值“1”。
或电路118对第一计算单元112的计算结果标志、第二计算单元114的计算结果标志和实施的计算单元信息输出电路417的输出值执行逻辑或操作。这样,或电路118输出实施的计算单元信息输出电路417的标志值“1”。
经由数据输出总线122向CPU 400的通用寄存器组104传输由选择器116输出的第二计算结果存储寄存器115的输出值。
通用寄存器组104获取数据输出总线122的值,并且将获取的值存储在其第n寄存器中。标志寄存器102将由协处理器410的实施的计算单元信息输出电路117输出的标志值“1”存储在其中作为计算结果标志。
这样完成了根据第四实施方式的指令“GETACX Dm,Dn”的描述。
<操作>
现在用指令序列的具体示例描述根据第四实施方式的信息处理装置450的操作。首先,参照图18描述在中断级别“0”发生中断的情况。然后,参照图19描述在中断级别“1”发生中断的情况。
图18示出了表示在中断级别“0”发生中断的情况下,使用图2、3、13和17中描述的指令的汇编程序的示例的指令序列。下面描述执行该指令序列的操作。图18中所示的箭头1801表示中断发生时的时序。
CPU 400执行存储在ROM 130中的正常处理的指令序列1800。
CPU 400从ROM 130读取包括在正常处理的指令序列1800中的指令“CLR D2”,并且执行读取的指令“CLR D2”。结果,CPU 400将值“0”存储到通用寄存器组104的第二寄存器中。
CPU 400从ROM 130读取指令“MULQ D0,D1”,并且执行读取的指令“MULQ D0,D1”。结果,第一计算单元112将乘法结果的高位存储到第一计算结果存储寄存器113中。同时,CPU 400将乘法结果的低位存储到通用寄存器组104的第一寄存器中,并且将计算结果标志存储在标志寄存器102中。
在执行上述指令“MULQ D0,D1”之后,CPU 400接收中断,并且执行在中断句柄的指令序列1810的头部处的指令。
CPU 400将存储在通用寄存器组104中的值保存到RAM 140。此时,在通用寄存器组104的第二寄存器中存储的值“0”也被保存到RAM 140。
CPU 400从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLRD0”。结果,CPU 400将值“0”存储到通用寄存器组104的第零寄存器中。同时,CPU 400将存储在堆栈指针存储寄存器103中的地址值作为SP初始值存储在RAM 140中。
CPU 400从ROM 130读取指令“MOV D0,D1”,并且将存储在通用寄存器组104的第零寄存器中的值“0”存储到通用寄存器组104的第一寄存器中。
CPU 400从ROM 130读取指令“PUTLVL D1,D2”,并且执行读取的指令“PUTLVL D1,D2”。结果,实施的计算单元信息输出电路417将值“0”存储在其中作为中断级别,并且基于该中断级别“0”而确定从其保存数据/向其恢复数据的寄存器的数量为2。
CPU 400从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 400使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 400从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。结果,CPU 400将存储在第一计算结果存储寄存器113中的值存储到通用寄存器组104的第一寄存器中。同时,CPU 400将由实施的计算单元信息输出电路417输出的标志值“0”存储到标志寄存器102中。
CPU 400从ROM 130读取指令“MOV D1,SP”,并且执行读取的指令“MOV D1,SP”。结果,CPU 400将存储在通用寄存器组104的第一寄存器中的值写入到由堆栈指针存储寄存器103中存储的地址值指定的RAM 140的地址。
CPU 400从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 400使存储在通用寄存器组104的第零寄存器中的值加1,并且将增加后的值存储在第零寄存器中。
CPU 400从ROM 130读取指令“Bcc<Label_1>”,并且执行读取的指令“Bcc<Label_1>”。标志寄存器102中存储的值为“0”。因此,CPU 400将该处理分支到<Label_1>。
CPU 400从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 400使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 400从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。结果,CPU 400将存储在第二计算结果存储寄存器115中的值存储到通用寄存器组104的第一寄存器中。同时,CPU 400将由实施的计算单元信息输出电路417输出的标志值“1”存储到标志寄存器102中。
CPU 400从ROM 130读取指令“MOV D1,SP”,并且执行读取的指令“MOV D1,SP”。结果,CPU 400将存储在通用寄存器组104的第一寄存器中的值写入到由堆栈指针存储寄存器103中存储的地址值指定的RAM 140的地址。
CPU 400从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 400使存储在通用寄存器组104的第零寄存器中的值加1,并且将增加后的值存储到第零寄存器中。
CPU 400从ROM 130读取指令“Bcc<Label_1>”,并且执行读取的指令“Bcc<Label_1>”。标志寄存器102中存储的值为“1”。因此,CPU 400不将该处理分支到<Label_1>。之后,CPU 400执行中断句柄的指令序列中包括的指令。
在执行中断句柄的指令序列之后,CPU 400从ROM 130读取指令“CLRD0”,并且执行读取的指令“CLR D0”。结果,CPU 400将值“0”存储到通用寄存器组104的第零寄存器中。同时,CPU 400从RAM 140读取SP初始值,并且将读取的SP初始值写入堆栈指针存储寄存器103。
CPU 400从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 400使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 400从ROM 130读取指令“MOV(SP),D1”,并且执行读取的指令“MOV(SP),D1”。结果,CPU 400将存储在由RAM 140的堆栈指针存储寄存器103中存储的地址值指定的地址中的数据读入通用寄存器组104的第一寄存器中。
CPU 400从ROM 130读取指令“PUTACX D0,D1”,并且执行读取的指令“PUTACX D0,D1”。结果,第二计算单元114将存储在通用寄存器组104的第一寄存器中的值存储到第二计算结果存储寄存器115中。同时,CPU 400将由实施的计算单元信息输出电路417输出的标志值“1”存储到标志寄存器102中。
CPU 400从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 400使存储在通用寄存器组104的第零寄存器中的值加1,并且将增加后的值存储在第零寄存器中。
CPU 400从ROM 130读取指令“Bcc<Label_2>”,并且执行读取的指令“Bcc<Label_2>”。标志寄存器102中存储的值为“0”。因此,CPU 400将该处理分支到<Label_2>。
CPU 400从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 400使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 400从ROM 130读取指令“MOV(SP),D1”,并且执行读取的指令“MOV(SP),D1”。结果,CPU 400将存储在由RAM 140的堆栈指针存储寄存器103中存储的地址值指定的地址中的数据读入通用寄存器组104的第一寄存器中。
CPU 400从ROM 130读取指令“PUTACX D0,D1”,并且执行读取的指令“PUTACX D0,D1”。结果,第二计算单元114将通用寄存器组104的第一寄存器中存储的值存储到第二计算结果存储寄存器115中。同时,CPU 400将实施的计算单元信息输出电路417输出的标志值“1”存储到标志寄存器102中。
CPU 400从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 400使存储在通用寄存器组104的第零寄存器中的值加1,并且将增加后的值存储在第零寄存器中。
CPU 400从ROM 130读取指令“Bcc<Label_2>”,并且执行读取的指令“Bcc<Label_2>”。标志寄存器102中存储的值为“1”。因此,CPU 400不将该处理分支到<Label_2>。
CPU 400将已经保存到RAM 140的值恢复到通用寄存器组104。这时,已经从通用寄存器组104的第二寄存器保存到RAM 140的值“0”也被存储到通用寄存器组104的第二寄存器中。
CPU 400从ROM 130读取指令“RTI”,并且执行读取的指令“RTI”。结果,CPU 400执行包括在正常处理的指令序列1800中的指令。
CPU 400从ROM 130读取指令“GETACX D2,D1”,并且执行读取的指令“GETACX D2,D1”。结果,CPU 400将存储在第一计算结果存储寄存器113中的值存储到通用寄存器组104的第二寄存器中。同时,CPU 400将由实施的计算单元信息输出电路417输出的标志值“0”存储到标志寄存器102中。
下面描述在中断级别“1”发生中断的情况下,信息处理装置450的操作。
图19示出了表示在中断级别“1”发生中断的情况下,使用图2、3、13和17中描述的指令的汇编程序的示例的指令序列。下面描述执行该指令序列的操作。
CPU 400执行存储在ROM 130中的正常处理的指令序列1900。
CPU 400从ROM 130读取包括在正常处理的指令序列1900中的指令“CLR D2”,并且执行读取的指令“CLR D2”。结果,CPU 400将值“0”存储到通用寄存器组104的第二寄存器中。
CPU 400从ROM 130读取指令“MULQ D0,D1”,并且执行读取的指令“MULQ D0,D1”。结果,第一计算单元112将乘法结果的高位存储到第一计算结果存储寄存器113中。同时,CPU 400将乘法结果的低位存储到通用寄存器组104的第一寄存器中,并且将计算结果标志存储在标志寄存器102中。
在执行上述指令“MULQ D0,D1”之后,CPU 400接收中断,并且执行在中断句柄的指令序列1910的头部处的指令。
CPU 400将存储在中断句柄的指令序列中的通用寄存器组104中的值保存到RAM 140。这时,在通用寄存器组104的第二寄存器中存储的值“0”也被保存到RAM 140。
CPU 400从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLRD0”。结果,CPU 400将值“0”存储到通用寄存器组104的第零寄存器中。同时,CPU 400将此时存储在堆栈指针存储寄存器103中的地址值作为SP初始值存储在RAM 140中。
CPU 400从ROM 130读取指令“MOV D0,D1”,并且将存储在通用寄存器组104的第零寄存器中的值“0”存储到通用寄存器组104的第一寄存器中。
CPU 400从ROM 130读取指令“ADD#1,D1”,并且使通用寄存器组104的第一寄存器中存储的值加1,并且将值“1”存储到第一寄存器中。
CPU 400从ROM 130读取指令“PUTLVL D1,D2”,并且执行读取的指令“PUTLVL D1,D2”。结果,实施的计算单元信息输出电路417将值“1”存储在其中作为中断级别,并且基于该中断级别“1”而确定从其保存数据/向其恢复数据的寄存器的数量。
CPU 400从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 400使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 400从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。结果,CPU 400将存储在第一计算结果存储寄存器113中的值存储到通用寄存器组104的第一寄存器中。同时,CPU 400将由实施的计算单元信息输出电路417输出的标志值“1”存储到标志寄存器102中。
CPU 400从ROM 130读取指令“MOV D1,(SP)”,并且执行读取的指令“MOV D1,(SP)”。结果,CPU 400将存储在通用寄存器组104的第一寄存器中的值写入由堆栈指针存储寄存器103中存储的地址值指定的RAM 140的地址中。
CPU 400从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 400使存储在通用寄存器组104的第零寄存器中的值加1,并且将增加后的值存储在第零寄存器中。
CPU 400从ROM 130读取指令“Bcc<Label_1>”,并且执行读取的指令“Bcc<Label_1>”。标志寄存器102中存储的值为“1”。因此,CPU 400不将该处理分支到<Label_1>。
然后,CPU 400执行中断句柄的指令序列。
在完成中断句柄的指令序列中包括的指令的执行之后,CPU 400从ROM130读取指令“CLR D0”,并且执行读取的指令“CLR D0”。同时,CPU 400从RAM 140读取SP初始值,并且将该读取的SP初始值写入堆栈指针存储寄存器103。
CPU 400从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 400使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 400从ROM 130读取指令“MOV(SP),D1”,并且执行读取的指令“MOV(SP),D1”。结果,CPU 400将存储在由RAM 140的堆栈指针存储寄存器103中存储的地址值指定的地址中的数据读入通用寄存器组104的第一寄存器中。
CPU 400和协处理器410从ROM 130读取指令“PUTACX D0,D1”,并且执行读取的指令“PUTACX D0,D1”。结果,第一计算单元112将存储在通用寄存器组104的第一寄存器中的值存储到第一计算结果存储寄存器113中。同时,CPU 400将由实施的计算单元信息输出电路417输出的标志值“0”存储到标志寄存器102中。
CPU 400从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 400使存储在通用寄存器组104的第零寄存器中的值加1,并且将增加后的值存储在第零寄存器中。
CPU 400从ROM 130读取指令“Bcc<Label_2>”,并且执行读取的指令“Bcc<Label_2>”。标志寄存器102中存储的值为“1”。因此,CPU 400不将该处理分支到<Label_2>。
CPU 400将已经保存到RAM 140的值恢复到通用寄存器组104。这时,已经从通用寄存器组104的第二寄存器保存到RAM 140的值“0”也被恢复到通用寄存器组104的第二寄存器中。
CPU 400从ROM 130读取指令“RTI”,并且执行读取的指令“RTI”。因此,CPU 400执行包括在正常处理的指令序列1900中的指令。
CPU 400从ROM 130读取指令“GETACX D2,D1”,并且执行读取的指令“GETACX D2,D1”。结果,CPU 400将存储在第一计算结果存储寄存器113中的值存储到通用寄存器组104的第二寄存器中。同时,CPU 400将由实施的计算单元信息输出电路417输出的标志值“0”存储到标志寄存器102中。然后,信息处理装置450执行后面的处理。
如在第四实施方式中所述,根据中断级别,预先确定对应于中断级别的中断处理中使用的计算单元。因此,第四实施方式的特征在于根据中断级别指定从其保存数据的寄存器。不执行不必要的从寄存器的数据保存,因此,可以减小保存数据以执行中断处理需要的时间周期和恢复数据以结束中断处理并且返回到正常处理需要的时间周期。
<第五实施方式>
在上述实施方式中,即使在任务期间没有执行扩展计算指令,任务切换导致用于保存/恢复存储在寄存器中的数据的开销。第五实施方式描述了减小这种开销。
<结构>
图20示出了根据第五实施方式的信息处理装置550的功能结构的方框图。
如图20所示,信息处理装置550包括,ROM 130、RAM 140、CPU 500、和协处理器510。
CPU 500包括CPU指令解码器101、堆栈指针存储寄存器103和通用寄存器组104。
协处理器510包括协处理器指令解码器111、第一计算单元112、第一计算结果存储寄存器113、第二计算单元114、第二计算结果存储寄存器115、选择器116、执行任务管理电路517和扩展计算执行标志寄存器518。
上述第一实施方式具有其中经由或电路118输出第一计算单元112和第二计算单元114的计算结果标志的结构。在第五实施方式的描述和附图中省略了该结构,因为该结构不是第五实施方式的特征。
同时,第五实施方式中和第一实施方式或第二实施方式中具有相同名称和附图标记的功能单元执行与第一实施方式或第二实施方式中相同的功能。因此将省略对其描述。
执行任务管理电路517包括扩展计算执行标志寄存器518。执行任务管理电路517管理正在协处理器510中执行的任务,并且将表示扩展计算是否已经执行的值存储到扩展计算执行标志寄存器518中。同时,执行任务管理电路517向CPU指令解码器101输出中断请求信号以请求中断。同时,在第五实施方式中,如果执行了扩展计算指令而不是指令“GETACX Dm,Dn”,则执行任务管理电路517将值“1”存储到扩展计算执行标志寄存器518中。
扩展计算执行标志寄存器518将由执行任务管理电路517设置和清除的协处理器510的执行状态存储在其中。
<命令>
图21是表示由CPU 500和协处理器510从ROM 130读取的协处理器指令的缩写和对应于这些缩写的CPU 500的操作和协处理器710的操作的示例列表。
<指令“PUTTSK Dm,Dn”>
CPU 500和协处理器510从ROM 130读取指令“PUTTSK Dm,Dn”,并且执行读取的指令“PUTTSK Dm,Dn”。CPU指令解码器101解码指令“PUTTSK Dm,Dn”,并且向CPU 500中包括的每个电路输出控制信号。协处理器指令解码器111解码指令“PUTTSK Dm,Dn”,并且向协处理器510中包括的每个电路输出控制信号。
通用寄存器组104向第一数据输入总线120输出Dm,并且向第二数据输入总线121输出Dn。第一数据输入总线120向协处理器510的执行任务管理电路517传输Dm。执行任务管理电路517将经由第一数据输入总线120获取的值作为任务号存储在其中,并且清除存储在扩展计算执行标志寄存器518中的值。
<操作>
现在使用指令序列的具体示例描述根据第五实施方式的信息处理装置550的操作。
图22示出了表示使用图2、3和21中描述的指令在任务切换处汇编程序的示例的指令序列。下面描述用于执行该指令序列的操作。
CPU 500执行存储在ROM 130中的任务0的指令序列2200。
CPU 500从ROM 130读取任务0的指令序列2200中包括的指令“CLRD2”,并且执行读取的指令“CLR D2”。结果,CPU 500将值“0”存储到通用寄存器组104的第二寄存器中。
CPU 500从ROM 130读取指令“PUTTSK D0,D1”,并且执行读取的指令“PUTTSK D0,D1”。结果,执行任务管理电路517将任务号“0”存储到扩展计算执行标志寄存器518中。
根据箭头2201表示的时序发生任务转换,CPU 500执行包括在任务1的指令序列2210中的指令。
CPU 500从ROM 130读取任务1的指令序列2210中包括的指令“MOV#1,D0”,并且执行读取的指令“MOV #1,D0”。结果,CPU 500将值“1”存储到通用寄存器组104的第零寄存器中。
CPU 500从ROM 130读取指令“PUTTSK D0,D1”,并且执行读取的指令“PUTTSK D0,D1”。结果,执行任务管理电路517将任务号“0”存储到扩展计算执行标志寄存器518中。此时,存储在扩展计算执行标志寄存器518中的值为“0”。因此,没有中断发生。之后,CPU 500执行指令序列2210中包括的实际要执行的指令。
CPU 500完成任务1的指令序列2210中包括的实际要执行的指令的执行。
CPU 500从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLRD0”。结果,CPU 500将值“0”存储到通用寄存器组104的第零寄存器中。
CPU 500从ROM 130读取指令“PUTTSK D0,D1”,并且执行读取的指令“PUTTSK D0,D1”。结果,执行任务管理电路517将任务号“0”存储到扩展计算执行标志寄存器518中。此时,扩展计算执行标志寄存器518中存储的值为“0”。因此,没有中断发生。
CPU 500重新开始执行任务0的指令序列2200中包括的挂起的指令。
CPU 500从ROM 130读取指令“MULQ D0,D1”,并且执行读取的指令“MULQ D0,D1”。结果,第一计算单元112将乘法结果的高位存储到第一计算结果存储寄存器113中。同时,CPU 500将乘法结果的低位存储到通用寄存器组104的第一寄存器中,并且将值“1”存储到扩展计算执行标志寄存器518中。
根据箭头2202表示的时序发生任务转换,CPU 500执行任务1的指令序列2220中包括的指令。
CPU 500从ROM 130读取包括在任务1的指令序列2220中的指令“MOV#1,D0”,并且执行读取的指令“MOV#1,D0”。结果,CPU 500将值“1”存储到通用寄存器组104的第零寄存器中。
CPU 500从ROM 130读取指令“PUTTSK D0,D1”,并且执行读取的指令“PUTTSK D0,D1”。结果,执行任务管理电路517将任务号“1”存储到扩展计算执行标志寄存器518中。此时,扩展计算执行标志寄存器518中存储的值为“1”。因此,根据箭头2221表示的时序发生中断。
CPU 500执行包括在中断句柄的指令序列2230中的指令。
CPU 500执行中断句柄的指令序列2230,并且将存储在任务0中的协处理器的寄存器中的值保存到RAM 140。注意,用于保存数据的具体处理与第一到第四实施方式的相同。
CPU 500从RAM 140恢复存储在任务1中协处理器的寄存器中的值。CPU500从ROM 130读取指令“RTI”,并且执行读取的指令“RTI”。CPU 500结束中断句柄处理,并且返回任务1的指令序列2200。
CPU 500从ROM 130读取指令“MULQ D0,D1”,并且执行读取的指令“MULQ D0,D1”。结果,第一计算单元112将乘法结果的高位存储到第一计算结果存储寄存器113中。同时,CPU 500将乘法结果的低位存储到通用寄存器组104的第一寄存器中,并且将值“1”存储到扩展计算执行标志寄存器518中。
CPU 500完成任务1的指令序列2220中包括的实际要执行的指令的执行。
CPU 500从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLRD0”。结果,CPU 500将值“0”存储到通用寄存器组104的第零寄存器中。
CPU 500从ROM 130读取指令“PUTTSK D0,D1”,并且执行读取的指令“PUTTSK D0,D1”。结果,执行任务管理电路517将任务号“0”存储到扩展计算执行标志寄存器518中。此时,扩展计算执行标志寄存器518中存储的值为“1”。因此,根据箭头2222表示的时序发生中断。
CPU 500执行包括在中断句柄的指令序列2240中的指令。
CPU 500执行中断句柄的指令序列2240,并且将存储在任务1中协处理器的寄存器中的值保存到RAM 140。注意,用于保存数据的具体处理与第一到第四实施方式的相同。
CPU 500从RAM 140恢复在任务1中协处理器的寄存器中存储的值。
CPU 500执行指令“RTI”,结束中断句柄处理,并且返回到任务1的指令序列2200。
CPU 500重新开始执行任务0的指令序列2200中包括的挂起的指令。
如上所述,在第五实施方式中,在通过在任务之间转换来执行多个任务的情况下,当从一个任务转换到另一个任务并且需要保存数据时,协处理器可以请求CPU基于是否已经执行扩展计算而产生中断。这样可以防止在没有执行扩展计算时在任务期间发生中断。
<第六实施方式>
在第一实施方式中,当中断发生时,一定从协处理器110的寄存器保存数据。但是,例如当在协处理器110中没有执行扩展计算时,不需要保存数据的处理。因此,花费了不必要的长时间周期来开始执行在中断过程中要实际执行的指令。结果,产生开销。第六实施方式描述了消除这种开销。
<结构>
图23示出了根据第六实施方式的信息处理装置650的功能结构的方框图。
如图23所示,信息处理装置650包括ROM 130、RAM 140、CPU 600和协处理器610。
CPU 600包括CPU指令解码器101、标志寄存器602、堆栈指针存储寄存器103和通用寄存器组604。
协处理器610包括协处理器指令解码器111、第一计算单元112、第一计算结果存储寄存器113和寄存器访问管理电路617。
上述第一实施方式具有其中经由或电路118输出第一计算单元112和第二计算单元114的计算结果标志的结构。在第六实施方式的描述和附图中省略了该结构,因为该结构不是第六实施方式的特征。
同时,第六实施方式中和第一实施方式或第二实施方式中具有相同名称和附图标记的功能单元执行与第一实施方式或第二实施方式中相同的功能。因此将省略对其描述。
寄存器访问管理电路617基于第一计算单元112是否已经执行计算而管理在第一计算结果存储寄存器113中是否存储数据的信息。具体地说,当协处理器指令解码器111解码用于第一计算单元112执行计算的指令时,寄存器访问管理电路617将表示已经执行计算的信息存储在其中。同时,当协处理器指令解码器111解码指令“GETACX Dm,Dn”时,寄存器访问管理电路617将其中存储的表示已经执行计算的信息更新为表示没有执行计算的信息,并且在其中存储更新的信息。当第一计算单元112已经执行计算时,寄存器访问管理电路617将值“1”存储在其中。当第一计算单元112没有执行计算时,寄存器访问管理电路617将值“0”存储在其中。
<命令>
下面描述第六实施方式中使用的各种指令。
<扩展计算指令>
图24是表示由CPU 600和协处理器610从ROM 130读取的协处理器指令的缩写和对应于该缩写的CPU 600的操作和协处理器610的操作的示例列表。
<指令“GETACX Dm,Dn”>
CPU 600和协处理器610从ROM 130读取指令“GETACX Dm,Dn”,并且执行读取的指令“GETACX Dm,Dn”。基本上,当执行指令“GETACX Dm,Dn”时,以与第一实施方式相同的方式获取数据。因此,省略其描述,而描述与第一实施方式不同的部分,即,寄存器访问管理电路617在执行指令“GETACX Dm,Dn”中的操作。
根据协处理器指令解码器111基于指令“GETACX Dm,Dn”输出的控制信号,寄存器访问管理电路617将其中存储的寄存器访问信息清除为值“0”。寄存器访问管理电路617向CPU 600输出寄存器访问信息(这里是值“0”)。
然后,标志寄存器602存储协处理器610输出的寄存器访问信息作为计算结果标志。
<CPU执行指令>
图25是由CPU 600使用的用于保存数据到RAM 140和从RAM 140恢复数据的指令的缩写以及对应于这些缩写的CPU 600的操作的示例列表。下面描述用于执行指令“MOV Flag,Dn”和“MOV Dm,Flag”的操作。
<指令“MOV Flag,Dn”>
CPU从ROM 130读取指令“MOV Flag,Dn”,并且执行读取的指令“MOVFlag,Dn”。指令“MOV Flag,Dn”是用于将标志寄存器602中存储的标志值存储到通用寄存器组604的指令。
CPU指令解码器101解码指令“MOV Flag,Dn”,并且向CPU 600中包括的每个电路输出控制信号。标志寄存器602向通用寄存器组604输出存储在其中的标志值。CPU 600将由标志寄存器602输出的标志值存储到通用寄存器组604的第n寄存器中。
<指令“MOV Dm,Flag”>
CPU 600从ROM 130读取指令“MOV Dm,Flag”,并且执行读取的指令“MOV Dm,Flag”。指令“MOV Dm,Flag”是用于使CPU 600改写标志寄存器602中存储的值的指令。
CPU指令解码器101解码指令“MOV Dm,Flag”,并且向CPU 600中包括的每个电路输出控制信号。通用寄存器组604的第m寄存器向标志寄存器602输出其中存储的值。标志寄存器602将由通用寄存器组604输出的值存储在其中。
<操作>
图26示出了表示利用图2、3、8、12、13、17、21、24和25,当发生中断时汇编程序的一个示例的指令序列。下面描述用于执行该指令序列的操作。图26所示的箭头2601和2602分别表示中断发生时的时序。
CPU 600执行ROM 130中存储的正常处理的指令序列2600。
中断发生,并且CPU 600根据箭头2601表示的时序执行中断句柄2610的头部处的指令。这时,没有协处理器指令在执行。
CPU 600将中断句柄的指令序列2610中包括的通用寄存器组604中存储的值保存到RAM 140。
CPU 600从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLRD0”。结果,CPU 600将值“0”存储到通用寄存器组604的第零寄存器中。
CPU 600将此时在堆栈指针存储寄存器103中存储的地址值作为SP初始值存储到RAM 140中。
CPU 600从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 600使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 600从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。CPU 600将存储在第一计算结果存储寄存器113中的值存储到通用寄存器组604的第一寄存器中。同时,CPU 600将存储在寄存器访问管理电路617中的寄存器访问信息值“0”存储到标志寄存器602中。
CPU 600从ROM 130读取指令“Bcc<Label_1>”,并且执行读取的指令“Bcc<Label_1>”。标志寄存器602中存储的值为“0”。因此,CPU 600将该处理分支到<Label_1>。
CPU 600从ROM 130读取指令“MOV Flag,D3”,并将存储在标志寄存器602中的值“0”存储到通用寄存器组604的第三寄存器中。
在完成中断句柄的指令序列2610的执行之后,CPU 600从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLR D0”。结果,CPU 600将值“0”存储到通用寄存器组604的第零寄存器中。
CPU 600从RAM 140读取SP初始值,并且将读取的SP初始值写入堆栈指针存储寄存器103。
CPU 600从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 600使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 600从ROM 130读取指令“MOV D3,Flag”,并且将存储在第三寄存器中的值“0”写入标志寄存器602。
CPU 600从ROM 130读取指令“Bcc<Label_2>”,并且执行读取的指令“Bcc<Label_2>”。标志寄存器602中存储的值为“0”。因此,CPU 600将该处理分支到<Label_2>。
CPU 600将已经保存到RAM 140的值恢复到通用寄存器组604。
CPU 600从ROM 130读取指令“RTI”,并且执行读取的指令“RTI”。结果,CPU 600执行包括在正常处理的指令序列2600中的指令。
CPU 600执行存储在ROM 130中的正常处理的指令序列2600。
CPU 600从ROM 130读取指令“MULQ D0,D1”,并且执行读取的指令“MULQ D0,D1”。结果,第一计算单元112将乘法结果的高位存储到第一计算结果存储寄存器113中。同时,CPU 600将乘法结果的低位存储到通用寄存器组604的第一寄存器中,并且设置值“1”作为寄存器访问信息。
在执行上述指令“MULQ D0,D1”之后,发生中断。CPU 600执行中断句柄的指令序列2611的头部处的指令。
CPU 600将中断句柄的指令序列2611中的通用寄存器组604中存储的值保存到RAM 140。
CPU 600从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLRD0”。结果,CPU 600将值“0”存储到通用寄存器组604的第零寄存器中。
CPU 600从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 600使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 600从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。结果,CPU 600将第一计算结果存储寄存器113中存储的值存储在通用寄存器组604的第一寄存器中。同时,CPU 600将存储在寄存器访问管理电路617中的寄存器访问信息值“1”存储到标志寄存器602中。
CPU 600从ROM 130读取指令“Bcc<Label_1>”,并且执行读取的指令“Bcc<Label_1>”。标志寄存器602中存储的值为“1”。因此,CPU 600不将该处理分支到<Label_1>。
CPU 600从ROM 130读取指令“MOV D1,(SP)”,并且执行读取的指令“MOV D1,(SP)”。结果,CPU 600将通用寄存器组604的第一寄存器中存储的值写入由堆栈指针存储寄存器103中存储的地址值指定的RAM 140的地址。
CPU 600从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 600使存储在通用寄存器组604的第零寄存器中的值加1,并且将增加后的值存储在第零寄存器中。
CPU 600从ROM 130读取指令“MOV Flag,D3”,并将标志寄存器602中存储的值“1”存储到通用寄存器组604的第三寄存器中。
在完成中断句柄的指令序列2611的执行之后,CPU 600从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLR D0”。结果,CPU 600将值“0”存储到通用寄存器组604的第零寄存器中。同时,CPU 600从RAM 140读取SP初始值,并且将读取的SP初始值写入堆栈指针存储寄存器103。
CPU 600从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 600使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 600从ROM 130读取指令“MOV D3,Flag”,并且将通用寄存器组604的第三寄存器中存储的值“1”写入标志寄存器602。
CPU 600从ROM 130读取指令“Bcc<Label_2>”,并且执行读取的指令“Bcc<Label_2>”。标志寄存器602中存储的值为“1”。因此,CPU 600不将该处理分支到<Label_2>。
CPU 600从ROM 130读取指令“MOV(SP),D1”,并且执行读取的指令“MOV(SP),D1”。结果,CPU 600将由RAM 140的堆栈指针存储寄存器103中存储的地址值指定的地址中存储的数据读入通用寄存器组604的第一寄存器中。
CPU 600从ROM 130读取指令“PUTACX D0,D1”,并且执行读取的指令“PUTACX D0,D1”。结果,第一计算单元112将通用寄存器组104的第一寄存器中存储的值存储到第一计算结果存储寄存器113中。
CPU 600从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 600使存储在通用寄存器组604的第零寄存器中的值加1,并且将增加后的值存储在第零寄存器中。
CPU 600将已经保存到RAM 140的值恢复到通用寄存器组604。
CPU 600从ROM 130读取指令“RTI”,并且执行读取的指令“RTI”。结果,CPU 600执行包括在正常处理的指令序列2600中的指令,并且执行指令“GETACX D2,D1”。
如上所述,根据第六实施方式的信息处理装置650根据在协处理器中是否已经实际执行扩展计算来确定是否保存数据。当在协处理器中没有执行扩展计算,或当在协处理器中已经执行扩展计算而然后从寄存器获取数据时,不需要在发生中断时保存数据。在这种情况下,信息处理装置可以省略保存数据的处理。
<第七实施方式>
第六实施方式描述了基于在协处理器中是否已经执行计算来确定是否从寄存器保存数据。作为第六实施方式的修改的第七实施方式描述了在协处理器中实施多个计算单元的情况,并且为每个寄存器确定是否保存数据。
<结构>
图27是表示根据第七实施方式的信息处理装置750的功能结构的方框图。
如图27中所示,信息处理装置750包括ROM 130、RAM 140、CPU 700、和协处理器710。
CPU 700包括CPU指令解码器101、标志寄存器702、堆栈指针存储寄存器103和通用寄存器组704。
协处理器710包括协处理器指令解码器111、第一计算单元112、第一计算结果存储寄存器113、第二计算单元114、第二计算结果存储寄存器115、选择器716和寄存器访问状态管理电路717。
上述第一实施方式具有其中经由或电路118输出第一计算单元112和第二计算单元114的计算结果标志的结构。在第七实施方式的描述和附图中省略了该结构,因为这不是第七实施方式的特征。
同时,第七实施方式中与第一实施方式具有相同的名称和附图标记的功能单元执行与第一实施方式中相同的功能。因此将省略其描述。
寄存器访问状态管理电路717管理在协处理器的每个计算单元中是否已经执行了计算的计算执行信息和存储在对应于计算单元的寄存器中的与计算有关的数据。根据协处理器指令解码器111输出的控制信号,寄存器访问状态管理电路717识别在其中已经执行计算的计算单元,并且将对应于计算单元的位值设置为“1”。同时,当执行指令“GETACX Dm,Dn”时,寄存器访问状态管理电路717将对应于Dm的计算单元的比特值设置为“1”。此外,当执行指令“GETSTT Dm,Dn”时,寄存器访问状态管理电路717向选择器116输出存储在其中的计算执行信息。此外,当执行指令“PUTSTT Dm,Dn”时,寄存器访问状态管理电路717将Dn作为计算执行信息存储在其中。
<命令>
下面描述根据第七实施方式的多种指令。
<扩展计算指令>
图28是表示由CPU 700和协处理器710从ROM 130读取的计算指令的缩写和对应于这些缩写的CPU 700的操作和协处理器710的操作的示例列表。
图28是表示由CPU 700和协处理器710从ROM 130中读取的协处理器指令的缩写和对应于这些缩写的CPU 700的操作和协处理器710的操作的示例列表。
接下来描述在下列指令执行中的操作,“MULQ Dm,Dn”、“DIVQ Dm,Dn”、“GETACX Dm,Dn”、“GETSTT Dm,Dn”和“PUTSTT Dm,Dn”。请注意,指令“MULQ Dm,Dn”、“DIVQ Dm,Dn”和“GETACX Dm,Dn”与在第一实施方式中描述的指令基本上相同。因此,仅描述了寄存器访问状态管理电路717在指令执行中的操作。
<指令“MULQ Dm,Dn”>
如在第一实施方式中描述的,协处理器710中包括的每个电路根据指令“MULQ Dm,Dn”执行乘法运算。这时,寄存器访问状态管理电路717检测到第一计算单元112已经执行了乘法运算,并且将计算执行信息的位“0”设置为“1”。注意在位0处设置“1”意味着将“0b0000”设置为“0b0001”或者将“0b1010”设置为“0b1011”。
<指令“DIVQ Dm,Dn”>
如在第一实施方式中描述的,协处理器710中包括的每个电路根据指令“DIVQ Dm,Dn”执行除法运算。这时,寄存器访问状态管理电路717检测到第二计算单元114已经执行了除法运算,并且将计算执行信息的位“1”设置为“1”。注意,在位1处设置“1”意味着将“0b0000”设置为“0b0010”或者设“0b1001”设置为“0b1011”。
<指令“GETACX Dm,Dn”>
信息处理装置750根据指令“GETACX Dm,Dn”保存协处理器710的寄存器中存储的数据。以下用下面的两种情况描述寄存器访问状态管理电路717的操作:
(1)从第一计算结果存储寄存器113读取值的情况;和
(2)从第二计算结果存储寄存器115读取值的情况。
(1)从第一计算结果存储寄存器113读取值的情况
寄存器访问状态管理电路717检测到存储在第一计算结果存储寄存器113中的值被读取出,并且将计算执行信息的位0清除为“0”。
(2)从第二计算结果存储寄存器115读取值的情况
寄存器访问状态管理电路717检测到存储第二计算结果存储寄存器115中存储的值被读取出,并且将计算执行信息的位1清除为“0”。
<指令“GETSTT Dm,Dn”>
指令“GETSTT Dm,Dn”是用于使CPU 700获取表示是否在每个寄存器中存储数据的信息的指令。
CPU 700和协处理器710从ROM 130中读取指令“GETSTT Dm,Dn”。CPU指令解码器101解码指令“GETSTT Dm,Dn”,并且向CPU 700中包括的每个电路输出控制信号。同时,协处理器指令解码器111解码指令“GETSTTDm,Dn”,并且向协处理器710中包括的每个电路输出控制信号。
寄存器访问状态管理电路717向选择器716输出存储在其中的计算执行信息。根据通过协处理器指令解码器111输出的控制信号,选择器716选择由寄存器访问状态管理电路717输出的值,并且向数据输出总线122输出选择的值。
数据输出总线122将计算执行信息传输到CPU 700的通用寄存器组704。通用寄存器组704的第n寄存器获取数据输出总线122的值,并且将该获取的值存储在其中。
<指令“PUTSTT Dm,Dn”>
指令“PUTSTT Dm,Dn”是用于恢复保存在中断中的每个寄存器的访问状态信息的指令,这些信息被保存在寄存器访问状态管理电路717中。
CPU 700和协处理器710从ROM 130中读取指令“PUTSTT Dm,Dn”。CPU指令解码器101解码指令“PUTSTT Dm,Dn”,并且对CPU 700中包括的每个电路输出控制信号。同时,协处理器指令解码器111解码指令“PUTSTTDm,Dn”,并且向协处理器710中包括的每个电路输出控制信号。
通用寄存器组704向第一数据输入总线120输出Dm,并且向第二数据输入总线121输出Dn。第一数据输入总线120将Dm传输到协处理器710的寄存器访问状态管理电路717。寄存器访问状态管理电路717将经由第一数据输入总线120获取的值作为计算执行信息存储在其中。
<操作>
图29和30分别示出了表示使用在图2、3、10、14、18、21、24、25和28中描述的指令的汇编程序的一个示例的指令序列。下面描述用于执行该指令序列的操作。
CPU 700执行存储在ROM 130中的正常处理的指令序列2900。
CPU 700从ROM 130中读取指令“MULQ D0,D1”,并且执行读取的指令“MULQ D0,D1”。结果,第一计算单元112将乘法结果的高位存储在第一计算结果存储寄存器113中。同时,CPU 700将乘法结果的低位存储在通用寄存器组704的的第一寄存器中。同时,寄存器访问状态管理电路717检测到第一计算单元112已经执行了乘法运算,并且将计算执行信息的位0设置为“1”。
当发生中断时,CPU 700执行在中断句柄的指令序列2910的头部处的指令。
CPU 700将中断句柄的指令序列2910中的通用寄存器组704中存储的值保存到RAM 140中。
CPU 700从ROM 130中读取指令“GETSTT D0,D3”,并且执行读取的指令“GETSTT D0,D3”。结果,CPU 700将寄存器访问状态管理电路717中存储的计算执行信息“0b0001”写入通用寄存器组704的第三寄存器中。
CPU 700从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLRD0”。结果,CPU 700将值“0”存储到通用寄存器组704的第零寄存器中。CPU 700执行用于存储SP初始值的处理,然后执行指令序列2911中包括的指令。
CPU 700从ROM 130读取指令“MOV D3,D2”,并且将存储在通用寄存器组704的第三寄存器中的值“0b0001”存储到通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“AND #0b0001,D2”。CPU 700对通用寄存器组704的第二寄存器中存储的值“0b0001”与值“0b0001”执行逻辑与操作,并且,将计算结果值“0b0001”存储到通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“MOV #0b0001,D1”,并且执行读取的指令“MOV #0b0001,D1”。结果,CPU 700将值“0b0001”存储到通用寄存器组704的第一寄存器中。
CPU 700从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。结果,D1和D2互相匹配,因此,CPU 700将值“1”写入标志寄存器702。
CPU 700从ROM 130读取指令“Bcc<Label_1>”,并且执行读取的指令“Bcc<Label_1>”。标志寄存器702中存储的值为“1”。因此,CPU 700不将该处理分支到<Label_1>。
CPU 700从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 700使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 700从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。结果,CPU 700将第一计算结果存储寄存器113中存储的值存储到通用寄存器组704的第一寄存器中。
CPU 700从ROM 130读取指令“MOV D1,(SP)”,并且执行读取的指令“MOV D1,(SP)”。结果,CPU 700将通用寄存器组704的第一寄存器中存储的值写入RAM 140的堆栈指针存储寄存器103中。
CPU 700从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 700使存储在通用寄存器组704的第零寄存器中的值加1,并且将该增加的值存储在第零寄存器中。
CPU 700从ROM 130读取指令“MOV D3,D2”,并且将通用寄存器组704的第三寄存器中存储的值“0b0001”存储到通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“AND #0b0010,D2”,并且执行读取的指令“AND #0b0010,D2”。结果,CPU 700对通用寄存器组704的第二寄存器中存储的值“0b0001”与值“0b0010”执行逻辑与操作,并且将计算结果值“0b0000”存储在通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“MOV #0b0010,D1”,并且执行读取的指令“MOV #0b0010,D1”。结果,CPU 700将值“0b0010”存储到通用寄存器组704的第一寄存器中。
CPU 700从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。结果,D1和D2不互相匹配,因此CPU 700将值“0”写入标志寄存器702。
CPU 700从ROM 130读取指令“Bcc<Label_2>”,并且执行读取的指令“Bcc<Label_2>”。标志寄存器702中存储的值为“0”。因此,CPU 700将该处理转移到<Label_2>。
CPU 700完成中断句柄的指令序列2911的执行。CPU 700从ROM 130读取指令“MOV D3,D2”,并且将通用寄存器组704的第三寄存器中存储的值“0b0101”存储到通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“AND#0b0001,D2”,并且执行读取的指令“AND #0b0001,D2”。CPU 700对通用寄存器组704的第二寄存器中存储的值“0b0001”与值“0b0001”执行逻辑与操作,并且将计算结果值“0b0001”存储到通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“MOV #0b0001,D1”,并且执行读取的指令“MOV #0b0001,D1”。结果,CPU 700将值“0b0001”存储到通用寄存器组704的第一寄存器中。
CPU 700从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。D1和D2互相匹配。因此,CPU 700将值“1”写入标志寄存器702。
CPU 700从ROM 130读取指令“Bcc<Label_3>”,并且执行读取的指令“Bcc<Label_3>”。标志寄存器702中存储的值为“1”。因此,CPU 700不将该处理分支到<Label_3>。
CPU 700从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 700使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 700从ROM 130读取指令“MOV(SP),D1”,并且执行读取的指令“MOV(SP),D1”。结果,CPU 700读取由堆栈指针存储寄存器103中存储的地址值指定的RAM 140的地址中存储的值。然后,CPU 700将读取的值存储到通用寄存器组704的第一寄存器中。
CPU 700从ROM 130读取指令“PUTACX D0,D1”,并且执行读取的指令“PUTACX D0,D1”。结果,第一计算单元112将通用寄存器组704的第一寄存器中存储的值存储到第一计算结果存储寄存器113中。
CPU 700从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 700使存储在通用寄存器组704的第零寄存器中的值加1,并且将该增加的值存储在第零寄存器中。
CPU 700从ROM 130读取指令“MOV D3,D2”,并且将第三寄存器中存储的值“0b0001”写入通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“AND #0b0010,D2”,并且对通用寄存器组704的第二寄存器中存储的值“0b0101”与值“0b0010”执行逻辑与操作,并且将计算结果值“0b0000”存储到通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“MOV #0b0010,D1”,并且执行读取的指令“MOV #0b0010,D1”。结果,CPU 700将值“0b0010”存储到通用寄存器组704的第一寄存器中。
CPU 700从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。结果,D1和D2不互相匹配,因此,CPU 700将值“0”写入标志寄存器702。
CPU 700从ROM 130读取指令“Bcc<Label_4>”,并且执行读取的指令“Bcc<Label_4>”。标志寄存器702中存储的值为“0”。因此,CPU 700转移该处理到<Label_4>。
CPU 700从ROM 130读取指令“PUTSTT D3,D0”,并且执行读取的指令“PUTSTT D3,D0”。结果,寄存器访问状态管理电路717将已经存储到通用寄存器组704的第三寄存器中的计算执行信息“0b001”存储在其中。
CPU 700将已经从通用寄存器组704保存到RAM 140的值恢复到通用寄存器组704。
CPU 700从ROM 130读取指令“RTI”,并且执行读取的指令“RTI”。结果,CPU 700执行包括在正常处理的指令序列2900中的指令。
CPU 700从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLRD0”。结果,CPU 700将值“0”存储到通用寄存器组704的第零寄存器中。
CPU 700从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。结果,CPU 700将存储在第一计算结果存储寄存器113中的值存储到通用寄存器组704的第一寄存器中。同时,寄存器访问状态管理电路717将存储在其中的执行信息的位0清除,即,将计算执行信息的位0设置为值“0”。
CPU 700从ROM 130读取指令“DIVQ D0,D1”,并且执行读取的指令“DIVQ D0,D1”。结果,第二计算单元114将除法的余数存储到第二计算结果存储寄存器115中。同时,CPU 700将除法的商存储到通用寄存器组704的第一寄存器中。同时,寄存器访问状态管理电路717检测到第二计算单元114已经执行除法,并且将计算执行信息的位1设置为“1”。
当发生中断时,CPU 700执行中断句柄的指令序列2920的头部处的指令。
CPU 700将中断句柄的指令序列2920中包括的通用寄存器组704中存储的值保存到RAM 140。
CPU 700从ROM 130中读取指令“GETSTT D0,D3”,并且执行读取的指令“GETSTT D0,D3”。结果,CPU 700将寄存器访问状态管理电路717中存储的计算执行信息“0b0010”存储到通用寄存器组704的第三寄存器中。
CPU 700从ROM 130读取指令“CLR D0”,并且执行读取的指令“CLRD0”。结果,CPU 700将值“0”存储到通用寄存器组704的第零寄存器中。同时,CPU 700执行用于存储SP初始值的处理,然后执行指令序列2912中包括的指令。
CPU 700从ROM 130读取指令“MOV D3,D2”,并且将通用寄存器组704的第三寄存器中存储的值“0b0010”存储到通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“AND #0b0001,D2”。CPU 700对通用寄存器组704的第二寄存器中存储的值“0b0010”与值“0b0001”执行逻辑与操作,并且,将计算结果值“0b0000”存储到通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“MOV #0b0001,D1”,并且执行读取的指令“MOV #0b0001,D1”。结果,CPU 700将值“0b0001”存储到通用寄存器组704的第一寄存器中。
CPU 700从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。结果,D1和D2个互相匹配,因此,CPU 700将值“0”写入标志寄存器702。
CPU 700从ROM 130读取指令“Bcc<Label_1>”,并且执行读取的指令“Bcc<Label_1>”。标志寄存器702中存储的值为“0”。因此,CPU 700转移该处理到<Label_1>。
CPU 700从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 700使存储在通用寄存器组704的第零寄存器中的值加1,并且将该增加的值存储在第零寄存器中。
CPU 700从ROM 130读取指令“MOV D3,D2”,并且将存储在通用寄存器组704的第三寄存器中的值“0b0010”存储到通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“AND #0b0010,D2”,并且对通用寄存器组704的第二寄存器中存储的值“0b0010”与值“0b0010”执行逻辑与操作,并且将计算结果值“0b0010”存储在通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“MOV #0b0010,D1”,并且执行读取的指令“MOV #0b0010,D1”。结果,CPU 700将值“0b0010”存储到通用寄存器组704的第一寄存器中。
CPU 700从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。结果,D1和D2互相匹配,因此CPU 700将值“1”写入标志寄存器702。
CPU 700从ROM 130读取指令“Bcc<Label_2>”,并且执行读取的指令“Bcc<Label_2>”。标志寄存器702中存储的值为“1”。因此,CPU 700不将该处理分支到<Label_2>。
CPU 700从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 700使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 700从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。结果,CPU 700将第二计算结果存储寄存器115中存储的值存储到通用寄存器组704的第一寄存器中。
CPU 700从ROM 130读取指令“MOV D1,(SP)”,并且执行读取的指令“MOV D1,(SP)”。结果,CPU 700将通用寄存器组704的第一寄存器中存储的值存储到堆栈指针存储寄存器103中存储的地址值指定的地址中。
然后,CPU 700执行实际要执行的中断句柄的指令序列。
在完成中断句柄的指令序列的执行之后,CPU 700从ROM 130读取指令“MOV D3,D2”,并且将通用寄存器组704的第三寄存器中存储的值“0b0010”存储到通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“AND #0b0001,D2”,并且对通用寄存器组704的第二寄存器中存储的值“0b0010”与值“0b0001”执行逻辑与操作。CPU 700将计算结果值“0b0000”存储到通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“MOV #0b0001,D1”,并且执行读取的指令“MOV #0b0001,D1”。结果,CPU 700将值“0b0001”存储到通用寄存器组704的第一寄存器中。
CPU 700从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。结果,D1和D2不互相匹配,因此,CPU 700将值“0”写入标志寄存器702。
CPU 700从ROM 130读取指令“Bcc<Label_3>”,并且执行读取的指令“Bcc<Label_3>”。结果,标志寄存器702中存储的值为“0”。因此,CPU 700将该处理分支到<Label_3>。
CPU 700从ROM 130读取指令“INC D0”,并且执行读取的指令“INC D0”。结果,CPU 700使存储在通用寄存器组704的第零寄存器中的值加1,并且将该增加的值存储在第零寄存器中。
CPU 700从ROM 130读取指令“MOV D3,D2”,并且将通用寄存器组704的第三寄存器中存储的值“0b0010”存储到通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“AND #0b0010,D2”,并且对通用寄存器组704的第二寄存器中存储的值“0b0010”与值“0b0010”执行逻辑与操作。CPU 700将计算结果值“0b0010”存储在通用寄存器组704的第二寄存器中。
CPU 700从ROM 130读取指令“MOV #0b0010,D1”,并且执行读取的指令“MOV #0b0010,D1”。结果,CPU 700将值“0b0010”存储到通用寄存器组704的第一寄存器中。
CPU 700从ROM 130读取指令“CMP D1,D2”,并且执行读取的指令“CMPD1,D2”。结果,D1和D2互相匹配,因此CPU 700将值“1”写入标志寄存器702。
CPU 700从ROM 130读取指令“Bcc<Label_4>”,并且执行读取的指令“Bcc<Label_4>”。标志寄存器702中存储的值为“1”。因此,CPU 700不将该处理分支到<Label_4>。
CPU 700从ROM 130读取指令“INC SP”,并且执行读取的指令“INC SP”。结果,CPU 700使存储在堆栈指针存储寄存器103中的地址值增加一常数值,并且将增加后的地址值存储在堆栈指针存储寄存器103中。
CPU 700从ROM 130读取指令“MOV(SP),D1”,并且执行读取的指令“MOV(SP),D1”。结果,CPU 700将由RAM 140的堆栈指针存储寄存器103中存储的地址值指定的地址中存储的值读取到通用寄存器组704的第一寄存器中。
CPU 700从ROM 130读取指令“PUTACX D0,D1”,并且执行读取的指令“PUTACX D0,D1”。结果,第二计算单元114将通用寄存器组704的第一寄存器中存储的值存储到第二计算结果存储寄存器115中。CPU 700从ROM130读取指令“PUTSTT D3,D0”,并且执行读取的指令“PUTSTT D3,D0”。结果,寄存器访问状态管理电路717将通用寄存器组704的第三寄存器中存储的计算执行信息“0b0010”存储在其中。
CPU 700将已经保存到RAM 140的值恢复到通用寄存器组704。CPU 700从ROM 130读取指令“RTI”,并且执行读取的指令“RTI”。结果,CPU 700执行包括在正常处理的指令序列中的指令。
CPU 700执行存储在ROM 130中的正常处理的指令序列2900。
CPU 700从ROM 130读取指令“MO V#1,D1”,并且执行读取的指令“MOV #1,D1”。结果,CPU 700将值“1”存储到通用寄存器组704的第一寄存器中。
CPU 700从ROM 130读取指令“GETACX D0,D1”,并且执行读取的指令“GETACX D0,D1”。结果,CPU 700将第二计算结果存储寄存器115中存储的值存储到通用寄存器组704的第一寄存器中。寄存器访问状态管理电路717将存储其中的计算执行信息的位1清除。
如上所述,在第七实施方式中,寄存器访问状态管理电路识别是否每个寄存器将数据存储在其中。此外,当中断发生时,从协处理器向CPU传输表示每个寄存器访问状态的信息。因此,基于传输的信息,CPU可以向第一数据输入总线120输出用于指定寄存器的寄存器信息。换句话说,只从其中已经存储有数据的寄存器保存数据。与执行用于从其中没有存储数据的寄存器保存数据的处理的情况相比,可以减小开销。
<修改>
虽然基于上述实施方式已经描述了本发明,本发明当然不限于这些实施方式,并且进一步包括以下修改。下面描述信息处理装置的修改。
(1)在上述实施方式中,每个计算单元将与计算有关的数据存储在其中。每个计算单元输出在其中包括的寄存器中存储的值,或者将给定的数据和计算的数据存储在其中。代替这种结构,可以采用图31所示的结构。
如图31所示,信息处理装置850包括ROM 130、RAM 140、CPU 800和协处理器810。
CPU 800包括CPU指令解码器101、标志寄存器102、堆栈指针存储寄存器103和通用寄存器组104。
协处理器810包括协处理器指令解码器111、第一计算单元112、第一计算结果存储寄存器113、第二计算单元114、第二计算结果存储寄存器115、选择器116、实施的计算单元信息输出电路117、或电路118、第一计算输入数据存储寄存器801以及第二计算输入数据存储寄存器802和803。
信息处理装置850的功能单元基本上以与第一实施方式中描述的相同的方法操作。但是,与根据第一实施方式的信息处理装置150的结构不同,信息处理装置850具有其中每个计算单元中不包括用于存储与计算有关的数据的寄存器的结构。
同时,代替每个计算单元,协处理器指令解码器111可以从协处理器810的每个寄存器输出数据,并且将输出的数据存储在其中。
这样,根据上述实施方式的每个信息处理装置可以具有其中每个计算单元中不包括寄存器的结构。
(2)上述实施方式已经显示了其中当输入等于在协处理器中实施的计算单元的数量的值时,实施的计算单元信息输出电路117输出值“1”的示例。但是,当输入大于在协处理器中实施的计算单元的数量的值时,通过输出值“1”可以获得相同的效果。
(3)在上述实施方式中,每个信息处理装置已经描述为32位微计算机。代替32位微计算机,例如,还可以采用64位微计算机。
(4)在上述实施方式中,当根据指令“PUTACX D0,D1”在完成中断处理之后存储数据时,数据首先被存储到第一计算结果存储寄存器113,然后再存储到第二计算结果存储寄存器115。
作为选择,数据可以首先存储到第二计算结果存储寄存器115,然后再存储到第一计算结果存储寄存器113。这样,可以采用下列结构。通用寄存器组104的第零寄存器在其中存储在标志寄存器102被设置为“1”时的值。当执行指令“PUTACX Dm,Dn”时,该值被一个接一个减小直到该值达到“0”。
(5)在上述实施方式中,已经描述了两条数据输入总线和一条数据输出总线作为独立的总线。但是,如果信息处理装置具有其中可以识别向其功能单元传输的总线上的每段数据的结构,例如,可以应用标识符作为数据的头,则可以使用起到上述这些总线的作用的单条总线。
Claims (15)
1、一种信息处理装置,包括:依次解码和执行包括在指令序列中的指令以执行计算的中央处理单元;以及经由第一总线和第二总线与中央处理单元相连接的协处理器,该协处理器包括一个或多个寄存器以在其中存储与计算有关的数据,与中央处理单元并行地解码正在由该中央处理单元解码的任何指令,基于从中央处理单元向第一总线输出的数据执行与任一指令相关的计算,并且向第二总线输出计算的结果,
所述中央处理单元包括:
信息获取单元,用于在要解码的指令是用于获取存储在任一寄存器中的数据的获取指令时,向第一总线输出将该任一寄存器指定给该第一总线的寄存器信息段,并且经由第二总线获取存储在该任一寄存器中的数据,以及
所述协处理器包括:
保存寄存器指定单元,用于在要解码的指令是获取指令时,经由第一总线获取该寄存器信息段,并且基于该获取的寄存器信息段而指定要从其保存数据的寄存器;以及
数据输出单元,用于向第二总线输出存储在由保存寄存器指定单元指定的寄存器中的数据。
2、根据权利要求1所述的信息处理装置,其特征在于,还包括:
信号线,用于根据由协处理器执行的计算结果而从所述协处理器向所述中央处理单元输出标志,其中
所述中央处理单元还包括保持单元,用于在其中保持标志,经由所述信号线从协处理器接收表示是否已经保存数据的标志,并且使用接收的标志代替其中保持的标志,
所述信息获取单元向所述第一总线输出用于指定寄存器的寄存器号作为寄存器信息段,每次输出使寄存器号加1,
所述协处理器还包括输出单元,用于对从其保存数据的寄存器的总数和输出到第一总线的寄存器号进行比较,并且如果寄存器号不小于该总数,则输出表示已经保存数据的标志,以及
当保持单元中保持的标志表示已经保存数据时,所述信息获取单元停止向第一总线输出寄存器号。
3、根据权利要求2所述的信息处理装置,其特征在于,
所述第一总线由至少分别用于传输不同类型的数据的第一输入总线和第二输入总线构成,
所述中央处理单元还包括:
记录单元,用于向连接到中央处理单元的存储器的每个第N存储地址值依次记录由所述信息获取单元经由第二总线获取的数据,所述N为预定的值;以及
恢复指示单元,用于在要解码的指令是用于恢复已经保存的数据的恢复指令时,从存储器读取数据,向所述第一输入总线输出读取的数据,并且向所述第二输入总线输出用于指定寄存器的寄存器号,以及
所述协处理器还包括:
恢复寄存器指定单元,用于在要解码的指令是恢复指令时,经由第二输入总线获取寄存器号,并且基于所获取的寄存器号指定从其已经保存数据的寄存器;以及
恢复单元,用于将经由第一输入总线获取的数据恢复到由恢复寄存器指定单元指定的寄存器。
4、根据权利要求1所述的信息处理装置,其特征在于,
所述协处理器还包括:
第一寄存器数量存储单元,用于将寄存器的总数存储在其中;
寄存器数量输出单元,用于经由第二总线向中央处理单元输出所述总数,
所述中央处理单元还包括:
第二寄存器数量存储单元,用于将已经由第一寄存器数量输出单元输出的总数存储在其中;
信息获取单元,依次向第一总线输出用于指定任一寄存器的寄存器号作为寄存器信息段,每次输出使寄存器号加1,并且
当所述寄存器号与存储在第二寄存器数量存储单元中的总数相匹配时,所述信息获取单元停止向第一总线输出寄存器号。
5、根据权利要求4所述的信息处理装置,其特征在于,
所述中央处理单元还包括:
记录单元,用于向连接到该中央处理单元的存储器的每个第N存储地址值依次记录由所述信息获取单元经由所述第二总线获取的数据,所述N为预定的值;以及
恢复指示单元,用于在要解码的指令是用于恢复记录在存储器中的数据的恢复指令时,从存储器的每个第N存储地址值向第总线依次输出存储在存储器中的数据和用于指定所述任一寄存器的寄存器号,以及
所述协处理器还包括:
恢复单元,用于在要解码的指令是恢复指令时,将输出数据恢复到由保存寄存器指定单元指定的寄存器。
6、根据权利要求5所述的信息处理装置,其特征在于,
当所述信息处理装置复位时,所述第一寄存器数量输出单元向中央处理单元输出总数。
7、根据权利要求1所述的信息处理装置,其特征在于,
所述协处理器包括:
计算单元信息输出单元,用于输出表示在所述协处理器中实施的一个或多个计算单元的类型的计算单元信息,
所述中央处理单元还包括:
计算单元信息存储单元,用于将所述计算单元信息存储在其中;以及
确定单元,用于基于计算单元信息而确定要输出的寄存器信息段,并且所述信息获取单元向第一总线输出由所述确定单元确定的寄存器信息段。
8、根据权利要求7所述的信息处理装置,其特征在于,
所述中央处理单元还包括:
记录单元,用于向连接到中央处理单元的存储器的每个第N存储地址值依次记录由所述信息获取单元经由所述第二总线获取的数据,所述N为预定的值;以及
恢复指示单元,用于在要解码的指令是用于恢复已经保存的数据的恢复指令时,从存储器读取数据,并且向所述第一总线输出读取的数据和用于指定寄存器的寄存器号,以及
所述协处理器还包括:
恢复寄存器指定单元,用于在要解码的指令是恢复指令时,经由第一总线获取寄存器号,并且基于获取的寄存器号指定从其已经保存数据的寄存器;以及
恢复单元,用于将经由第总线获取的数据恢复到由保存寄存器指定单元指定的寄存器。
9、根据权利要求7所述的信息处理装置,其特征在于,
当所述信息处理装置复位时,所述计算单元信息输出单元向中央处理单元输出计算单元信息。
10、根据权利要求2所述的信息处理装置,其特征在于,
当发生中断同时执行处理时,所述信息处理装置执行获取指令,所述中断具有对应于在中断中要执行的处理的中断级别,
所述协处理器还包括:
确定单元,用于根据中断级别确定要从其保存数据的寄存器的数量;以及
级别对应确定单元,用于根据所述获取指令,基于所确定的数量来确定要从其输出数据的任一寄存器,并且
当确定的寄存器数量与输出到第一总线的寄存器号相匹配时,所述数据输出单元输出表示已经保存数据的标志。
11、根据权利要求10所述的信息处理装置,其特征在于,
所述中央处理单元还包括:
记录单元,用于向连接到中央处理单元的存储器的每个第N存储地址值依次记录由所述信息获取单元经由所述第二总线获取的数据,所述N为预定的值;以及
恢复指示单元,用于在要解码的指令是用于恢复已经保存的数据的恢复指令时,从存储器读取数据,并且向输入总线输出读取的数据和用于指定寄存器的寄存器号,以及
所述协处理器还包括:
恢复寄存器指定单元,用于在要解码的指令是恢复指令时,经由第一总线获取寄存器号,并且基于获取的寄存器号指定从其已经保存数据的寄存器;以及
恢复单元,用于将经由第一总线获取的数据恢复到由恢复寄存器指定单元指定的寄存器。
12、根据权利要求1所述的信息处理装置,其特征在于,
所述协处理器用于通过在第一任务和第二任务之前转换来执行所述第一任务和第二任务,
所述协处理器还包括中断请求单元,用于当将正在执行的第一任务转换到第二任务并且与在第一任务中执行的计算相关的数据被存储到任一寄存器中时,请求中央处理单元产生中断,
响应于该中断请求,中央处理单元产生中断,并且
当中央处理单元产生中断时,中央处理单元和协处理器执行所述获取指令。
13、根据权利要求2所述的信息处理装置,其特征在于,
所述协处理器还包括:
计算执行信息存储单元,用于将表示是否已经执行计算的计算执行信息存储在其中;以及
计算执行信息输出单元,用于在解码所述获取指令时,向中央处理单元输出计算执行信息,
当中央处理单元解码所述获取指令并且计算执行信息表示在协处理器中已经执行计算时,该中央处理单元从任一寄存器获取数据,并且
当中央处理单元解码所述获取指令并且计算执行信息表示在协处理器中没有执行计算时,该中央处理单元不从任一寄存器获取数据。
14、根据权利要求13所述的信息处理装置,其特征在于,
所述计算执行信息存储单元还将表示是否每一寄存器中存储有与计算相关的数据的寄存器对应计算执行信息存储在其中,
所述协处理器还包括寄存器对应计算执行信息输出单元,用于向中央处理单元输出寄存器对应计算执行信息,以及
当中央处理单元解码所述获取指令时,该中央处理单元基于输出的寄存器对应计算执行信息而向第一总线输出用于指定任一寄存器的寄存器号。
15、根据权利要求13所述的信息处理装置,其特征在于,
所述中央处理单元还包括:
记录单元,用于向连接到中央处理单元的存储器的每个第N存储地址值依次记录由所述信息获取单元经由所述第二总线获取的数据,所述N为预定的值;以及
恢复指示单元,用于在要解码的指令是用于恢复已经保存的数据的恢复指令时,从存储器读取数据,向第一总线输出读取的数据和用于指定寄存器的寄存器号,以及
所述协处理器还包括:
恢复寄存器指定单元,用于在要解码的指令是恢复指令时,经由第一总线获取寄存器号,并且基于获取的寄存器号而指定从其已经保存数据的寄存器;以及
恢复单元,用于将经由第一总线获取的数据恢复到由恢复寄存器指定单元指定的寄存器。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2007159388A JP2008310693A (ja) | 2007-06-15 | 2007-06-15 | 情報処理装置 |
JP2007159388 | 2007-06-15 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101324839A true CN101324839A (zh) | 2008-12-17 |
Family
ID=40133445
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CNA2008100950386A Pending CN101324839A (zh) | 2007-06-15 | 2008-04-23 | 信息处理装置 |
Country Status (3)
Country | Link |
---|---|
US (1) | US7877576B2 (zh) |
JP (1) | JP2008310693A (zh) |
CN (1) | CN101324839A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102870095A (zh) * | 2010-04-30 | 2013-01-09 | 日本电气株式会社 | 信息处理装置和任务切换方法 |
CN103970709A (zh) * | 2014-04-29 | 2014-08-06 | 国家电网公司 | 一种fft协处理器与主处理器通信方法 |
CN104572133A (zh) * | 2015-02-06 | 2015-04-29 | 莉莉丝科技(上海)有限公司 | 一种用于执行计算任务中多用户的操作的方法与设备 |
CN104951280A (zh) * | 2014-03-26 | 2015-09-30 | 株式会社巨晶片 | Vliw处理器 |
CN111338826A (zh) * | 2020-02-28 | 2020-06-26 | 北京嘀嘀无限科技发展有限公司 | 一种电子设备以及设备联动控制系统、方法、装置 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102576302B (zh) * | 2009-11-30 | 2014-10-29 | 拉科尔斯有限公司 | 微处理器及用于微处理器上增强精确度乘积和计算的方法 |
JP6086230B2 (ja) | 2013-04-01 | 2017-03-01 | 日本電気株式会社 | 中央演算装置、情報処理装置、および仮想コア内レジスタ値取得方法 |
Family Cites Families (5)
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 |
-
2007
- 2007-06-15 JP JP2007159388A patent/JP2008310693A/ja not_active Withdrawn
-
2008
- 2008-02-19 US US12/033,538 patent/US7877576B2/en active Active
- 2008-04-23 CN CNA2008100950386A patent/CN101324839A/zh active Pending
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102870095A (zh) * | 2010-04-30 | 2013-01-09 | 日本电气株式会社 | 信息处理装置和任务切换方法 |
US9043806B2 (en) | 2010-04-30 | 2015-05-26 | Nec Corporation | Information processing device and task switching method |
CN104951280A (zh) * | 2014-03-26 | 2015-09-30 | 株式会社巨晶片 | Vliw处理器 |
US9798547B2 (en) | 2014-03-26 | 2017-10-24 | Megachips Corporation | VLIW processor including a state register for inter-slot data transfer and extended bits operations |
CN104951280B (zh) * | 2014-03-26 | 2018-10-12 | 株式会社巨晶片 | Vliw处理器 |
CN103970709A (zh) * | 2014-04-29 | 2014-08-06 | 国家电网公司 | 一种fft协处理器与主处理器通信方法 |
CN104572133A (zh) * | 2015-02-06 | 2015-04-29 | 莉莉丝科技(上海)有限公司 | 一种用于执行计算任务中多用户的操作的方法与设备 |
CN104572133B (zh) * | 2015-02-06 | 2020-05-08 | 上海莉莉丝科技股份有限公司 | 一种用于执行计算任务中多用户的操作的方法与设备 |
CN111338826A (zh) * | 2020-02-28 | 2020-06-26 | 北京嘀嘀无限科技发展有限公司 | 一种电子设备以及设备联动控制系统、方法、装置 |
Also Published As
Publication number | Publication date |
---|---|
US20080313429A1 (en) | 2008-12-18 |
US7877576B2 (en) | 2011-01-25 |
JP2008310693A (ja) | 2008-12-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109522254B (zh) | 运算装置及方法 | |
CN101324839A (zh) | 信息处理装置 | |
US3940745A (en) | Data processing unit having a plurality of hardware circuits for processing data at different priority levels | |
JP3790039B2 (ja) | 分岐予測調整方法 | |
KR102486029B1 (ko) | 비트폭이 다른 연산 데이터를 지원하는 연산 유닛, 연산 방법 및 연산 장치 | |
CN109643233A (zh) | 具有带读取和读取/前进操作数编码的流引擎的数据处理设备 | |
EP0515166A1 (en) | A data processor for performing simultaneous instruction retirement and backtracking | |
US20080082788A1 (en) | Pointer-based instruction queue design for out-of-order processors | |
CN103226463A (zh) | 用于使用预解码数据调度指令的方法和装置 | |
KR20220038581A (ko) | 데이터 구조 프로세싱 | |
CN100437547C (zh) | 具有级联simd结构的数字信号处理器及其信号处理方法 | |
KR102166650B1 (ko) | 제어 장치의 작동 방법 및 모델 연산 유닛을 포함하는 제어 장치 | |
CN112445616B (zh) | 资源分配方法以及装置 | |
US20140244987A1 (en) | Precision Exception Signaling for Multiple Data Architecture | |
US6370639B1 (en) | Processor architecture having two or more floating-point status fields | |
JPH04233040A (ja) | コンピュータプログラム実行シミュレーションシステム | |
US6578059B1 (en) | Methods and apparatus for controlling exponent range in floating-point calculations | |
US6212539B1 (en) | Methods and apparatus for handling and storing bi-endian words in a floating-point processor | |
US7412593B2 (en) | Processor for processing a program with commands including a mother program and a sub-program | |
JP3170472B2 (ja) | レジスタ・リマップ構造を有する情報処理システム及び方法 | |
EP0363174A2 (en) | Branch on bit processing | |
US5765017A (en) | Method and system in a data processing system for efficient management of an indication of a status of each of multiple registers | |
US20100318751A1 (en) | Multiple error management in a multiprocessor computer system | |
EP0012242B1 (en) | Digital data processor for word and character oriented processing | |
US5784606A (en) | Method and system in a superscalar data processing system for the efficient handling of exceptions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20081217 |