CN109416632B - 用于处理数据的装置和方法 - Google Patents

用于处理数据的装置和方法 Download PDF

Info

Publication number
CN109416632B
CN109416632B CN201780037466.0A CN201780037466A CN109416632B CN 109416632 B CN109416632 B CN 109416632B CN 201780037466 A CN201780037466 A CN 201780037466A CN 109416632 B CN109416632 B CN 109416632B
Authority
CN
China
Prior art keywords
register
instruction
value
target
valid
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.)
Active
Application number
CN201780037466.0A
Other languages
English (en)
Other versions
CN109416632A (zh
Inventor
阿拉斯代尔·格兰特
艾德蒙·托马斯·格里姆利-埃文斯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ARM Ltd
Original Assignee
ARM Ltd
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 ARM Ltd filed Critical ARM Ltd
Publication of CN109416632A publication Critical patent/CN109416632A/zh
Application granted granted Critical
Publication of CN109416632B publication Critical patent/CN109416632B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

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/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • 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/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30054Unconditional branch 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/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch 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/30098Register arrangements
    • G06F9/30101Special purpose registers
    • 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/30098Register arrangements
    • G06F9/30105Register structure
    • 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
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • 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/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/322Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address
    • G06F9/323Address formation of the next instruction, e.g. by incrementing the instruction counter for non-sequential address for indirect branch 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 or look ahead
    • G06F9/3818Decoding for concurrent execution
    • 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 or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

提供了一种包括处理电路和目标寄存器的装置,该处理电路用于执行由程序指令指定的处理操作,该目标寄存器存储目标程序地址。值寄存器存储数据值。还提供了架构寄存器和程序解码器,该程序解码器对程序指令进行解码,以生成控制处理电路执行处理操作的控制信号。指令解码器包括分支指令解码电路,该分支指令解码电路对寄存器还原分支指令进行解码,以促使处理电路确定目标程序地址和数据值是否有效。如果目标程序地址和数据值二者都有效,则促使处理电路分支到目标程序地址并更新架构寄存器存储数据值。否则,采取出错动作。

Description

用于处理数据的装置和方法
技术领域
本技术涉及数据处理领域。
背景技术
在数据处理装置中,通常希望从程序的一部分分支或跳转到该程序的另一部分。这可以通过在寄存器中存储目标程序地址,然后向处理器发送促使处理器分支(跳转)到寄存器中指定的程序地址的指令实现。但是,有时,寄存器必需存储一段代码的执行开始时的特定值。例如,当从异常处理例程转到某个进程时,必需将所有寄存器的状态还原到处理异常之前的状态,因为这些寄存器可能存储有用于该进程的中间数据。但是,在分支指令的目标程序地址被存储在寄存器之一中的情况下,可能无法满足这种必要性。类似地,从存储器向寄存器加载值会要求寄存器之一存储存储器位置。因此,难以还原每个单个寄存器的状态。
发明内容
从第一示例配置看,提供了一种装置,包括:执行程序指令指定的处理操作的处理电路;存储目标程序地址的目标寄存器;存储数据值的值寄存器;架构寄存器;以及指令解码器,该指令解码器对程序指令进行解码,以生成控制处理电路执行处理操作的控制信号,其中,指令解码器包括分支指令解码电路,该分支指令解码电路对寄存器还原分支指令进行解码,以促使处理电路确定目标程序地址和数据值是否有效,如果目标程序地址和数据值二者都有效,则分支到目标程序地址并更新架构寄存器存储数据值,否则采取出错动作。
从第二示例配置看,提供了一种用于处理系统中的数据的方法,该系统包括:存储目标程序地址的目标寄存器;存储数据值的值寄存器;以及架构寄存器,该方法包括以下步骤:执行程序指令指定的处理操作;对程序指令进行解码,以生成控制处理操作的执行的控制信号,其中,解码包括对寄存器还原分支指令进行解码,以确定目标程序地址和数据值是否有效,如果目标程序地址和数据值二者都有效,则分支到目标程序地址并更新架构寄存器存储数据值,否则采取出错动作。
从第三示例配置看,提供了一种装置,包括:用于执行程序指令指定的处理操作的部件;用于存储目标程序地址的部件;用于存储数据值的部件;架构寄存器;以及用于对程序指令进行解码,以生成控制用于执行处理操作的部件执行处理操作的控制信号的部件,其中,用于对程序指令进行解码的部件包括用于对寄存器还原分支指令进行解码的分支指令解码部件,以促使用于执行处理操作的部件确定目标程序地址和数据值是否有效,如果目标程序地址和数据值二者都有效,则分支到目标程序地址并更新架构寄存器存储数据值,否则采取出错动作。
附图说明
参考附图中示出的实施例,仅通过示例进一步描述本技术,其中:
图1示出了根据一个实施例的流水线的示例;
图2示出了包括寄存器还原分支指令的程序代码;
图3示意性地示出了根据一个实施例的图2所示的代码的执行如何影响架构;
图4示出了根据一个实施例的在寄存器还原分支指令的设置和执行期间不同寄存器中存储的值如何改变;
图5示出了根据一个实施例的在寄存器还原分支指令的设置和执行失败期间不同寄存器中存储的值如何改变;
图6示出了根据一个实施例的数据处理方法的流程图;
图7示出了根据一个实施例的寄存器还原分支指令的使用的流程图;以及
图8示出了根据一个实施例的虚拟机的操作的流程图。
具体实施方式
在参考附图讨论实施例之前,提供实施例和相关益处的以下描述。
根据一个示例配置,提供了一种装置,包括:执行程序指令指定的处理操作的处理电路;存储目标程序地址的目标寄存器;存储数据值的值寄存器;架构寄存器;以及指令解码器,该指令解码器对程序指令进行解码,以生成控制处理电路执行处理操作的控制信号,其中,指令解码器包括分支指令解码电路,该分支指令解码电路对寄存器还原分支指令进行解码,以促使处理电路确定目标程序地址和数据值是否有效,如果目标程序地址和数据值二者都有效,则分支到目标程序地址并更新架构寄存器存储数据值,否则采取出错动作。
目标寄存器存储目标程序地址,即,将发生去往其的分支的程序地址。值寄存器存储数据值,该数据值存储针对架构寄存器之一的替换值。寄存器还原分支指令是指定架构寄存器的指令。在被执行时,寄存器还原分支指令核对目标寄存器和值寄存器是否包含有效值。如果不包含,则进行出错动作。否则,指令分支到目标寄存器中存储的目标程序地址,然后更新指定的架构寄存器存储值寄存器中保存的数据值。所有这些操作或步骤自动进行。换言之,寄存器还原分支指令的执行在其执行期间不会被另一指令中断。另外,对指定的架构寄存器进行分支和更新的操作可以按照相反的顺序执行。架构寄存器可以是用来设置用于寄存器还原分支指令的其他寄存器的寄存器。例如,架构寄存器可以存储存储器中存储针对代码的替换寄存器值分支到的位置的地址。这样,既可以还原架构寄存器使得其具有正确值,且可以基本同时地执行分支指令。通过核对目标寄存器和值寄存器是否包含有效值,可以处理目标寄存器和值寄存器中保存的值(从准备执行寄存器还原分支指令时对它们进行设置开始)已经被修改的情形。例如,通过进行这样的核对,可以避免具体值被加载到这些寄存器中,导致这些值改变的中断或异常发生,寄存器还原分支指令被执行,从而导致寄存器还原分支指令使用不正确的值被执行的情形。
在一些实施例中,出错动作是促使流水线清空。流水线清空促使流水线中的所有阶段无效。通常,在预测到分支发生时,系统可能从分支目的地开始向流水线插入指令。结果,如果分支没有发生,则必需清空流水线使得这些指令完全不被执行。
在一些实施例中,出错动作是分支到另一指令。另一指令可以与提供用于从寄存器还原分支指令发生故障的情形恢复的恢复代码有关。在一些实施例中,另一指令在程序指令中的寄存器还原分支指令之前。例如,另一指令可以设置这样的循环,其中,设置寄存器还原分支指令的代码和寄存器还原分支指令本身被重复执行,直到寄存器还原分支指令成功为止。
在一些实施例中,出错动作是将寄存器还原分支指令作为NOOP指令进行处理。在被执行时,除了增大程序计数器从而移位到下一指令以外,处理器一般不对NOOP指令进行任何动作。在这样的实施例中,如果寄存器还原分支指令没有成功分支和还原(由于目标寄存器或值寄存器无效),则除了增大程序计数器以外没有进一步的动作作为寄存器还原分支指令的执行的一部分发生。然后,可以执行寄存器还原分支指令后面的指令。
在一些实施例中,值寄存器和目标寄存器中的至少一者具有指示数据值或目标程序地址是否已经分别被清空的相关有效性指示符。这些可清空寄存器基本上可以在任意时间被无效(例如,由当前执行的进程以外的进程无效)。为了确定寄存器是否已经被清空,提供有效性指示符。
有很多提供这样的有效性指示符的方式。在一些实施例中,处理电路通过检查目标有效标记确定目标程序地址是否有效。目标有效标记可以例如,作为目标寄存器中的特殊位提供,其没有暴露在架构中,所以用户不能直接编辑目标有效标记。架构可以在用户指定目标寄存器的值时设置目标有效标记,并且在出现目标程序地址可能改变的任何情况时清除目标有效标记。例如,在一些实施例中,处理电路被配置为响应于异常而清除目标有效标记,以指示目标程序地址无效。这是因为在异常期间,目标寄存器中的值可能已经改变,因此不能安全地认为目标寄存器中的值有效。在一些其他实施例中,基于目标程序地址是否具有特殊值确定目标程序地址是否有效(如果目标程序地址具有特殊值,则目标程序地址无效)。例如,目标程序地址的值“0”可以指示在一系列指令中的第一指令出现在0以上(例如,1)的目标程序地址的情况下目标程序地址无效。因此,每当目标寄存器被无效时,目标程序地址值可以被更新到特殊值,以指示目标寄存器不包含有效值。这种方法移除了提供附加位来指示寄存器中保存的值是否有效的需要。
在一些实施例中,指令解码器包括移动指令解码电路,该移动指令解码电路对移动指令进行解码以促使处理电路将规定值存储在目标寄存器中并设置目标有效标记以指示目标程序地址有效。这样,有可能在不直接将目标有效标记暴露给用户的条件下设置目标有效标记,从而降低了有效标记被不正确地设置或清除的可能。当用户向目标寄存器插入值时,对应的有效标记将被设置,以指示目标程序地址有效。
还有可以确定数据值是否有效的多种方式。在一些实施例中,处理电路通过检查值有效标记确定数据值是否有效。值有效标记可以例如,作为值寄存器中的特殊位提供,该特殊位没有被暴露在架构中所以用户不能直接编辑值有效标记。架构可以在用户指定值寄存器的值时设置值有效标记,并且可以在出现数据值可能改变的任意情况时清除值有效标记。例如,在一些实施例中,处理电路被配置为响应于异常而清除值有效标记,以指示数据值无效。这是因为在异常期间,值寄存器中的值可能已经改变。因此,假设当异常出现时数据值将不再有效。在一些其他实施例中,基于数据值是否具有特殊值确定数据值是否有效。例如,数据值的值“0”可以指示数据值无效。因此,每当值寄存器被无效时,数据值可以被更新为特殊值以指示数据值寄存器不包含有效值。这种方法移除了提供附加位来指示寄存器中保存的值是否有效的需要。
在一些实施例中,指令解码器包括移动指令解码电路,该移动指令解码电路对移动指令进行解码,以促使处理电路将规定值存储在值寄存器中并设置值有效标记以指示数据值有效。这样,可以在不直接向用户暴露值有效标记的条件下设置值有效标记,从而降低了有效标记被不正确地设置或清除的可能。当用户向目标寄存器插入值时,对应的有效标记将被设置以指示目标程序地址有效。
在一些实施例中,寄存器还原分支指令提供到架构寄存器的显式引用。这增加了外围代码的灵活性。具体地,这样可以使用任意寄存器来设置寄存器还原分支指令。例如,在一个实例中,寄存器x12可以被用来存储替换寄存器值被存储在的存储器位置;在另一实例中,寄存器x17可以被用来存储该存储器位置。在每种情况中,已经被用来存储存储器位置(例如)的寄存器被明确提供在寄存器还原分支指令的字段中。在其他实施例中,隐含地指定架构寄存器。例如,架构寄存器可以一直是寄存器x17。在这种情况下,不需要在寄存器还原分支指令的字段中提供架构寄存器。但是,这提供了更少的灵活性,因为必须一直使用寄存器x17作为例如,存储替换寄存器值的存储器位置的寄存器。在寄存器x17被用于其他目的时,这将是个复杂的问题。
在一些实施例中,寄存器还原分支指令的程序地址和目标程序地址二者都在用户空间中。用户空间可以被认为是不同于内核及其相关服务在其中执行的内核空间的用户应用在其中执行的存储器区域。内核空间中运行的应用通常可以被赋予特权。例如,相比用户空间中运行的应用,它们可以具有对于存储器的限制更少的存取。本技术可以应用于寄存器还原分支指令的程序地址和目标程序地址二者都在用户空间中的情况,因为本技术不要求给予任意进程有关下层架构状态的限制知识或附加许可。
在一些实施例中,处理电路使用64位架构。在64位架构中,非常期望存储器位置被存储在寄存器中,因为从存储器本身提供该信息在64位架构中会非常耗时。本技术可以应用于64位架构。
在一些实施例中,虚拟机计算机程序包括控制主机数据处理装置提供对应于上述配置之一的装置的指令执行环境的程序指令。
现在将参考附图描述特定实施例。
图1示出了根据一个实施例的流水线100。流水线100包括多个阶段/电路。首先,在指令取出阶段110,查询程序计数器120的值并取出程序计数器120中存储的程序地址处的指令。然后进行到指令解码阶段130对指令进行解码。这会导致一个或多个信号被生成。在本实施例中,解码阶段包括用于对加载指令进行解码并生成对应信号的加载指令解码电路132、以及用于对分支指令进行解码并生成对应信号的分支指令解码电路134。在指令解码阶段130中响应于指令生成的一个或多个信号被传递到一个或多个处理单元140。在该示例中,处理单元包括一对算术逻辑单元(ALU)150和160、浮点单元(FPU)170、加载/存储单元180、以及分支单元(190),其中,ALU执行整数逻辑和算术运算,FPU执行浮点算术运算,加载/存储单元与存储器或存储器架构接合,分支单元执行改变程序控制流的操作。例如,分支单元190可以负责调整程序计数器120,并且可以响应于明确的分支或跳转指令。注意,流水线100中的不同阶段(即,单元)可以相互独立地操作。例如,在处理单元140正在取出一个指令的同时,处理单元140可以对另一指令进行解码并可以执行另一指令。
图2示出了包括寄存器还原分支指令(BRR)的程序代码。图2所示的代码示出了如何使用寄存器还原分支指令。首先,加载指令(LD)促使分支指令的目的地被从寄存器x17中指引的存储器中的一个或多个地址加载到寄存器x1。在该示例中,寄存器x17是架构寄存器的示例,其被用来设置寄存器还原分支指令(BRR)。目的地随后经由移动到系统寄存器(MSR)指令被从寄存器x1加载到BDEST寄存器(其是目标寄存器的示例)。注意,在其他实施例中,可以使用具有可以将数据值从通用寄存器移至“系统”的功能的任意指令。这包括写入类似通用寄存器进行操作的配置或系统寄存器的指令以及纯粹的基于副作用的指令(例如,PMSWINC)。指令在被加载/存储处理单元180执行时还促使BDEST寄存器的有效位被设置,从而指示BDEST寄存器的内容有效。下一个加载指令随后促使新的数据值被从寄存器x17中指引的存储器中的一个或多个地址加载到寄存器x1。接着,MSR指令将该数据从x1复制到BRVAL寄存器(其是值寄存器的示例)。该指令在被加载/存储处理单元180执行时还促使BRVAL寄存器的有效位被设置,以指示BRVAL寄存器的内容有效。第三加载指令随后被执行,以用寄存器x17指引的地址的存储器中存储的数据替换x1中的值。将明白的是,相同的指令不能针对寄存器x17本身执行,因为寄存器x17是提供可以从其提取数据的存储器地址所必需的。另外,寄存器x17是提供在BDEST寄存器被无效的情况下可以从其重新提取数据的存储器地址所必需的。寄存器还原分支指令解决了这个问题。在被分支指令解码电路134进行解码时,所生成的信号促使例如,分支单元190首先核对针对BDEST和BRVAL是否设置了标记。假设这些标记被设置,即,BDEST和BRVAL寄存器中的数据有效,则程序计数器(PC)的值被更新为等于BDEST中存储的值,即,程序分支到BDEST中存储的地址。寄存器x17中存储的数据值(在本实施例中,在BRR指令的字段中明确指定)随后被更新为寄存器BRVAL中存储的数据。在标记之一没有被设置(即,如果BDEST或BRVAL之一无效)的情况下,BRR指令被如同NOOP指令一样执行,并且流程继续进行到下一指令(其是到标签“再次”的直接分支指令(B))。换言之,如果最后指令被执行,则代码循环并再次被执行。注意,在这些示例中,并没有提供加载(LD)指令的所有特殊参数。但是,将理解的是,寄存器x17被用来指向存储器中包括多个数据值的结构(例如,针对线程上下文),并且顺序示出的加载指令将该结构中的数据值加载到寄存器中。
注意,在本实施例中,在BRR指令的字段中明确地指引架构寄存器(x17)。这增加了灵活性,因为其允许用户(或编译者)利用任意架构寄存器设置寄存器还原分支指令。但是,在其他实施例中,这是不可能的,相反,BRR指令本身暗含地控制利用BDEST中存储的值进行更新的寄存器。
图3示意性地示出了执行图2所示的代码对64位架构200的影响。架构200包括存储器210,例如,可以经由加载/存储处理单元180对存储器210进行存取。图3示出了由标识符“保存”指引的存储器210的位置。该部分存储器包括三个字,第一个字包含数据“XYZ”,第二个字包含数据“117”,第三个字包含数据“101”。架构还包括主寄存器文件220,该主寄存器文件包括多个架构寄存器(例如,x0、x1、x2、...、x17、x18)。这些寄存器中的每个寄存器都是通用寄存器,因此可以被直接存取(写入/读取)。架构还包括BRDEST寄存器230,该BRDEST寄存器被用来存储目标程序地址,其中,当寄存器还原分支指令(BRR)被执行时该目标程序地址是分支的目标。分支通过程序计数器120中存储的值例如,被分支单元190更新时发生。还提供BRVAL寄存器240,该BRVAL寄存器存储被移到架构寄存器之一的数据值(作为寄存器还原分支指令(BRR)执行的一部分)。在本实施例中,BRDEST 230和BRVAL 240寄存器中的每个寄存器包括指示BRDEST和BRVAL中存储的值是否有效的标记250和260。这里,值“1”被用来指示标记被设置,即,寄存器中的值有效。标记250和260不能被直接设置或清除。然而,在BRDEST 230或BRVAL 240之一中存储值使得对应标记被设置。同时,发生异常或中断或者执行寄存器还原分支指令本身使得标记被清除(例如,设置为“0”),从而指示寄存器中存储的值无效或者至少它们不被相信有效。
注意,在一些其他实施例中,寄存器BRDEST和BRVAL是架构寄存器,因此可以被直接存取而不是仅经由MSR指令存取(这会限制如何影响寄存器以及哪一个负责设置对应的有效标记)。实际上,在一些实施例中,BRDEST和BRVAL寄存器甚至是可清空的,也就是说这些寄存器中的值(不同于标记)可以在任意时间改变。
图2所示的代码使得多个不同操作在架构上进行。这些操作在图3中被示出分为11个不同步骤。在第一步骤中,使用寄存器x17提供到存储器区域的地址。这可以是例如,存储线程的保存上下文的结构,其中,该结构包括多个数据值,这些数据值被顺序加载到寄存器中。在第二步骤中,将该存储器地址处存储的数据存储在寄存器x1中。在第三步骤中,将寄存器x1中存储的数据复制到BRDEST寄存器230,并且设置BRDEST的有效标记。在第四步骤中,再次使用寄存器x17提供到存储器区域的地址,并且在第五步骤中,将x17所指引的存储器地址后面的下一个存储器地址中存储的数据复制到寄存器x1。在第六步骤中,将寄存器x1中存储的数据复制到BRVAL寄存器240,并且设置BRVAL的有效标记(例如,为1)。在第七步骤中,再次使用寄存器x17提供到存储器区域的地址,并且在第八步骤中,将位置x17处的下一个存储器地址中存储的数据复制到寄存器x1。在第九步骤中,利用到寄存器x17的明确指引执行寄存器还原分支指令。这使得BRDEST和BRVAL中的有效标记被检查。如果有效,则在步骤10,使用BRDEST中存储的值更新程序计数器(PC)120。另外如果有效,则在步骤11,将BRVAL中存储的值存储在寄存器x17中。如果两个标记之一被清除(即,如果两个值之一无效),则执行出错动作。出错动作可以包括一个或多个不同的子动作,这些子动作包括清空流水线(例如,排空流水线)、将寄存器还原分支指令作为NOOP指令处理、或者执行到例如,寄存器还原分支指令之前的指令的替代分支以重新设置并再次执行寄存器还原分支指令。
图4示出了根据一个实施例的在寄存器还原分支指令的设置和执行期间不同寄存器中存储的值如何改变。在本实施例中,不是针对BDEST和BRVAL寄存器中的每个寄存器提供标记以指示这些寄存器中存储的值是否有效,而是定义标记这些寄存器的内容无效的特殊值。最初,使用寄存器x17指向存储器中的保存数据位置(“保存”),其对应于存储所保存的线程上下文的数据结构。同时,寄存器BDEST和BRVAL二者都包含特殊的“无效”值,从而指示BDEST和BRVAL无效。在执行第一加载指令后,寄存器x17仍然指向“保存”。但是,寄存器x1现在将包含存储器中地址“保存”中存储的数据值-XYZ。在执行第一MSR指令后,BDEST将保存寄存器x1中存储的值(即,XYZ)。BDEST不再包含特殊无效值,因此隐性的有效。寄存器x1中的值和BRVAL的值保持不变。在执行第二加载指令后,将下一个数据值(“117”)加载到寄存器x1中。其他数据值保持不变。第二MSR指令使得寄存器x1中存储的值被存储在BRVAL中。BRVAL不再包含特殊无效值,因此隐含地表示BRVAL中的数据有效。第三和最后加载指令使得下一个数据值(“101”)被加载到寄存器x1中。因此,此时,x17仍然指向“保存”,同时BDEST保存值XYZ,BRVAL保存值117。寄存器x1保存值101。在执行寄存器还原分支指令(BRR)指令时(其隐含地指引寄存器x17作为在处理期间将更新的寄存器),核对BDEST和BRVAL中存储的值。在这种情况下,由于没有寄存器存储特殊无效值,所以这些值被认为有效,处理继续进行。具体地,BRVAL中存储的值(117)被指派给寄存器x17,并且通过将程序计数器120更新到XYZ,程序分支到BDEST中存储的程序地址(XYZ)。相应地,在BRR指令执行结束时,寄存器x1存储值101,寄存器x17存储值117。在本特定示例中,由于发送寄存器还原分支指令,BDEST和BRVAL中的值被无效。结果,执行可以从其中所有寄存器存储正确值的程序地址XYZ处的指令继续进行。
在本实施例中,BRR指令的位置和XYZ的位置二者都被认为在用户空间中。换言之,BRR指令的程序地址和程序地址XYZ都在存储器的非特权部分。实际上,除了由MSR指令控制的对BDEST和BRVAL寄存器进行存取以外,可以看出不需要对于下层架构的任意部分的特殊存取。实际上,不需要对通常对用户空间进程不可用的任意资源进行存取。
图5示出了根据一个实施例的在寄存器还原分支指令的设置和执行失败期间不同寄存器中存储的值如何改变。这里的处理与参考图4描述的一样。但是,在本示例中,在执行第三加载指令(“LD x1,[x17,#...]”)后,出现中断。在中断期间,BDEST或BRVAL寄存器中存储的值会改变。因此,中断服务例程将BDEST和BRVAL的值自动设置为无效。但是,通用寄存器中保存的值一般在从中断返回时被还原。结果,当寄存器还原分支指令BRR被执行时,指定寄存器x17,寄存器x17将仍然指向存储器中的保存数据位置(例如,“保存”),并且x1将仍然存储值101。另一方面,BDEST和BRVAL将无效。因此,在执行BRR指令的第一步骤,确定BDEST和BRVAL中的至少一者无效,因此除了增加程序计数器以外没有进一步的执行进行(即,指令被当作NOOP指令处理)。因此,执行流程“落空”到BRR指令下面的恢复代码。如图2所示,这可以像促使代码被重新执行的分支指令一样简单。将预见到,BDEST或BRVAL值被无效的时机数目将非常小,因此,通过重新执行该序列,寄存器还原分支指令有希望在后续机会成功。
图6示出了根据一个实施例的数据处理方法的流程图300。在步骤310,对指定架构寄存器的寄存器还原分支指令进行解码。所解码的指令对应于基于程序计数器120中存储的值(例如,使用指令提取器110)取出的指令。解码可以由例如,流水线100中的指令解码器130中的分支指令解码电路134执行。在步骤320,所解码的指令促使一个或多个控制信号被生成。这些控制信号被发送给一个或多个处理单元140,这些处理单元促使处理操作发生。在步骤330,由指令指定(并且经由控制信号实现的)各种处理操作促使处理单元140,例如,分支单元190确定目标程序地址和数据值二者是否有效。这些值分别被存储在例如,BRDEST和BRVAL寄存器中。如果这些值之一无效,则在步骤340,执行出错动作。否则,在步骤350,处理单元140促使分支进行到目标程序地址,并且在步骤360,用该数据值更新架构寄存器。特殊的架构寄存器可以由寄存器还原分支指令本身明确指定。替代地,架构寄存器的身份可以被隐含地指定。换言之,寄存器BRVAL中存储的值将一直被保存到相同的寄存器。
图7示出了根据一个实施例的示出寄存器还原分支指令的使用的流程图400。在与图6所示相同的步骤处使用相同的参考标号。在步骤410,从存储器向寄存器(例如,BRDEST)加载目标程序地址。该步骤可以包括一个或多个指令的执行,这些指令中的每个指令必须经由处理单元140进行读取、解码、并执行。然后,在步骤420,从存储器向寄存器(例如,BRVAL)加载数据值。然后,该步骤可以包括一个或多个指令的执行,这些指令中的每个执行必须经由处理单元140取出、解码、并执行。然后,如参考步骤310、320、330、350、和360在图6中所示,解码并执行寄存器还原分支指令。但是,在步骤330,如果处理单元140确定目标程序地址和数据值之一无效,则在步骤340采取的出错动作使得处理返回到步骤410。在步骤410,从存储器向寄存器(BRDEST)加载目标程序指令。这样,处理继续进行,直到架构寄存器的分支和更新在步骤350和360中成功进行。
图8示出了可以使用的虚拟机实施方式。尽管上述实施例一般通过用于操作支持所述技术的特定处理硬件的装置和方法的方式实现本技术,但是也可以提供硬件设备的所谓的虚拟机实施方式。这些虚拟机实施方式在通常运行支持虚拟机程序510的主机操作系统520的主机处理器530上运行。这可以要求提供更有力的处理器,以便支持以合理速度执行的虚拟机实施方式,但是这种方法仅在某些情形(例如,当出于兼容性或重复使用的原因,希望运行另一处理器本地的代码时)中合理。虚拟机程序510提供到应用程序500的应用程序接口,该应用程序接口与虚拟机程序510模拟的真实硬件提供的应用程序接口相同。因此,包括上述处理器状态核对指令的一个或多个示例的程序指令可以使用虚拟机程序510在应用程序500中执行,以模拟它们与虚拟机硬件的交互。
在本申请中,词“被配置为...”被用来表示装置的元件具有能够执行所定义的操作的配置。在本上下文中,“配置”表示硬件或软件的互连方式或布置。例如,装置可以是提供所定义的操作的专用硬件,或者处理器或其他处理设备可以被编程为执行功能。“被配置为”不意味着装置元件需要被以任何方式改变以便提供所定义的操作。
另外,在本申请中,与寄存器或标记有关的词“设置”可以包括将寄存器或标记配置为具有值“1”或“0”。类似地,与寄存器或标记有关的词“清除”是指与针对“设置”执行的操作相反的操作并且因此可以指代将寄存器或标记配置为具有值“0”或“1”。
尽管本文参考附图详细描述了本发明的说明性实施例,但是将理解的是,本发明不限于这些精确实施例,在不偏离所附权利要求限定的本发明的范围和精神的条件下,本领域技术人员可以想到各种改变、添加、和修改。例如,在不偏离本发明的范围的条件下,从属权利要求的特征可以与独立权利要求的特征进行各种组合。

Claims (18)

1.一种用于处理数据的装置,包括:
执行程序指令指定的处理操作的处理电路;
存储目标程序地址的目标寄存器;
存储数据值的值寄存器;
架构寄存器;以及
指令解码器,该指令解码器对所述程序指令进行解码,以生成控制所述处理电路执行所述处理操作的控制信号,
其中,所述指令解码器包括分支指令解码电路,该分支指令解码电路对寄存器还原分支指令进行解码,以促使所述处理电路确定所述目标程序地址和所述数据值是否有效,如果所述目标程序地址和所述数据值二者都有效,则分支到所述目标程序地址并更新所述架构寄存器存储所述数据值,否则采取出错动作。
2.根据权利要求1所述的装置,其中,所述出错动作是促使流水线清空。
3.根据任意前述权利要求所述的装置,其中,所述出错动作是分支到另一指令。
4.根据权利要求3所述的装置,其中,所述另一指令在所述程序指令中的所述寄存器还原分支指令之前。
5.根据权利要求1所述的装置,其中,所述出错动作是将所述寄存器还原分支指令作为NOOP指令进行处理。
6.根据权利要求1、2、4、5中任一项所述的装置,其中,所述值寄存器和所述目标寄存器中的至少一者具有指示所述数据值或所述目标程序地址是否已经分别被清空的相关有效性指示符。
7.根据权利要求1、2、4、5中任一项所述的装置,其中,所述处理电路通过检查目标有效标记确定所述目标程序地址是否有效。
8.根据权利要求7所述的装置,其中,所述处理电路被配置为响应于异常而清除所述目标有效标记,以指示所述目标程序地址无效。
9.根据权利要求7所述的装置,其中,所述指令解码器包括移动指令解码电路,该移动指令解码电路对移动指令进行解码,以促使所述处理电路将规定值存储在所述目标寄存器中,并设置所述目标有效标记以指示所述目标程序地址有效。
10.根据权利要求1、2、4、5、8、9中任一项所述的装置,还包括:所述处理电路通过检查值有效标记确定所述数据值是否有效。
11.根据权利要求10所述的装置,其中,所述处理电路被配置为响应于异常而清除所述值有效标记,以指示所述目标程序地址无效。
12.根据权利要求10所述的装置,其中,所述指令解码器包括移动指令解码电路,该移动指令解码电路对移动指令进行解码,以促使所述处理电路将规定值存储在所述值寄存器中,并设置所述值有效标记以指示所述数据值有效。
13.根据权利要求1、2、4、5、8、9、11、12中任一项所述的装置,其中,所述寄存器还原分支指令提供对所述架构寄存器的显式引用。
14.根据权利要求1、2、4、5、8、9、11、12中任一项所述的装置,其中,所述目标程序地址和所述寄存器还原分支指令的程序地址二者都在用户空间中。
15.根据权利要求1、2、4、5、8、9、11、12中任一项所述的装置,其中,所述处理电路使用64位架构。
16.一种用于处理系统中的数据的方法,该系统包括:
存储目标程序地址的目标寄存器;
存储数据值的值寄存器;以及
架构寄存器,
该方法包括以下步骤:
执行程序指令指定的处理操作;
对所述程序指令进行解码,以生成控制所述处理操作的执行的控制信号,其中
所述解码包括对寄存器还原分支指令进行解码,以确定所述目标程序地址和所述数据值是否有效,如果所述目标程序地址和所述数据值二者都有效,则分支到所述目标程序地址并更新所述架构寄存器存储所述数据值,否则采取出错动作。
17.根据权利要求16所述的方法,其中,所述解码还包括:
对一个或多个移动指令进行解码,以从存储器获取所述目标程序地址和所述数据值,将所述目标程序地址存储在所述目标寄存器中,并将所述数据值存储在所述值寄存器中,其中
对所述一个或多个移动指令进行解码的步骤在对所述寄存器还原分支指令进行解码的步骤之前进行。
18.一种用于处理数据的装置,包括:
用于执行程序指令指定的处理操作的部件;
用于存储目标程序地址的部件;
用于存储数据值的部件;
架构寄存器;以及
用于对所述程序指令进行解码,以生成控制用于执行处理操作的部件执行所述处理操作的控制信号的部件,
其中,用于对所述程序指令进行解码的部件包括用于对寄存器还原分支指令进行解码的分支指令解码部件,以促使用于执行处理操作的部件确定所述目标程序地址和所述数据值是否有效,如果所述程序指令地址和所述数据值二者都有效,则分支到所述目标程序地址并更新所述架构寄存器存储所述数据值,否则采取出错动作。
CN201780037466.0A 2016-06-22 2017-06-15 用于处理数据的装置和方法 Active CN109416632B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
GB1610859.9A GB2551548B (en) 2016-06-22 2016-06-22 Register restoring branch instruction
GB1610859.9 2016-06-22
PCT/GB2017/051751 WO2017220974A1 (en) 2016-06-22 2017-06-15 Register restoring branch instruction

Publications (2)

Publication Number Publication Date
CN109416632A CN109416632A (zh) 2019-03-01
CN109416632B true CN109416632B (zh) 2023-02-28

Family

ID=56894970

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201780037466.0A Active CN109416632B (zh) 2016-06-22 2017-06-15 用于处理数据的装置和方法

Country Status (5)

Country Link
US (1) US10877767B2 (zh)
KR (1) KR102307581B1 (zh)
CN (1) CN109416632B (zh)
GB (1) GB2551548B (zh)
WO (1) WO2017220974A1 (zh)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11599445B2 (en) * 2018-06-15 2023-03-07 Board Of Regents, The University Of Texas System Watcher: precise and fully-automatic on-site failure diagnosis
US10802854B2 (en) 2019-08-30 2020-10-13 Alibaba Group Holding Limited Method and apparatus for interpreting bytecode instruction stream
CN110704108B (zh) * 2019-08-30 2020-08-14 阿里巴巴集团控股有限公司 解释执行字节码指令流的方法及装置
CN114153391B (zh) * 2021-11-26 2024-02-27 山东云海国创云计算装备产业创新中心有限公司 一种基于寄存器的数据存储方法、装置、设备及存储介质

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0229619A2 (en) * 1986-01-07 1987-07-22 Nec Corporation Instruction prefetching device comprising a circuit for checking prediction for a branch instruction before the instruction is executed
JP2002229776A (ja) * 2001-01-22 2002-08-16 Faraday Technology Corp 複数組の命令組を実行するためのデータ処理装置
CN1519728A (zh) * 2002-12-31 2004-08-11 英特尔公司 用于先行执行期间的存储器通信的装置
CN101344842A (zh) * 2007-07-10 2009-01-14 北京简约纳电子有限公司 多线程处理器及其多线程处理方法
CN101419543A (zh) * 2007-10-26 2009-04-29 瑞昱半导体股份有限公司 预测高速寄存器的存取位置的方法及系统
CN102063286A (zh) * 2009-10-19 2011-05-18 Arm有限公司 程序流控制
CN103197919A (zh) * 2012-01-06 2013-07-10 想象力科技有限公司 还原寄存器重命名映射

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CA1254661A (en) * 1985-06-28 1989-05-23 Allen J. Baum Method and means for instruction combination for code compression
US4974155A (en) * 1988-08-15 1990-11-27 Evans & Sutherland Computer Corp. Variable delay branch system
GB9412487D0 (en) * 1994-06-22 1994-08-10 Inmos Ltd A computer system for executing branch instructions
US5627981A (en) * 1994-07-01 1997-05-06 Digital Equipment Corporation Software mechanism for accurately handling exceptions generated by instructions scheduled speculatively due to branch elimination
US5850543A (en) * 1996-10-30 1998-12-15 Texas Instruments Incorporated Microprocessor with speculative instruction pipelining storing a speculative register value within branch target buffer for use in speculatively executing instructions after a return
US5964869A (en) * 1997-06-19 1999-10-12 Sun Microsystems, Inc. Instruction fetch mechanism with simultaneous prediction of control-flow instructions
US6553426B2 (en) * 1997-10-06 2003-04-22 Sun Microsystems, Inc. Method apparatus for implementing multiple return sites
US6189088B1 (en) * 1999-02-03 2001-02-13 International Business Machines Corporation Forwarding stored dara fetched for out-of-order load/read operation to over-taken operation read-accessing same memory location
US6338136B1 (en) * 1999-05-18 2002-01-08 Ip-First, Llc Pairing of load-ALU-store with conditional branch
JP3974063B2 (ja) * 2003-03-24 2007-09-12 松下電器産業株式会社 プロセッサおよびコンパイラ
US7293265B2 (en) * 2003-05-15 2007-11-06 Intel Corporation Methods and apparatus to perform return-address prediction
US7096348B2 (en) * 2003-12-15 2006-08-22 Freescale Semiconductor, Inc. Method and apparatus for allocating entries in a branch target buffer
US7996659B2 (en) * 2005-06-06 2011-08-09 Atmel Corporation Microprocessor instruction that allows system routine calls and returns from all contexts
US7934073B2 (en) * 2007-03-14 2011-04-26 Andes Technology Corporation Method for performing jump and translation state change at the same time
US20090229054A1 (en) 2007-07-11 2009-09-17 Yates Jamie L Body pillow cover with detachable pockets
US8341383B2 (en) * 2007-11-02 2012-12-25 Qualcomm Incorporated Method and a system for accelerating procedure return sequences
US20100023730A1 (en) * 2008-07-24 2010-01-28 Vns Portfolio Llc Circular Register Arrays of a Computer
US20110320787A1 (en) * 2010-06-28 2011-12-29 Qualcomm Incorporated Indirect Branch Hint
GB2484489A (en) * 2010-10-12 2012-04-18 Advanced Risc Mach Ltd Instruction decoder using an instruction set identifier to determine the decode rules to use.
US9213551B2 (en) * 2011-03-11 2015-12-15 Oracle International Corporation Return address prediction in multithreaded processors

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0229619A2 (en) * 1986-01-07 1987-07-22 Nec Corporation Instruction prefetching device comprising a circuit for checking prediction for a branch instruction before the instruction is executed
JP2002229776A (ja) * 2001-01-22 2002-08-16 Faraday Technology Corp 複数組の命令組を実行するためのデータ処理装置
CN1519728A (zh) * 2002-12-31 2004-08-11 英特尔公司 用于先行执行期间的存储器通信的装置
CN101344842A (zh) * 2007-07-10 2009-01-14 北京简约纳电子有限公司 多线程处理器及其多线程处理方法
CN101419543A (zh) * 2007-10-26 2009-04-29 瑞昱半导体股份有限公司 预测高速寄存器的存取位置的方法及系统
CN102063286A (zh) * 2009-10-19 2011-05-18 Arm有限公司 程序流控制
CN103197919A (zh) * 2012-01-06 2013-07-10 想象力科技有限公司 还原寄存器重命名映射

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Exceeding the dataflow limit via value prediction;M.H. Lipasti等;《IEEE》;19960806;226-237 *
分支指令特性与分支预测器的性能研究;喻明艳 等;《微电子学与计算机》;20100605;8-12 *

Also Published As

Publication number Publication date
US20190121646A1 (en) 2019-04-25
US10877767B2 (en) 2020-12-29
GB2551548B (en) 2019-05-08
KR102307581B1 (ko) 2021-10-05
CN109416632A (zh) 2019-03-01
GB2551548A (en) 2017-12-27
GB201610859D0 (en) 2016-08-03
KR20190020036A (ko) 2019-02-27
WO2017220974A1 (en) 2017-12-28

Similar Documents

Publication Publication Date Title
US5889982A (en) Method and apparatus for generating event handler vectors based on both operating mode and event type
EP3362889B1 (en) Move prefix instruction
CN109416632B (zh) 用于处理数据的装置和方法
US20080066055A1 (en) Reversing execution of instructions in a debugger
US5987600A (en) Exception handling in a processor that performs speculative out-of-order instruction execution
US10599428B2 (en) Relaxed execution of overlapping mixed-scalar-vector instructions
US9395992B2 (en) Instruction swap for patching problematic instructions in a microprocessor
CN111133418B (zh) 在例外屏蔽更新指令之后允许未中止的事务处理
GB2563116B (en) Apparatus and method for determining a recovery point from which to resume instruction execution following handling of unexpected change in instruction flow
US20140281415A1 (en) Dynamic rename based register reconfiguration of a vector register file
JPH09152973A (ja) カウント/リンク・レジスタ変更命令の投機実行をサポートする方法及び装置
EP3433724B1 (en) Processing vector instructions
US5841999A (en) Information handling system having a register remap structure using a content addressable table
US7937525B2 (en) Method and apparatus for decoding a virtual machine control structure identification
US11663014B2 (en) Speculatively executing instructions that follow a status updating instruction
US20030084272A1 (en) Handling problematic events in a data processing apparatus
US11775297B2 (en) Transaction nesting depth testing instruction
US10552156B2 (en) Processing operation issue control
JP3748191B2 (ja) 計算機とその制御方法

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant