CN104252586A - 选择的指令的预测获取和解码方法和系统 - Google Patents
选择的指令的预测获取和解码方法和系统 Download PDFInfo
- Publication number
- CN104252586A CN104252586A CN201410301454.2A CN201410301454A CN104252586A CN 104252586 A CN104252586 A CN 104252586A CN 201410301454 A CN201410301454 A CN 201410301454A CN 104252586 A CN104252586 A CN 104252586A
- Authority
- CN
- China
- Prior art keywords
- instruction
- address
- prediction
- processor
- selected instruction
- 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.)
- Granted
Links
- 238000000034 method Methods 0.000 title claims description 105
- 238000012545 processing Methods 0.000 claims abstract description 39
- 230000008569 process Effects 0.000 claims description 65
- 238000011084 recovery Methods 0.000 claims description 7
- 230000001737 promoting effect Effects 0.000 claims description 2
- 238000012546 transfer Methods 0.000 abstract description 2
- 230000015654 memory Effects 0.000 description 49
- 238000003860 storage Methods 0.000 description 32
- 230000006870 function Effects 0.000 description 29
- 238000004590 computer program Methods 0.000 description 19
- 238000010586 diagram Methods 0.000 description 17
- 238000013519 translation Methods 0.000 description 12
- 230000008859 change Effects 0.000 description 11
- 239000000872 buffer Substances 0.000 description 10
- 238000004891 communication Methods 0.000 description 10
- 238000005516 engineering process Methods 0.000 description 9
- 238000007726 management method Methods 0.000 description 9
- 230000002159 abnormal effect Effects 0.000 description 8
- 238000006243 chemical reaction Methods 0.000 description 8
- 238000007667 floating Methods 0.000 description 6
- 230000008901 benefit Effects 0.000 description 5
- 230000005291 magnetic effect Effects 0.000 description 5
- 230000000295 complement effect Effects 0.000 description 4
- 238000013461 design Methods 0.000 description 4
- 238000007689 inspection Methods 0.000 description 4
- 230000007246 mechanism Effects 0.000 description 4
- 101150004071 SRR1 gene Proteins 0.000 description 3
- 238000007792 addition Methods 0.000 description 3
- 230000000712 assembly Effects 0.000 description 3
- 238000000429 assembly Methods 0.000 description 3
- 238000001514 detection method Methods 0.000 description 3
- 230000000694 effects Effects 0.000 description 3
- 238000013507 mapping Methods 0.000 description 3
- 230000002093 peripheral effect Effects 0.000 description 3
- 238000004088 simulation Methods 0.000 description 3
- 230000005856 abnormality Effects 0.000 description 2
- 230000009471 action Effects 0.000 description 2
- 230000005540 biological transmission Effects 0.000 description 2
- 230000006378 damage Effects 0.000 description 2
- 238000006073 displacement reaction Methods 0.000 description 2
- 230000007774 longterm Effects 0.000 description 2
- 238000012423 maintenance Methods 0.000 description 2
- 238000004519 manufacturing process Methods 0.000 description 2
- 239000000463 material Substances 0.000 description 2
- 230000005055 memory storage Effects 0.000 description 2
- 230000003287 optical effect Effects 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 210000003813 thumb Anatomy 0.000 description 2
- 230000001052 transient effect Effects 0.000 description 2
- 102100040160 Rabankyrin-5 Human genes 0.000 description 1
- 101710086049 Rabankyrin-5 Proteins 0.000 description 1
- 239000000654 additive Substances 0.000 description 1
- 230000000996 additive effect Effects 0.000 description 1
- 238000012884 algebraic function Methods 0.000 description 1
- 230000006399 behavior Effects 0.000 description 1
- 230000015572 biosynthetic process Effects 0.000 description 1
- 230000001413 cellular effect Effects 0.000 description 1
- 239000003795 chemical substances by application Substances 0.000 description 1
- 238000010276 construction Methods 0.000 description 1
- 239000013256 coordination polymer Substances 0.000 description 1
- 238000012937 correction Methods 0.000 description 1
- 230000008878 coupling Effects 0.000 description 1
- 238000010168 coupling process Methods 0.000 description 1
- 238000005859 coupling reaction Methods 0.000 description 1
- 238000013500 data storage Methods 0.000 description 1
- 230000001419 dependent effect Effects 0.000 description 1
- 230000005611 electricity Effects 0.000 description 1
- 230000002349 favourable effect Effects 0.000 description 1
- 210000003811 finger Anatomy 0.000 description 1
- 229920002457 flexible plastic Polymers 0.000 description 1
- 238000005194 fractionation Methods 0.000 description 1
- 230000007787 long-term memory Effects 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012544 monitoring process Methods 0.000 description 1
- 230000006855 networking Effects 0.000 description 1
- VIKNJXKGJWUCNN-XGXHKTLJSA-N norethisterone Chemical compound O=C1CC[C@@H]2[C@H]3CC[C@](C)([C@](CC4)(O)C#C)[C@@H]4[C@@H]3CCC2=C1 VIKNJXKGJWUCNN-XGXHKTLJSA-N 0.000 description 1
- 239000013307 optical fiber Substances 0.000 description 1
- 238000005457 optimization Methods 0.000 description 1
- 230000037361 pathway Effects 0.000 description 1
- 238000007781 pre-processing Methods 0.000 description 1
- 230000000717 retained effect Effects 0.000 description 1
- 239000004065 semiconductor Substances 0.000 description 1
- 230000001360 synchronised effect Effects 0.000 description 1
- 238000012360 testing method Methods 0.000 description 1
- 230000009466 transformation Effects 0.000 description 1
- 238000004148 unit process Methods 0.000 description 1
- 238000012795 verification Methods 0.000 description 1
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/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3808—Instruction prefetching for instruction reuse, e.g. trace cache, branch target cache
-
- 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/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30054—Unconditional branch 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 or look ahead
- G06F9/3802—Instruction prefetching
-
- 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/3005—Arrangements for executing specific machine instructions to perform operations for flow control
- G06F9/30058—Conditional branch 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/30098—Register arrangements
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
-
- 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/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/3016—Decoding the operand specifier, e.g. specifier format
-
- 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 or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- 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 or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
-
- 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 or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
-
- 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 or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3838—Dependency mechanisms, e.g. register scoreboarding
- G06F9/384—Register renaming
-
- 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 or look ahead
- G06F9/3836—Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
- G06F9/3842—Speculative instruction execution
-
- 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 or look ahead
- G06F9/3854—Instruction completion, e.g. retiring, committing or graduating
- G06F9/3858—Result writeback, i.e. updating the architectural state or memory
-
- 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 or look ahead
- G06F9/3861—Recovery, e.g. branch miss-prediction, exception handling
-
- 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 or look ahead
- G06F9/3867—Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
Abstract
用于选择的指令(例如,操作系统指令、管理程序指令或其他这样的指令)的预测获取和解码。进行要执行所选择的指令的确定,所选择的指令诸如系统调用指令、异步中断、从系统调用指令返回或从异步中断返回。基于确定要执行这样的指令,对于所选择的指令确定预测地址,它是处理传送到以便提供所请求的服务的地址。然后,开始在所选择的指令的执行之前在预测的地址处开始的指令的获取。而且,预测和保持与所选择的指令相关的推测状态,其包括例如所选择的指令或代表所选择的指令执行的指令的权限级的指示。
Description
技术领域
一个或多个方面总体上涉及在处理环境内的处理,并且具体地说涉及改变处理环境的权限级或其他操作状态的指令的执行。
背景技术
处理器执行将处理器引导来执行特定操作的指令。该指令可以作为示例是执行用户限定的任务的用户应用的一部分或执行系统级服务的操作系统应用的一部分。在用户应用内包括的指令具有某一的权限级,而操作系统应用的指令具有另一个权限级。该操作系统指令的权限级通常高于该用户应用的权限级。该更高的特权用于在处理器内提供安全,以防止用户应用引起在处理器内的损坏。
处理器执行指令,而与类型或权限级无关。处理器可以使用不同类型的处理技术来处理指令。一种处理技术被称为流水线化处理,其中,分阶段执行处理。示例阶段包括:获取阶段,其中,处理器从存储器获取指令;解码阶段,其中,解码获取的指令;执行阶段,其中,执行解码的指令;以及,完成阶段,其中,完成指令的执行,包括更新与该处理相关的架构状态。其他和/或不同的阶段也可能。
用于某一指令的流水线化处理的使用可能产生影响性能的延迟。在下述情况下这个特别为真:指令的执行要求清除在指令后获取的在流水线中的所有指令,并且该指令使得从流水线的开始获取一个或多个其他指令。
发明内容
现有技术的缺点被克服,并且通过提供用于促进在处理环境内的处理的计算机程序产品来提供另外的优点。所述计算机程序产品包括计算机可读存储介质,其能够被处理电路读取,并且存储用于由所述处理电路执行用于执行方法的指令。所述方法包括例如:预测要在流水线处理器中执行选择的指令,所述流水线处理器具有包括执行阶段的多个处理阶段,并且所述所选择的指令具有第一权限级,并且在所述流水线化处理器中的一个或多个其他指令具有与所述第一权限级不同的第二权限级;基于预测所述所选择的指令要执行,预测用于所述所选择的指令的输入地址和与其相关联的操作状态,所述输入地址指示要基于所述所选择的指令在其获取指令的位置;基于预测所述输入地址,在所述所选择的指令到达所述执行阶段之前,在输入地址处获取所述指令;并且,基于所述预测操作状态来启动所述获取的指令的解码。
也在此描述和要求保护与一个或多个方面相关的方法和系统。而且,也描述和可以在此要求保护与一个或多个方面相关的服务。
通过在此所述的技术来实现另外的特征和优点。在此详细描述并且作为所要求保护的方面的一部分考虑其他实施例和方面。
附图说明
在说明书的结论处的权利要求中作为示例具体指出和清楚地要求保护一个或多个方面。从结合附图获取的下面的详细说明,上述和一个或多个方面的目的、特征和优点显然,在附图中:
图1描述了用于合并和使用预测的获取和解码能力的一个或多个方面的处理环境的一个实施例;
图2描述了图1的处理环境的处理器的另外的细节;
图3描述了处理环境的处理器的指令流水线的一个实施例;
图4描述了根据一个方面的指令流水线处理的另外的细节;
图5描述根据一个方面的指令流水线处理的另一个示例;
图6描述了系统调用指令的前端执行的一个实施例;
图7描述了用于执行系统调用指令的逻辑的一个实施例;
图8描述了在系统调用指令的前端执行中使用的预测器堆栈的一个示例;
图9描述了异步异常的前端执行的一个实施例;
图10A描述了从系统调用的返回或从中断指令的返回的前端执行的一个实施例;
图10B描述了用于执行从系统调用的返回或从中断指令的返回的逻辑的一个实施例;
图11描述了用于清除流水线化处理器的逻辑的一个实施例;
图12描述了合并一个或多个方面的计算机程序产品的一个实施例;
图13描述了用于合并和使用一个或多个方面的主机计算机系统的一个实施例;
图14说明了用于合并和使用一个或多个方面的计算机系统的另一个示例;
图15描述了包括用于合并和使用一个或多个方面的计算机网络的计算机系统的另一个示例;
图16描述了用于合并和使用一个或多个方面的计算机系统的各个元件的一个实施例;
图17A描述了图16的计算机系统的执行单元的一个实施例;
图17B描述了图16的计算机系统的分支单元的一个实施例;
图17C描述了图16的计算机系统的加载/存储单元的一个实施例;并且
图18描述了用于合并和使用一个或多个方面的仿真主机计算机系统的一个实施例。
具体实施方式
根据一个方面,提供了用于选择的指令的预测获取和解码的能力,作为示例该指令是改变在处理器内的权限级和/或其他操作状态的指令(例如,操作系统指令、管理程序指令或其他这样的指令)和/或其他选择的指令。该能力包括例如:确定要执行选择的指令,诸如系统调用指令、异步中断、从系统调用指令返回或从异步中断返回;确定所选择的指令的预测地址,该预测地址是处理传送到以便提供所请求的服务的地址;并且,在该选择的指令的执行之前,开始获取在预测地址处开始的指令。该能力在一个实施例中进一步包括:预测和/或保持与选择的指令相关的推测状态,例如,包括所选择的指令的权限级的指示或代表所选择的指令执行的指令。
可以在执行不同处理器的许多不同的处理环境中使用该预测能力。例如,它可以与基于由国际商业机器公司提供的z/架构的处理器一起使用。处理器的一个或多个可以是服务器的一部分,该服务器例如是系统z服务器,其实现z/架构,并且由国际商业机器公司提供。在题目为“z/Architecture Principlesof Operation,”IBM出版号为.SA22-7832-09,第十版,2012年12月的IBM出版物中描述了z/架构的一个实施例,该文通过引用被整体包含在此。在一个示例中,处理器的一个或多个执行操作系统,诸如也由国际商业机器公司提供的z/OS操作系统。IBM、Z/ARCHITECTURE和Z/OS是美国纽约的阿蒙克市的国际商业机器公司的注册商标。在此使用的其他名称可以是国际商业机器公司或其他公司的注册商标、商标或产品名称。
在另一个实施例中,处理器基于由国际商业机器公司提供的PowerArchitecture,并且可以例如是Power700系列处理器。Power Architecture的一个实施例描述在:“Power ISA Version2.07”国际商业机器公司,2013年5月3日,其通过引用被整体包含在此。POWER ARCHITECHTURE是国际商业机器公司的注册商标。
参考图1描述了用于合并和使用预测能力的一个或多个方面的处理环境的一个具体示例。在这个具体示例中,处理环境基于由国际商业机器公司提供的Power Architecture,但是这仅是示例。一个或多个方面适用于由国际商业机器公司或其他公司提供的其他架构。
参见图1,处理环境100例如包括中央处理单元(CPU)110,其通过互连112耦合到各个其他组件,该各个其他组件例如包括:只读存储器(ROM)116,其包括控制处理环境的特定基本功能的基本输入/输出系统(BIOS);随机存取存储器(RAM)114;I/O适配器118;以及,通信适配器120。I/O适配器118可以是小计算机系统接口(SCSI)适配器,其与存储装置121进行通信。通信适配器120将互连112与网络122对接,这使得处理环境100能够与诸如远程计算机124的其他系统进行通信。
互连112也具有经由用户接口适配器126和显示适配器136与其连接的输入/输出装置。键盘128、跟踪球130、鼠标132和扬声器134全部经由用户接口适配器126互连到系统总线112。显示器138通过显示适配器136连接到系统总线112。以这种方式,作为示例,处理环境100例如通过键盘128、跟踪球130和/或鼠标132来接收输入,并且经由网络122在存储装置121、扬声器134和/或显示器138上提供输出。在处理环境100中描述的硬件元件不意欲是穷尽性的,而是在一个实施例中表示处理环境的示例组件。
可以通过诸如固件和/或软件的程序代码来控制处理环境100的操作,该程序代码通常包括例如操作系统,诸如(AIX是国际商业机器公司的商标)和一个或多个应用程序或中件程序。如在此使用,固件包括例如处理器的微码、毫码和/或宏码。它例如包括在更高级机器代码的实现中使用的硬件级指令和/或数据结构。在一个实施例中,它包括例如通常作为微码传递的专用代码,该微代码包括对于基础硬件特定的信任软件或微码,并且控制对于系统硬件的操作系统访问。这样的程序代码包括参考图2以下讨论的指令。
参见图2,讨论了处理环境的处理器200(例如,中央处理单元110)的另外的细节。在一个示例中,处理器是超级标量(super-scalar)处理器,其从存储器(例如,图1的RAM114)检索指令,并且将它们加载到处理器的指令排序逻辑(ISL)204内。该指令排序逻辑例如包括1级指令高速缓存(L1I高速缓存)206、获取解码单元208、指令队列210和分派单元212。在一个示例中,在ISL204的L1 I高速缓存206中加载指令,并且该指令被保留在L1 I高速缓存206中,直到它们被要求或如果不需要它们则被替换。从L1 I高速缓存206检索并且通过获取解码单元208解码指令。在解码当前指令后,将当前指令加载到指令队列210内。分派单元212将来自指令队列210的指令分派到寄存器管理单元214以及完成单元221内。完成单元221耦合到通用执行单元224和寄存器管理单元214,并且监控何时完成所发出的指令。
当分派单元212分派当前指令时,寄存器管理单元214的统一主映射器218向在当前未被指派到逻辑寄存器的物理寄存器文件232a-232n内的物理寄存器分配和映射目的地逻辑寄存器编号。目的地据称被重新命名到在物理寄存器文件232a-232n中的指定的物理寄存器。统一主映射器218从在统一主映射器218内的空闲物理寄存器的列表219去除指派的物理寄存器。对于那个目的地逻辑寄存器的随后的引用将指向同一物理寄存器,直到获取解码单元208解码写入到同一逻辑寄存器的另一个指令。然后,统一主映射器218将逻辑寄存器重新命名到从空闲列表219选择的不同的物理位置,并且映射器被更新以进入新的逻辑至物理寄存器映射器数据。当不再需要逻辑至物理寄存器映射器数据时,旧的映射的物理寄存器返回到空闲列表219。如果空闲物理寄存器列表219没有足够的物理寄存器,则分派单元212暂停指令分派,直到所需的物理寄存器变得可获得。
在寄存器管理单元214已经映射了当前指令后,发出队列222向包括执行单元(EU)230a-230n的通用执行引擎224发出当前指令。执行单元230a-230n是各种类型的,包括例如浮点(FP)、定点(FX)和加载/存储(LS)。通用执行引擎224经由数据高速缓存234与数据存储器(例如,图1的RAM114、ROM116)交换数据。而且,发出队列222可以包含浮点类型或定点类型的指令和/或加载/存储指令。然而,应当明白,可以使用任何数量和类型的指令。在执行期间,EU 230a-230n从在寄存器文件232a-232n中物理位置获得源操作数值,并且在寄存器文件232a-232n和/或数据高速缓存234中存储结果数据,如果有。
寄存器管理单元214例如包括:(i)映射器簇215,其包括架构化寄存器映射器216、统一主映射器218和中间寄存器映射器220;以及,(ii)发出队列222。映射器簇215跟踪向各个指令的逻辑寄存器指派的物理寄存器。在一个实施例中,架构化寄存器映射器216具有每种类型的16个逻辑(即,未物理映射)寄存器,其存储逻辑至物理的寄存器映射器数据的最后的有效(即,设置检查点(checkpointed))状态。然而,应当认识到,不同的处理器架构可以具有比在本实施例中所述者更多或更少的逻辑寄存器。而且,架构化寄存器映射器216包括指针列表,该指针列表识别描述设置检查点状态的物理寄存器。物理寄存器文件232a-232n通常包含比在架构化寄存器映射器216中的条目的数量更多的寄存器。应当注意,在其余的映射方案中使用的物理和逻辑寄存器的特定数量可以不同。
相反,统一主映射器218通常大于(通常包含多达20个条目)架构化寄存器映射器216。统一主映射器218促进逻辑至物理寄存器映射的瞬时状态的跟踪。术语“瞬时”指的是当乱序地(OoO)执行指令时统一主映射器218跟踪暂时的逻辑至物理寄存器映射数据的事实。乱序执行通常当存在比在流水线中的较新的指令需要更长的时间(即,利用更多的时钟周期)执行的较旧的指令时出现。然而,如果乱序指令的执行结果要求它因为特定原因(例如,分支误预测)被清除,则处理器可以返回到由架构化寄存器映射器216保持的设置检查点状态,并且恢复从最后的有效状态的执行。
统一主映射器218在寄存器文件232a-232n中的物理寄存器和架构化寄存器映射器216之间建立关联。限定的术语“统一”指的是统一主映射器218脱离定制设计用于寄存器文件232的每一个(例如,通用寄存器(GPR)、浮点寄存器(FPR)、定点寄存器(FXP)、异常寄存器(XER)、条件寄存器(CR)等)的专用映射器的复杂性的事实。
除了建立乱序指令的暂时的逻辑至物理寄存器映射器条目之外,统一主映射器218也跟踪依赖性数据(即,取决于在流水线中的较旧指令的结束的指令),这用于指令排序。传统上,一旦统一主映射器218已经进入指令的逻辑至物理寄存器转换,则指令传递到发出队列222。发出队列222在指令被发出到执行单元230以执行之前作为看门者(gatekeeper)。作为一般的规则,如果指令取决于较旧的指令结束,则该指令不能离开发出队列222。由于这个原因,所以统一主映射器218通过存储用于被映射的每一个指令的发出队列位置数据来跟踪依赖性数据。一旦指令已经被通用执行引擎224执行,则该指令被称为已经“结束”并且从发出队列222退出。
寄存器管理单元214可以在单个周期中从分派单元212接收多个指令,以便保持被填充的单个发出流水线。指令的分派被在统一主映射器218中的可用条目的数量限制。在缺少中间寄存器映射器220的一些映射器系统中,如果统一主映射器218具有总共20个映射器条目,则存在可以立刻处于飞行中(in-flight)(即,未设置检查点)的最多20个指令。因此,分派单元212可以可设想地分派比可以实际上从统一主映射器218退出者更多的指令。在统一主映射器218处的这个瓶颈的原因是因为下述事实:传统上,指令的映射器条目可以不从统一主映射器218退出,直到指令“结束”(即,所有的较旧指令已经“结束”执行)。
然而,在一个实施例中,中间寄存器映射器220作为非时序关键寄存器,对于其而言,来自统一主映射器218的“结束的”但是“未完成”的指令可以在该指令的最终完成之前退出(即,从统一主映射器218被去除)。一旦指令“完成”,则完成单元221向中间寄存器映射器220通知该完成。在中间寄存器映射器220中的映射器条目然后可以通过替换在架构化寄存器映射器216中当前存储的对应的条目,来更新架构化寄存器映射器216的架构化相干状态。
关于映射器和与其相关联的处理的一个实施例的另外的细节描述在题目为“Scalable Decode-Time Instruction Sequence Optimization of DependentInstructions”、Gschwind等人、2013年4月4日公布的美国公布No.2013/0086361中,其通过引用整体并入在此。
如上所述,处理器200采用流水线化处理来执行从存储器获取的指令。参考描述了处理流水线的一个示例的图3来描述关于这个处理的一个实施例的另外的细节。在一个示例中,将指令获取到指令获取单元300内,指令获取单元300包括例如指令获取(IF)302、指令高速缓存(IC)304和分支预测器306。指令获取单元300耦合到一组形成和解码单元310,该组形成和解码单元310包括一个或多个解码阶段(Dn)312以及用于向组分派(GD)320传送解码的指令的传送阶段(Xfer)314。组分派320耦合到映射单元(MP)322(诸如图2的架构化寄存器映射器216、统一主映射器218和/或中间寄存器映射器220),映射单元(MP)322耦合到处理单元330。
处理单元330提供了用于不同类型的指令的处理。例如,在331,描述了用于包括分支重定向(BR)337的指令的处理,并且该处理例如包括指令发出(ISS)332、寄存器文件读取(RF)334、执行(EX)336、向指令获取302的分支重定向337、写入返回(WB)346和传送(Xfer)348;在333,描述了用于加载/存储指令的处理,该处理包括例如指令发出332、寄存器文件读取334、计算地址(EA)338、数据高速缓存(DC)340、格式(FMT)342、写回346和传送348;在335,描述了用于定点指令的处理,并且该处理包括例如指令发出332、寄存器文件读取334、执行336、写回346和传送348;并且在337,描述了用于浮点指令的处理,并且该处理包括例如指令发出332、寄存器文件读取334、六周期浮点单元(F6)344、写回346和传送348。用于每种类型的指令的处理传送到组提交(CP)350。作为示例,在中断和清除的情况下,组提交350的输出耦合到指令获取302。
在一个实施例中,当选择的指令是要完成的下一个指令(NTC)——这意味着在流水线中的其前的所有其他指令已经完成——时,执行选择的指令,诸如系统调用或从系统调用返回指令(参见例如在370处的附图标号)。当它执行时,则传统上,在所选择的指令之后的所有指令被清除。然后根据系统调用入口地址(例如,系统调用的目标地址)或与被执行的特定指令对应的、指定的从系统调用返回地址,从执行点以新的权限级(例如,操作系统级)来重新获取指令。
当要执行改变在流水线中的权限级和/或其他操作状态的其他类型的指令时,执行类似的处理。
参考图4来描述关于指令数据流的另外的细节。如所示,依赖于指令,特定数据流可以使用下面的一个或多个:分支预测单元400,其耦合到程序计数器402,程序计数器402经由复用器403进一步耦合到指令高速缓存404。指令高速缓存404耦合到指令转换406以及一个或多个指令缓冲器408。指令缓冲器408耦合到复用器410,复用器410可以使用线程优先级来向组形成、指令解码、分派单元420转发所获取的指令。分派单元420然后进一步耦合到共享寄存器映射器422(例如,图2的映射器216、218、220)和全局完成表格424,全局完成表格424是跟踪完成的指令的数据结构。
从映射器,数据流过共享发出队列430(例如,图2的发出队列222);用于动态指令选择的复用器432;用于共享寄存器文件440(例如,图2的寄存器文件232a-232n)的共享读取逻辑;共享执行单元442,诸如加载/存储单元(LSU)、定点执行单元(FXU)、浮点执行单元(FPU)、分支执行单元(BXU)和条件寄存器逻辑执行单元(CRL)(例如,图2的执行单元230a-230n);用于共享寄存器文件444的共享写入逻辑(例如,图2的寄存器文件232a-232n);数据转换446,如果需要的话;组完成448(例如图2的完成单元221或图3的CP350);以及存储队列450。存储队列450经由复用器452耦合到数据高速缓存452和L2高速缓存454的一个或多个。
组完成448进一步可操作地耦合到一个或多个数据结构和/或存储器位置,该一个或多个数据结构和/或存储器位置包括:用于处理环境的状态,诸如全局状态458,用于指示例如在流水线中的当前权限级;非推测机器状态寄存器(MSR)456,其提供了用于在流水线中执行的每一个指令的共享机器状态;以及选用地,与在处理器中的指令的跟踪相关的其他全局状态。机器状态寄存器包括例如多个指示符(例如,位),并且每一个指示符表示所选择的属性的状态。例如,一个指示符用于指定指令的权限级(例如,用户级、操作系统级、管理程序级);一个指示符可以用于指示是否使能指令重新定位;并且/或者,另一个指示符可以用于指示是否使能数据重新定位(指令和数据重新定位用于地址转换)。可以指定其他和/或不同的属性。
再一次参见分支预测单元400。它例如包括分支预测逻辑460,分支预测逻辑460可以参考要用于作出诸如分支是否将出现的预测的分支历史表格462、返回堆栈464和目标高速缓存466的一个或多个。在一个实施例中,返回堆栈被实现为链接预测器堆栈,链接预测器堆栈对于子例程预测例如当应用执行从子例程返回时处理器认为应用将返回到的地址。根据一个方面,它也包括用于从选择的指令返回的预测地址,诸如改变在处理器中的权限级和/或其他操作状态的那些,如在此所述。在另一个方面,提供了用于预测用于从选择的指令返回的地址的独立预测器。
根据一个方面,分支预测逻辑460也用于预测是否要执行诸如改变权限级和/或其他操作状态的指令的所选择的指令,并且如果如此,则预测用于那个所选择的指令的预测地址。在其中指令是系统调用指令的一个示例中,预测地址是系统调用入口地址。入口地址是系统调用指令当它被执行时传送到的地址。通过预测入口地址,在入口地址开始的指令可以被获取,并且然后在到达所选择的指令的执行之前在单元420中被解码。这减少了在例如分支执行单元和条件寄存器逻辑执行单元中的权限级改变的流水线损失。为了完成这一点,如在此更详细地所述,分支预测逻辑460包括要用于与所选择的指令相关联的预测获取和解码的预测逻辑468。该预测逻辑采用例如在耦合到该预测逻辑的推测MSR中保持的推测状态。在一个示例中,它被保持在解码逻辑中,如在图5中所述。
根据预测能力的一方面,分支预测逻辑用于减少与执行所选择的指令相关联的成本,该所选择的指令例如是系统调用指令、从系统调用返回指令、从中断返回以及其他。预测能力预测是否要在指令流水线中执行所选择的指令(例如,改变在处理器中的权限级和/或另一个操作状态的指令),并且如果如此,则它开始获取和解码与那个指令相关联的指令(例如,在预测地址处的指令)。这减少了当执行所选择的指令时的流水线的破坏,并且处理进行到在预测地址处的指令。在至少一个实施例中,配备了预测逻辑以使用用于未来指令的预测的获取地址来更新程序计数器(PC)(也称为指令地址寄存器(IAR))。虽然在这个示例中分支预测逻辑包括所选择的指令的预测获取和解码(被称为预测逻辑468),但是在其他实施例中,该逻辑可以被包括在除了分支预测逻辑之外。
参考图5来描述根据一个方面的所选择的指令的处理的概述。如所示,指令获取(IF)单元500耦合到指令解码(ID)单元502。指令被指令获取单元从存储器获取,并且被解码单元502的解码器504解码。在一个方面,当获取指令时,使用例如预测器506来作出关于特定的被获取的指令是否是诸如改变权限级和/或其他操作状态的指令的所选择的指令的预测。例如,执行被获取的指令的部分解码以确定该指令是否是所选择的指令。如果它是所选择的指令,则用于所选择的指令的预测地址被预测和存储在指令获取单元的程序计数器(PC)512中。例如,对于系统调用指令,预测地址是系统调用入口地址;并且,对于从系统调用返回指令,预测地址是返回地址。而且,与在预测地址处的指令相关的状态被预测和存储在推测MSR510中。
所选择的指令通过指令流水线到指令序列单元(ISU)530运作其路线,指令序列单元(ISU)530包括例如一个或多个发出队列532和指令序列执行单元534,指令序列执行单元534更新非推测MSR536。非推测MSR表示在流水线中执行的指令的状态。它是实际状态,而不是预测状态,并且在一个实施例中,它包括与推测MSR相同的指示符。(在另一个实施例中,它包含在推测MSR中的指示符的超集)。该指令序列单元耦合到一个或多个执行单元,诸如分支重定向执行单元540、定点执行单元542、加载/存储执行单元544、向量标量执行单元546和一个或多个其它执行单元548。该指令被这些执行单元之一执行。根据一个方面,该指令的执行不引起现在在流水线中的、在预测地址处开始的所获取的指令的清除。相反,在所选择的指令的预测地址处开始的指令被获取和/或解码,并且当执行所选择的指令时在要被执行的流水线中。在一个实施例中,在预测地址处开始的指令诸如在解码、分派、传送或发出中被保持在流水线阶段,直到所选择的指令已经更新了非推测MSR状态(例如,图4的456或图5的536)。
参考图6来描述关于处理诸如系统调用指令的所选择的指令的另外的细节。在一个实施例中,初始,指令被从存储器获取到指令获取单元,步骤600。然后,执行诸如分支扫描(而不是全部解码)的扫描以预测该指令是否是系统调用指令,查询602。通过例如位于指令获得单元中(或在另一个实施例中,可以在解码单元中)的分支预测逻辑来执行扫描。例如,通过检查指令的操作码和/或与指令相关联的参数来作出该预测。在另一个实施例中,使用预解码信息来检测系统调用指令。在另一个实施例中,执行指令的完全解码。如果它不是系统调用指令,则处理像传统的那样执行,步骤604。在另一个实施例中,可以作出其他检查以确定该指令是否是另一种类型的所选择的指令。
然而,如果预测要执行系统调用指令,则执行特定处理以使得能够在执行系统调用指令之前获取和解码与系统调用指令相关联的一个或多个指令。已经在流水线中的、在检测的系统调用指令之前已经获取的指令被允许保持进行通过该流水线。该处理例如包括:将预测地址设置为所选择的指令的入口地址,并且将其存储在程序计数器中,步骤606。该入口地址是基于系统调用指令的执行要访问的地址。它是系统调用指令的目标地址,在该地址处,执行代表系统调用指令的一个或多个指令的获取。作为示例,从在架构规格中指定的常数或从作为示例的控制寄存器、中断向量寄存器、专用寄存器或某个指定的存储器位置获得的常数来得出该系统调用入口地址。在一个示例中,当中断值在存储器中是动态可修改的(例如,入口地址)时,使用存储该中断值的专用寄存器来执行高速缓存,以避免存储器访问。在另一个示例中,当该是值动态可修改的时,高速缓存与寄存器间接相结合或与存储多个预测值的预测表格相结合地出现,以避免存储器访问。
另外,如果预测系统调用指令,则对于在入口地址处开始的要获取的指令关于一个或多个MSR指示符的值作出进一步的预测,该MSR指示符诸如例如权限级(例如,操作系统级)、指令重新定位、数据重新定位等,步骤608。在一个示例中,当在寄存器中存储权限级时,基于系统调用指令(例如,基于与系统调用指令相关联的操作码或参数)或基于预测器表格来获得权限级。
而且,选用地,向预测器堆栈上推送在系统调用指令的执行后要返回到的地址以及在从系统调用返回时要作为推测MSR预测的值。在一个实施例中,用于从系统调用返回的预测值反映了非推测MSR的当前值,步骤610。在另一个实施例中,在被更新为在步骤608中预测的预测MSR位之前的推测MSR反映非推测MSR,并且反映非推测MSR位的推测MSR位用于初始化预测器堆栈。在另一个实施例中,例如,当同时在处理器中存在多级的推测时,在预测器堆栈中存储反映在步骤608的新预测的MSR位之前的推测状态的推测MSR位。
另外,启动在预测的地址处的获取,并且在耦合到指令获取/解码单元的推测MSR中存储预测的MSR位,步骤612。如果在系统调用后获取任何各种各样的指令(即,不与系统调用相关联的指令——不是在预测地址处开始的获取的那些),则抑制它们。然而,根据一个方面,基于预测MSR来解码在预测地址处开始的获取的指令,其在此被称为与系统调用或其他所选择的指令相关联的指令,但是抑制进一步的处理。例如,在分派处保持这些指令,直到接收到分派它们的指示。处理然后返回到步骤600。
在一个实施例中,仅推测地执行所选择的指令的一级预测(即,当已经预测一个所选择的指令时,将不预测地处理在指令流中出现的另外的所选择的指令,直到第一预测的所选择的指令已经完成其执行)。在另一个实施例中,执行多级预测。
系统调用指令继续在流水线中的处理,并且最后到达执行阶段,诸如分支执行。参考图7来描述关于系统调用指令的执行(即,当系统调用指令到达执行阶段时)的一个实施例的细节。初始,通过分支执行单元来确定关于是否从发出/分派逻辑接收到系统调用指令,查询700。如果否,则执行传统的处理,步骤702。然而,如果从发出/分派逻辑接收到系统调用指令,则从指令定义获得MSR位和下一个获取地址(即,跟随系统调用指令的指令的有效地址),步骤704。
另外,更新异常状态,步骤706。例如,更新一个寄存器(例如,SRR0)以包括在从系统调用的返回后要使用的下一个获取地址,并且更新另一个寄存器(例如,SRR1)以包括在从系统调用的返回后要使用的MSR位(例如,在根据当前指令的MSR更新之前的当前非推测MSR状态)。而且,使用根据指令定义获得的MSR来更新非推测MSR,步骤708。另外,基于例如特定架构定义来更新其他状态,其中,基于例如使用一个或多个指令或访问存储器的指定位置获得的值来更新状态。
然后,进行关于预测的MSR位是否对应于来自指令定义的架构MSR位的确定,查询710。如果它们对应,则作出关于预测的下一个获取地址(即,预测地址)是否对应于来自指令定义的架构下一个获取地址(NIA)的进一步确定,查询712。如果在MSR位和获取地址之间存在对应性,则解锁在分派处保持的指令,步骤714,并且完成指令,步骤716。处理然后返回到查询700。
然而,如果或者预测的MSR位不对应于架构MSR位或者预测的地址不对应于架构地址,则处理误预测,步骤720。例如,在流水线中的在当前指令后的指令被清除,步骤722,并且,架构MSR位和获取地址被发送到例如指令获取单元,步骤724。然后重启指令获取,步骤726,并且处理在查询700继续。这结束了系统调用执行的一个实施例。
如在此所述,提供了这样的能力,其中,在一个方面,使用分支预测逻辑来检测系统调用指令,并且预测系统调用指令的地址,该地址指定开始获取用于系统调用指令的指令的位置。此外,还预测那些获取的指令的权限级。
在一个方面,系统调用入口指令被分支预测逻辑检测,并且被处理为预测的分支。预测通常的直接的,因为大多数系统调用入口指令是无条件的,即,总是被采取的。在具有条件系统调用指令的指令集架构(ISA)中,进行定向预测以便确定是否应当执行系统调用(或TRAP或其他类似的指令)并且基于系统调用指令来更新预测。
虽然已经参考在分支执行单元中出现的执行描述了图7,但是在另一个实施例中,在与分支执行单元不同的另一个执行单元中或者通过多个执行单元合作地执行图7的技术,该多个执行单元选用地包括或不包括该分支执行单元。
在一个方面,修改分支预测器以预测系统调用指令的目标的新权限级。基于系统调用指令,存储预测权限状态。在一个方面,当分支(或其他)清除出现时,将预测状态更新为在该清除关联的指令流中的点处的权限级的预测状态。
作为一个实施例,在获取/解码逻辑中保持单独的预测权限级,而在例如在ISU中的其他位置维持非预测的权限级。执行用于保证相对于与非推测级作比较的预测权限级的正确的推测和解码的检查,以保证所有指令的正确执行。例如,通过将推测权限级与非推测级作比较来验证与至少一个指令相关联的推测权限级。如果验证不成功,则采取校正行动。
如上所述,在一种实现中,使用预测器堆栈来维持用于系统调用指令的返回地址。先前,不这样做,因为从系统调用或异常指令可以改变处理器权限状态。然而,根据一个方面,通过增加具有预测权限状态的预测器堆栈、通过标注具有预测权限状态的预测器堆栈或两者来使能返回地址的维持。而且,在一个方面,提供逻辑以与至少一个指令相结合地检查预测权限状态。
在一个实施例中,当检测到系统调用入口指令时,将返回地址布置在预测器堆栈上。而且,在一个实施例中,向返回地址入口加上权限状态和选用的要进入的另外的MSR状态。另外,在一个实施例中,在该入口中包括标记已经通过系统调用入口指令来布置该入口的指示符。在本上下文中,将权限状态看作预测的,因为返回是预测的。不必知道处理将返回到返回地址,以及在执行从中断返回或从系统调用返回时操作系统将指示什么权限级和/或其他MSR状态。返回例如取决于在流水线中的处理。
参考图8来描述用于保持返回地址的预测器堆栈的一个示例。作为一个示例,将预测器堆栈800实现为后进先出(LIFO)链接堆栈。通过TOS指示该堆栈的顶部。在一个实施例中,该堆栈包括多个地址802以及状态信息,诸如每一个地址的当前MSR位804和记录标记806。记录标记在一个实施例中是可选的,并且它提供了用于跟踪谁在链接堆栈上建立了记录的能力。作为示例,BL指的是分支链路;SC指的是系统调用,诸如对于操作系统的系统调用;SC_HV指的是对于管理程序的系统调用,并且EXT指的是外部中断。
在一些实施例中,一些指令将使用在链接堆栈中可获得的字段的子集。因此,例如,当未指定分支至链接指令以根据诸如Power ISA v2.07的至少一个指令集规范来改变MSR状态时,可以通过获得预测的子例程返回地址而不获得更新的MSR状态来预测分支到链接指令,
根据一个实施例,当存在记录标记时,与预测的返回地址和MSR状态相结合地获取记录标记。根据一个实施例,将记录标记与正被处理的指令作比较,作为示例,使得仅反映由分支和链接指令产生的预测记录的BL记录用于预测向分支至链接指令的返回地址;仅反映对操作系统的系统调用的SC记录将被来自操作系统的从系统调用的返回使用;仅反映对管理程序的系统调用的SC_HV记录将被来自管理程序的从系统调用的返回使用;并且,仅由外部异步中断建立的EXT记录将被从外部中断指令的返回使用。在其他实施例中,从系统调用的返回可以用于从操作系统或管理程序的返回,并且任一记录类型将被接受为可允许预测器。在另一其他实施例中,这些系统调用具有相同的记录标记。在又一其他实施例中,可以通过相同的返回指令来完成操作系统调用(对于操作系统的系统调用)、管理程序调用(对于管理程序的系统调用)和外部异步异常的一些或全部。在这样的实施例中,与共享的返回对应的建立的所有标记将被接受为可允许预测器。在另一个实施例中,这些系统调用和/或中断将具有相同的记录标记。许多变化是可能的。
作为其他实施例,除了或取代在堆栈上包括状态信息,可以使用状态信息来标注堆栈。
在另一个方面,外部异步中断也可以采用在此所述的预测能力的一个或多个方面来加速从外部中断的返回。这包括例如在外部异常入口上的预测器堆栈上推送返回地址;并且在外部异常退出时,使用例如从中断返回的指令来较早地获取该地址,如在此所述。
参考图9描述了用于外部异步中断的前端执行的一个实施例。初始,通过例如获取/解码单元作出关于是否接收到外部异常的确定,查询900。如果否,则执行传统的指令处理,步骤902。在另一个实施例中,可以作出其他检查以确定该指令是否是另一个类型的所选择的指令。
否则,在指令地址寄存器中的程序计数器被设置到异常入口地址,步骤904。作为示例,该值可以从常数、中断向量寄存器或存储器向量等被获得。而且,基于异常来预测MSR指示符。
其后,清除在流水线中的指令,步骤906。而且,在一个实施例中,将从中断地址的返回推送到预测器堆栈以及当前的MSR位上,步骤908。在一个实施例中,当前MSR位反映图5的非推测MSR位536。然后,启动在异常入口地址处的获取,并且在推测MSR中存储预测的MSR位,步骤910。解码在异常入口地址处开始的、所获取的指令。处理然后继续到查询900。
在至少一个实施例中,根据按照架构的异常处理的传统定义来更新另外的状态。该状态包括但是不限于非推测全局MSR位(例如,图5的MSR位456)以及其他非推测状态,诸如从在第一寄存器(例如,SRR0寄存器)中的异常地址的架构化返回和从在第二寄存器(例如,SRR1寄存器)中的异常MSR状态的架构化返回。
如上所述,在一个实施例中,预测能力包括在预测器堆栈上推送返回信息,以促进从所选择的指令的返回。作为示例,通过经由操作系统或管理程序的从系统调用指令的返回、和/或经由操作系统或管理程序的从异步中断的返回来提供该返回。这些指令在此为了方便被称为所选择的返回指令。
利用所选择的返回指令,在一个示例中,通过检查MSR和程序计数器来检查预测器堆栈预测。如果有成功的预测,则没有重定向。
因为在系统调用退出或从中断返回中涉及的处理,使用“从中断返回”类型指令从系统调用、管理程序调用或异步中断退出特权状态可以影响性能。因此,根据一个方面,预测系统调用返回、管理程序返回或从中断返回。当系统调用或异步(外部)中断入口出现时,在预测器堆栈上布置返回地址。在一个实施例中,当处理系统调用或异步中断时在功能返回预测器堆栈上布置用于系统调用或中断的返回地址。在另一个实施例中,提供了专用操作系统、管理程序或组合的操作系统/管理程序预测器入口和/或堆栈。如在此使用,外部中断和外部异常是同义的,其与许多架构一致。
在一个实施例中,对监控软件(例如操作系统或管理程序)的内部异常、内部中断、陷阱或其他这样的控制传送将与系统调用和外部中断之一类似地被处理,并且,包括例如在功能返回预测器堆栈或专用操作系统、管理程序或组合的操作系统/管理程序预测器入口和/或堆栈之一上产生预测记录。
在一个方面,系统调用返回指令或中断返回指令被分支预测逻辑检测,并且被处理为预测分支。从返回地址被存储到的预测器堆栈获得预测地址。从系统调用或中断指令的返回被例如分支执行单元处理,并且相对于在依序执行点处的非推测状态来检查预测状态。执行所进入的非预测状态的检查,并且如果错误地预测,则清除随后的指令。
在通常的指令集架构(ISA)中的从系统调用或中断指令的大多数返回是无条件的,即,总是被采取。在具有条件系统调用返回或从中断指令的返回的ISA中,基于从系统调用或中断指令的返回来作出和更新方向预测。
在一个方面,并且在传统的分支预测之外,修改分支预测器以预测控制流的改变的目标的新的权限级(例如因为系统调用退出或从中断指令的返回)。基于系统调用退出指令或从中断返回指令,更新(即存储)预测的权限级。在一个实施例中,直接地从指令获得新的预测状态。在另一个实施例中,预测器表格例如当在寄存器中提供状态时预测该状态。
当分支(或其他)清除出现时,在一个实施例中,将预测状态更新为权限级的预测状态和/或在与该清除相关联的指令流中的点处的其他MSR状态。在另一个实施例中,当清除与非推测权限级和/或MSR状态(例如,图5的非推测MSR536)相关联时,将该预测权限级和/或其他MSR状态更新为与清除点相关联的非推测权限级和/或其他MSR状态。
在获取/解码逻辑中保持单独的预测权限级和/或其他MSR状态。在例如ISU的其他位置保持非预测权限级和/或其他MSR状态。执行用于保证相对于预测权限级和/或其他MSR状态对推测权限级和/或其他MSR状态的正确推测获取和解码的检查,以保证所有指令的正确的执行。
在一个实施例中,从中断返回和系统调用退出是相同的指令。在该情况下,系统调用入口和异步中断入口产生在相同的预测结构上的类似的预测记录。从具有特权的代码(例如,操作系统和/或管理程序)的返回使用所产生的入口,而与该入口如何被产生来处理退出的特性无关。
在一个实施例中,(例如,在分派、发出和其他队列和位置中)保持具有预测状态的所有指令,直到已经验证了预测状态。在至少一个实施例中,在继续执行诸如加、减等的其他指令的同时,保持一些指令(例如,那些依赖于有特权的状态和模式)。在其中每一个指令被标注其推测状态的至少一个实施例中,如果或只有当需要清除推测指令时,例如当误预测推测状态时,它们可以被撤销/滚回,则依赖于推测状态的一些指令才基于它们的推测的有特权状态被执行。
在一个实施例中,基于从中断返回指令来作出预测,但是因此从中断返回指令被微码化。通常,同一指令引起预测和随后在流水线(即,在从指令获取进一步去除的流水线阶段中)中的预测检查。然而,根据一个方面,与微码入口相关联的原始指令引起预测(用于地址和一些MSR位两者),并且由该微码发出的另一个指令仅执行预测的检查。如果程序计数器地址或MSR被误预测,则程序计数器被重定向,并且复位MSR。
参考图10A来描述与所选择的返回指令相关联的处理的一个实施例。初始,从存储器将指令获取到指令获取单元内,步骤1000。然后,执行诸如分支扫描的扫描以预测指令是否是从系统调用的返回或从中断指令的返回,查询1002。例如通过检查指令的操作码和/或与指令相关联的参数来作出该预测。如果它不是所选择的返回指令,则处理如传统那样执行,步骤1004。在另一个实施例中,可以作出其他检查以确定该指令是否是另一种类型的所选择的指令。
然而,如果预测到要执行所选择的返回指令,则将预测地址设置为在预测器堆栈上保存的地址,并且该预测地址被保存在程序计数器中,步骤1006。
另外,如果预测到所选择的返回指令,则关于用于在预测地址处的指令的MSR位的一个或多个的值作出进一步的预测,该MSR位例如是权限级(例如,操作系统级)、指令重新定位、数据重新定位等,步骤1008。在一个示例中,从在与地址对应的预测器堆栈上的入口获得该状态。在另一个实施例中,可以根据用于至少一个指令集架构的指令集架构规范,从正被处理的指令得出预测的MSR状态。
而且,选用地,检查来自预测器堆栈的记录类型以确定预测是否正确,步骤1010。例如,如果它是从系统调用的返回,则检查确认用于预测返回的记录被系统调用的入口等建立。如果预测不正确,则执行恢复,如所预定义。(在一个实施例中,将恢复处理为误预测。在另一个实施例中,暂停指令获取直到已经执行了恢复。)另外,启动在预测地址处的获取,并且在推测MSR中存储预测的MSR位,步骤1012。也对于所获取的指令启动解码。如果在所选择的返回指令后获取到任何各种各样的指令(即,不与返回指令相关联的指令——不是在预测地址处开始的获取的那些),则抑制它们。然而,根据一个实施例的一个方面,基于预测MSR来解码在预测地址处开始的获取的指令,其在此被称为与系统调用返回或其他选择的指令相关联的指令,但是抑制进一步的处理。例如,在分派处保持这些指令,直到接收到分派它们的指示。处理然后返回到步骤1000。
返回指令继续在流水线中的处理,并且最后到达执行阶段,诸如分支执行。参考图10B来描述关于返回指令的执行(即,当返回指令到达执行阶段时)的一个实施例的细节。初始,通过分支执行单元来进行关于是否从发出/分派逻辑接收到返回指令的确定,查询1050。如果否,则执行传统的处理,步骤1052。然而,如果从发出/分派逻辑接收到返回指令,则例如分别从SRR1和SRR0寄存器获得MSR位和返回地址,步骤1054。
另外,使用从指令获得的MSR来更新非推测MSR,步骤1056。
然后,进行关于预测的MSR位是否对应于来自指令定义的架构MSR位的确定,查询1058。如果它们对应,则作出关于预测的返回地址(即,从其执行获取的系统调用返回的返回地址)是否对应于来自指令定义的架构返回地址的进一步确定,查询1060。如果在MSR位和地址之间存在对应性,则解锁在分派处保持的指令,步骤1062,并且完成指令,步骤1064。处理然后返回到查询1050。
然而,如果或者预测的MSR位不对应于架构MSR位或者地址不对应于架构地址,则处理误预测,步骤1080。例如,在流水线中的在当前指令后的指令被清除,步骤1082,并且,架构MSR位和地址被发送到例如获取单元,步骤1084。然后重启指令获取,步骤1086,并且处理在查询1050继续。这结束了返回执行的一个实施例。
在至少一个实施例中,响应于响应于误预测已经出现而恢复子例程返回预测器堆栈,执行另外的校正行为。
在一个实施例中,当处理系统调用返回指令时,基于在返回预测器状态中的预测权限状态来进入预测权限状态。而且,在一个实施例中,将预测权限状态和/或其他MSR状态与在系统调用退出指令中的权限状态和/或其他MSR状态作比较。如果检测到不匹配,则不处理预测,并且非推测地执行从系统调用的返回。当使用返回预测器堆栈对于一个分支执行分支预测,并且该返回预测器堆栈指示通过系统调用入口作出所选择的入口时,不预测地执行该分支。当使用返回预测器堆栈对于系统调用退出执行分支预测,并且该返回预测器堆栈不指示通过系统调用入口作出所选择的入口时,不预测地执行系统调用退出。
在一个实施例中,当进入异步或外部中断时,在预测器堆栈上布置返回地址。而且,向预测的从中断地址入口的返回加上要进入的预测权限状态和/帧其他MSR状态。当处理从中断返回指令时,在一个实施例中,基于在返回预测器状态中的预测权限状态和/或其他MSR状态来进入预测权限状态和/或其他MSR状态。而且,在一个实施例中,将预测权限状态和/或其他MSR状态与中断返回指令中的权限状态和/或其他MSR状态作比较。如果检测到不匹配,则不处理预测,并且非推测地执行从中断的返回。
而且,在一个实施例中,当进入异步或外部中断时,用于标记在预测器堆栈中的入口已经被异步/外部中断布置的指示符被加到预测的返回地址。当使用返回预测器堆栈对于分支执行分支预测,并且返回预测器堆栈指示通过异步/外部中断入口序列来作出所选择的入口时,不预测地执行该分支。当使用返回预测器堆栈对于从中断指令中断退出的返回执行分支预测,并且返回预测器堆栈不指示通过异步或外部中断入口序列来作出所选择的入口时,不预测地执行从中断的返回。
当通过同一指令来执行从中断返回和从系统调用返回时,在一个实施例中,系统调用入口和外部中断入口产生不同的标记,但是返回指令访问接受任何一个标记以推测地执行返回。当通过同一指令来执行从中断返回和从系统调用返回时,在另一个实施例中,系统调用入口和外部中断入口产生用于返回地址堆栈的相同的标记。
系统调用退出和从中断指令返回被路由到分支执行单元以验证预测,并且当验证不成功时恢复序列(例如,对具有正确的预测权限状态的正确的地址的清除)出现。在另一个实施例中,这被另一个执行单元或多于一个的执行单元的组合处理。在一个实施例中,当因为预测状态或返回入口标记记录的不匹配导致没有预测执行出现时,分支执行单元不执行验证,而是直接执行指令。在至少一个实施例中,直接执行对应于执行恢复序列,诸如对具有正确的预测状态的正确的地址的清除。
如在此所示,有时,要求或期望流水线的清除。例如,如果分支预测要采用特定路径并且路径不正确,则执行清除。根据一个方面,如果不正确的路径包括预测地执行改变权限级和/或其他操作状态的指令,则该权限级和/或其他MSR状态也需要被改变,如在此所述。
参考图11来描述与清除相关联的逻辑的一个实施例。初始,指令地址寄存器(IAR)被设置为从指令序列单元(ISU)中的全局完成表格(GCT)逻辑获取的一个或多个地址,步骤1100。另外,MSR位被设置为与全局完成表格相关联的非推测MSR指示符的值,步骤1102。
而且,在来自新的指令地址寄存器并且具有新的MSR位的地址处启动获取,步骤1104。基于该新的状态(例如,新的MSR位)来处理在新的地址处获取的指令。这结束了清除逻辑的一个实施例。
在此详细描述了检测是否要执行所选择的指令的预测能力。基于确定要执行所选择的指令,进行关于所选择的指令的预测地址的预测。然后,在执行所选择的指令之前,获取和/或解码在该预测地址处开始的指令。这增强了在处理器内的性能。
在一个实施例中,预测能力管理作为推测状态的在指令获取和/或解码单元中的MSR状态。然而,在指令序列单元中的主拷贝仍然被非推测地更新(在NTC,即,当指令是非推测的并且接近完成和在更新非推测状态的当前指令之前没有指令时)。在一个实施例中,预测器可以选用地包含在指令获取和/获取解码单元中跟踪并且推测地更新的新MSR位。如果存在清除,则与清除地址相结合地发送MSR位。
虽然如上讨论的一个或多个示例描述了由操作系统发出的系统调用,但是一个或多个方面可应用于由管理程序发出的系统调用等。管理程序在一个实施例中具有比操作系统和应用程序二者高的权限级。对于管理程序,系统调用返回通常返回到操作系统。在此所述的一个或多个方面也可以与在超过和除了应用、操作系统和管理程序级的其他权限级处操作的程序相结合地使用。
虽然已经相对于由Power ISA使用的指令描述了一个或多个方面,但是在其他实施例中,可以使用其他架构的指令。例如,可以使用具有另一个寄存器跟踪处理器状态和权限级(诸如,例如,根据用于系统z的z/Architecture的PSW(程序状态字)寄存器)的根据另一个系统调用指令(诸如,例如,根据用于系统z的z/Architecture的SVC指令)的系统调用;并且/或者,根据由微处理器实现的指令集架构的其他指令、寄存器和设施。
所属技术领域的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
现在参考图12,在一个例子中,计算机程序产品1200包括,例如,一个或多个非易失性计算机可读存储介质1202,在其上存储有计算机可读的程序代码装置或逻辑1204,以提供并方便本发明的一个或多个方面。
体现在计算机可读介质上的程序代码可以用任何适当的介质传输,所述介质包括但不限于:无线、有线、光缆、RF等,或上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
本文中将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instruction means)的制造品(manufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
除了上述,本发明的一个或多个方面可由服务提供商提供、许诺(offer)、部署、管理、服务等,该服务提供商提供用户环境的管理。例如,服务提供商可创建、维持、支持等计算机代码和/或计算机基础设施,其为一个或多个用户执行本发明的一个或多个方面。反过来,服务提供商可例如根据预订和/或费用协议从用户接受付费。额外地或可替换地,服务提供商可从向一个或多个第三方销售广告内容接受付费。
在本发明的一个方面,可部署用于执行本发明的一个或多个方面的应用。作为一个例子,部署应用包括提供计算机基础设施,其可操作以执行本发明的一个或多个方面。
作为本发明的又一个方面,可部署计算基础设施,其包括将计算机可读代码集成到计算机系统,其中与计算系统结合的代码能够执行本发明的一个或多个方面。
作为本发明的再一个方面,可提供用于集成计算基础设施包括将计算机可读码集成到计算机系统的过程。计算机系统包括计算机可读介质,其中计算机介质包括本发明的一个或多个方面。与计算机系统结合的代码能够执行本发明的一个或多个方面。
虽然以上描述了各个实施例,但是这些仅是示例。例如,其他机构的处理环境可以合并和使用一个或多个方面。另外,包括但是不限于可以改变权限级和/或其他操作状态所以的其他指令的其他指令可以采用预测能力的一个或多个方面。而且,可以使用其他类型的预测器数据结构,并且/或者可以使用另外的、更少的或不同的信息。另外,可以使用除了MSR之外的结构,诸如程序状态字(PSW)或其他类型的结构。许多变化是可能的。
而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为例子,可使用适于存储和/或执行程序代码的数据处理系统,其包括至少两个通过系统总线直接或间接耦合到存储元件的处理器。存储器元件包括,例如,在程序代码的实际执行期间使用的本地存储器、大容量存储器以及高速缓冲存储器,其提供至少一些程序代码的临时存储,以便减少在执行期间必须从大容量存储器取回代码的次数。
输入/输出或I/O设备(包括但不限于键盘、显示器、指点设备、DASD、磁带、CD、DVD、拇指驱动器(thumb drive)以及其他的存储介质等)可直接或通过介于其间的I/O控制器被耦合到系统。网络适配器也可被耦合到系统以使得数据处理系统能够通过介于其间的私有或公共网络而耦合到其他的数据处理系统或远程打印机或存储设备。调制解调器、电缆调制解调器和以太网卡仅是一些可获得的网络适配器类型。
参考图13,其描述了实施本发明的一个或多个方面的主机计算机系统5000的代表性组件。代表性主机计算机5000包括与计算机存储器(即,中央存储器)5002通信的一个或多个CPU5001,以及到存储介质设备5011和网络5010的I/O接口,以用于与其他计算机或SAN等通信。CPU5001符合具有架构指令集和架构功能的架构。CPU5001可具有动态地址转换(DAT)5003,其用于将程序地址(虚拟地址)转变为存储器的真实地址。DAT典型地包括用于高速缓存转换的转换后备缓冲器(TLB)5007,这样稍后对计算机存储器5002块的访问不需要地址转换的延迟。典型地,高速缓存5009被使用在计算机存储器5002和处理器5001之间。高速缓存5009可以是分层的,具有可被多于一个的CPU获得的大高速缓存,以及大高速缓存和每个CPU之间的较小、较快(较低级)的高速缓存。在一些实施方式中,较低级的高速缓存被拆分以为指令获取和数据访问提供单独的低级高速缓存。在一个实施例中,由指令获取单元5004经由高速缓存5009从存储器5002获取指令。指令在指令解码单元5006中被解码,且(在一些实施例中与其他指令一起)被发送到一个或多个指令执行单元5008。典型地,使用若干执行单元5008,例如算术执行单元、浮点执行单元和分支指令执行单元。指令被执行单元执行,如需要,从指令指定的寄存器或存储器访问操作数。如果将从存储器5002访问(加载或存储)操作数,加载/存储单元5005典型地在被执行的指令的控制下处理该访问。指令可在硬件电路或内部微代码(固件)中或其组合中被执行。
需注意的是,计算机系统包括本地(或主)存储器中的信息,以及寻址、保护以及引用和改变记录。寻址的一些方面包括地址格式、地址空间的概念、地址的各种类型和其中一种类型的地址被转换为另一种类型的地址的方式。一些主存储器包括永久分配的存储位置。主存储器向系统提供直接可被寻址的快速访问的数据存储。数据和程序在可被处理之前都将(从输入设备)被加载到主存储器。
主存储器可包括一个或多个更小、更快速访问的缓冲存储器,有时候被称为高速缓存。高速缓存典型地与CPU或I/O处理器物理地关联。物理结构以及不同存储介质的使用的效果,除了在性能上,通常不会被程序观察到。
可维护用于指令和数据操作数的单独的高速缓存。高速缓存中的信息可被维护为相邻的字节,所述字节位于被称为高速缓存块或高速缓存线(或简称为线)的整数界限上。模型可提供EXTRACT CACHE ATTRIBUTE(提取高速缓存属性)指令,其返回高速缓存线的字节大小。模型也可提供PREFETCH DATA(预取数据)和PREFETCH DATA RELATIVE LONG(预取较长数据)指令,其实现存储到数据或指令高速缓存中的预取,或数据从高速缓存的释放。
存储器被视为位的长水平串。对于大部分操作来说,以从左到右的顺序进行对存储器的访问。位串被细分为八个位的单位。八位单位被称为字节,其是所有信息格式的基本构件。存储器中的每个字节位置由唯一的非负整数标识,该非负整数是该字节位置的地址,或简称为字节地址。相邻的字节位置具有连续的地址,在左边从0开始且以从左到右的顺序进行。地址是无符号二进制整数,且是24、31或64位。
信息一次一个字节或一组字节地在存储器和CPU或通道子系统之间传递。除非另有指定,例如在中,存储器中的一组字节由该组的最左边的字节寻址。组中的字节的数量可由将被执行的操作暗示或显式地指定。当在CPU操作中使用时,一组字节被称为字段。在字节的每个组内,例如在中,位以从左到右的顺序被编号。在中,最左边的位有时候被称为“高阶”位且最右边的位被称为“低阶”位。但是,位数不是存储器地址。仅字节可被寻址。为了操作存储器中的字节的单个位,访问整个字节。字节上的位从左到右被编号为0到7(例如在中)。对于24位地址,地址中的位被编号为8-31或40-63,对于31位地址,编号为1-31或33-63,对于64位地址,编号为0-63。在多个字节的任何其他的固定长度的格式中,构成格式的位从0开始被连续编号。为了错误检测,且优选地为了校正,一个或多个校验位可与每一个字节或一组字节一起被传递。这样的校验位由机器自动生成且不能被程序直接控制。存储容量以字节的数量来表示。当存储器操作数字段的长度由指令的操作码暗示时,字段被称为具有固定长度,其可以是一个、两个、四个、八个或十六个字节。可为某些指令暗示更大的字段。当存储器操作数字段的长度没有被暗示,而是被显式地表示时,该字段被称为具有可变长度。可变长度的操作数可以一个字节的增量(或者对于一些指令,以两个字节倍数或其他倍数)在长度上可变。当信息被放在存储器中时,仅替换被包括在指定的字段中的那些字节位置的内容,即使到存储器的物理路径的宽度可能大于正被存储的字段的长度。
某些信息单元位于存储器中的整数界限上。对于信息单元,当其存储器地址是以字节表示的单元长度的倍数时,界限被称为是整数的。特殊的名称被给予整数界限上的2、4、8和16字节的字段。半字是两字节边界上的一组两个连续的字节,且是指令的基本构件。字是四字节边界上的一组四个连续的字节。双字是八字节边界上一组八个连续的字节。四倍长字(quadword)是16字节边界上的一组16个连续的字节。当存储器地址指定半字、字、双字和四倍长字时,地址的二进制表示分别包括一个、两个、三个或四个最右边的零位。指令将位于二字节整数边界上。大多数指令的存储器操作数不具有界限对准要求。
在为指令和数据操作数实现单独的高速缓存的设备上,如果程序在高速缓存线中存储且指令被随后从该高速缓存线获取,可经历显著的延迟,不管该存储是否改变随后被获取的指令。
在一个实施例中,本发明可被软件(有时候被称为许可的内部代码、固件、微代码、毫代码、微微代码(pico-code)等,其任何一个都将符合本发明)实施。参考图13,体现本发明的软件程序代码可典型地由主系统5000的处理器5001从长期存储介质设备5011(诸如CD-ROM驱动器、磁带驱动或硬盘驱动器)访问。软件程序代码可体现在与数据处理系统一起使用的各种已知介质(诸如软磁盘、硬盘驱动或CD-ROM)中的任何一个上。代码可在这样的介质上被分发,或可从一个计算机系统的计算机存储器5002或存储设备通过网络5010被分发给其他计算机系统的用户,以由这样的其他系统的用户使用。
软件程序代码包括操作系统,其控制各种计算机组件和一个或多个应用程序的功能和交互。程序代码通常可从存储介质设备5011调页到相对更高速的计算机存储器5002,在此它对于处理器5001是可用的。用于在存储器中、物理介质上体现软件程序代码和/或经由网络分发软件代码的技术和方法是熟知的,且不会在此被进一步讨论。当程序代码被创建并存储在有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、DVD、磁带等)上时,其经常被称为“计算机程序产品”。计算机程序产品介质典型地可由优选地位于计算机系统中的处理电路读取以由处理电路执行。
图14示出了可在其中实施本发明的代表性工作站或服务器硬件系统。图14的系统5020包括代表性基本计算机系统(base computer system)5021,诸如个人计算机、工作站或服务器,包括可选的外围设备。根据已知技术,基本计算机系统5021包括一个或多个处理器5026以及被用于连接并使能处理器5026和系统5021的其他组件之间的通信的总线。总线将处理器5026连接到存储器5025以及可包括例如硬盘驱动器(例如,包括磁介质、CD、DVD和闪存中的任何一个)或磁带驱动器的长期存储器5027。系统5021也可包括用户接口适配器,其经由总线将微处理器5026连接到一个或多个接口设备,诸如键盘5024、鼠标5023、打印机/扫描仪5030和/或其他接口设备,其可以是任何用户接口设备,诸如触摸敏感屏、数字化输入垫(digitized entrypad)等。总线也可经由显示适配器将诸如LCD屏幕或监视器的显示设备5022连接到微处理器5026。
系统5021可通过能与网络5029通信5028的网络适配器与其他计算机或计算机网络通信。示例性网络适配器是通信通道、令牌环网、以太网或调制解调器。或者,系统5021可使用诸如CDPD(蜂窝数字分组数据)卡的无线接口来通信。系统5021可与局域网(LAN)或广域网(WAN)中的这样的其他计算机关联,或系统5021可以是与另一个计算机的客户机/服务器安排中的客户机等。所有这些配置以及合适的通信硬件和软件在本领域中是已知的。
图15示出了其中可实施本发明的数据处理网络5040。数据处理网络5040可包括多个单独的网络,诸如无线网和有线网,其每个可包括多个单独的工作站5041、5042、5043、5044。此外,本领域技术人员将理解,可包括一个或多个LAN,其中LAN可包括多个耦合到主处理机的智能工作站。
仍然参考图15,网络也可包括大型计算机或服务器,诸如网关计算机(客户机服务器5046)或应用服务器(远程服务器5048,其可访问数据储存库,且也可直接从工作站5045被访问)。网关计算机5046用作到每个单独网络的进入点。当将一个联网协议连接到另一个时,需要网关。网关5046可通过通信链接优选地耦合到另一个网络(例如因特网5047)。也可使用通信链接将网关5046直接耦合到一个或多个工作站5041、5042、5043、5044。可以利用可从国际商业机器公司获得的IBM eServerTMSystem服务器来实现网关计算机。
同时参考图14和15,可体现本发明的软件编程代码可被系统5020的处理器5026从诸如CD-ROM驱动器或硬盘驱动器的长期存储介质5027访问。软件编程代码可被体现在与数据处理系统一起使用的各种已知介质(诸如软盘、硬盘驱动器或CD-ROM)中的任一个上。代码可在这样的介质上被分发,或从一个计算机系统的存储器或存储设备通过网络被分发到其他计算机系统的用户5050、5051,以供这样的其他系统的用户使用。
或者,编程代码可体现在存储器5025中,且由处理器5026使用处理器总线访问。这样的编程代码包括操作系统,其控制各种计算机组件和一个或多个应用程序5032的功能和交互。程序代码通常从存储介质5027调页到高速存储器5025,在此它可用于由处理器5026进行处理。用于在存储器中、在物理介质上体现软件编程代码和/或经由网络分发软件代码的技术和方法是公知的,不会在此进一步讨论。程序代码,当其被创建且在有形介质(包括但不限于电子存储模块(RAM)、闪存、光盘(CD)、DVD、磁带等)上存储时,通常被称为“计算机程序产品”。计算机程序产品介质典型地可以被优选地位于计算机系统中的处理电路读取以由处理电路执行。
最容易被处理器使用的高速缓存(通常比处理器的其他高速缓存更快更小)是最低级(L1或级别1)高速缓存,且主存储(主存储器)是最高级高速缓存(如果有三个级别的话是L3)。最低级高速缓存经常被分为保持将被执行的机器指令的指令缓存(I-高速缓存),和保持数据操作数的数据高速缓存(D-高速缓存)。
参考图16,为处理器5026示出了示例性处理器实施例。典型地,使用一个或多个级别的高速缓存5053来缓冲存储器块,以便改善处理器性能。高速缓存5053是高速缓冲器,其保持很可能被使用的存储器数据的高速缓存线。典型的高速缓存线是64、128或256字节的存储器数据。通常使用单独的高速缓存以用于缓存指令而不是缓存数据。高速缓存一致性(存储器和高速缓存中的线的副本的同步)通常由本领域中熟知的各种“窥探”算法提供。处理器系统的主存储器5025通常被称为高速缓存。在具有4个级别的高速缓存5053的处理器系统中,主存储器5025有时候被称为级别5(L5)高速缓存,因为它典型地更快,且仅保持可被计算机系统使用的非易失性存储器(DASD、磁带等)的一部分。主存储器5025可“高速缓存”由操作系统向主存储器5025调页入或从其调页出的数据页。
程序计数器(指令计数器)5061保持跟踪将被执行的当前指令的地址。处理器中的程序计数器是64位的,且可被截短为31或24位以支持先前的寻址界限。程序计数器典型地体现在计算机的PSW(程序状态字)中,这样它可在上下文转换中持续。因此,具有程序计数器值的进行中的程序可被例如操作系统中断(从程序环境到操作系统环境的上下文转换)。当程序不活动时,程序的PSW维持程序计数器值,且在操作系统执行时,操作系统的(PSW中的)程序计数器被使用。典型地,程序计数器以等于当前指令的字节数的量增量。RISC(精简指令集计算)指令典型地是固定长度,而CISC(复杂指令集计算)指令典型地是可变长度。IBM的指令是具有长度为2、4或6字节的CISC指令。程序计数器5061被例如上下文转换操作或分支指令的分支采取操作修改。在上下文转换操作中,当前的程序计数器值与关于正被执行的程序的其他状态信息(诸如条件码)一起被保存在程序状态字中,且新程序计数器值被载入并指向将被执行的新程序模块的指令。执行分支采取操作,以通过将分支指令的结果加载到程序计数器5061中而允许程序进行决定或在程序内循环。
典型地,使用指令获取单元5055代表处理器5026获取指令。获取单元可获取“下一序列指令”、分支采取指令的目标指令或上下文转换后的程序的第一指令。现在的指令获取单元通常使用预取技术基于被预取的指令将被使用的可能性来推测性地预取指令。例如,获取单元可获取16字节的指令,其包括下一顺序指令以及进一步的顺序指令的额外字节。
获取的指令随后被处理器5026执行。在一实施例中,获取的指令被传递给获取单元的分派单元5056。分派单元解码指令并将关于解码的指令的信息转送给合适的单元5057、5058、5060。执行单元5057将典型地从指令获取单元5055接收关于解码的算术指令的信息,并将根据指令的操作码对操作数执行算术操作。优选地从存储器5025、架构寄存器5059或从正被执行的指令的立即字段(immediate field)向执行单元5057提供操作数。执行的结果,当被存储时,被存储在存储器5025、寄存器5059或其他机器硬件(诸如控制寄存器、PSW寄存器等)中。
处理器5026典型地具有一个或多个用于执行指令的功能的单元5057、5058、5060。参考图17A,执行单元5057可通过接口逻辑5071与架构通用寄存器5059、解码/分派单元5056、加载存储单元5060和其他5065处理器单元通信。执行单元5057可使用几个寄存器电路5067、5068、5069来保持算术逻辑单元(ALU)5066将操作的信息。ALU执行诸如加减乘除的算术操作,以及诸如与、或以及异或(XOR)、旋转和移位的逻辑运算。优选地,ALU支持依赖于设计的专门操作。其他电路可提供其他架构工具5072,例如包括条件码和恢复支持逻辑。典型地,ALU操作的结果被保持在输出寄存电路5070中,该输出寄存器电路可将结果转送到多种其他处理功能。有许多处理器单元安排,本说明书仅旨在提供对一个实施例的代表性理解。
例如,ADD指令将在具有算术和逻辑功能的执行单元5057中被执行,而例如浮点指令将在具有专用浮点能力的浮点执行中被执行。优选地,执行单元通过在操作数上执行操作码定义的功能在由指令标识的操作数上操作。例如,ADD指令可被执行单元5057在由指令的寄存器字段标识的两个寄存器5059中发现的操作数上执行。
执行单元5057对两个操作数执行算术加法,并在第三操作数中存储结果,其中第三操作数可以是第三寄存器或两个源寄存器中的一个。执行单元优选地利用算术逻辑单元(ALU)5066,其能执行多种逻辑功能,诸如移位、旋转、和、或、异或,以及多种代数函数,包括加减乘除中的任何一个。有些ALU5066被设计为用于标量运算,有些用于浮点。根据架构,数据可以是大端(big endien)(其中最低有效字节位于最高字节地址)或小端(littleendien)(其中最低有效字节位于最低字节地址)。IBM是大端。根据架构,带符号字段可以是符号和幅度、1的补码或2的补码。2的补码数是有利的,其在于ALU不需要设计减法能力,因为不管是2的补码中的负值还是正值,都仅要求ALU中的加法。数字通常以速记描述,其中12位的字段定义了4096字节块的地址,且通常被描述为例如4Kbyte(千字节)块。
参考图17B,用于执行分支指令的分支指令信息典型地被发送到分支单元5058,该分支单元经常使用诸如分支历史表5082的分支预测算法,在其他条件运算完成前预测分支结果。在条件运算完成前,当前分支指令的目标将被获取并推测性地执行。当条件运算完成时,基于条件运算的条件和推测的结果,推测性执行的分支指令或被完成或被丢弃。典型的分支指令可测试条件码,以及如果条件码满足分支指令的分支要求,分支到目标地址,分支地址可基于若干数被计算,所述数包括例如在寄存器字段或是指令的立即字段中找到的数。分支单元5058可利用具有多个输入寄存器电路5075、5076、5077和一个输出寄存器电路5080的ALU5074。分支单元5058可与例如通用寄存器5059、解码分派单元5056或其他电路5073通信。
一组指令的执行可由于多个原因中断,所述原因包括例如由操作系统发起的上下文转换、引起上下文转换的程序异常或错误、引起上下文转换的I/O中断信号或多个程序(在多线程环境中)的多线程活动。优选地,上下文转换动作保存关于当前执行的程序的状态信息,且随后加载关于正被调用的另一个程序的状态信息。状态信息可被存储在例如硬件寄存器或存储器中。状态信息优选地包括指向将被执行的下一个指令的程序计数器值、条件码、存储器转换信息和架构寄存器内容。上下文转换活动可被硬件电路、应用程序、操作系统程序或固件代码(微代码、微微代码或许可内部码(LIC))单独地或其组合实现。
处理器根据指令定义的方法而访问操作数。指令可使用指令的一部分的值提供立即操作数,可提供一个或多个寄存器字段,其显式地指向通用寄存器或专用寄存器(例如浮点寄存器)。指令可利用由操作码字段确定的暗示的寄存器作为操作数。指令可利用用于操作数的存储器位置。可由寄存器、立即字段或寄存器和立即字段的组合提供操作数的存储器位置,如由长位移工具(facility)所例示的,其中该指令定义了基寄存器、索引寄存器和立即字段(位移字段),它们加到一起,以提供例如存储器中的操作数的地址。除非另外指明,此处的位置典型地意味着主存储器(主存储设备)中的位置。
参考图17C,处理器使用加载/存储单元5060访问存储器。加载/存储单元5060可以通过获取存储器5053中的目标操作数的地址并将操作数加载到寄存器5059或其他存储器5053位置中,来执行加载操作,或可以通过获取存储器5053中的目标操作数的地址并将从寄存器5059或另一个存储器5053位置获得的数据存储在存储器5053中的目标操作数位置,来执行存储操作。加载/存储单元5060可以是推测性的,且可以以相对于指令顺序来说无序的顺序访问存储器,但是加载/存储单元5060将向程序维持指令按顺序执行的外观。加载/存储单元5060可与通用寄存器5059、解密/分派单元5056、高速缓存/存储器接口5053或其他元件5083通信,且包括各种寄存器电路、ALU5085和控制逻辑5090以计算存储器地址并提供流水线顺序以使操作保持次序。一些操作可不按顺序,但加载/存储单元提供功能以使不按顺序执行的操作对程序看起来如已按顺序执行一样,如本领域所熟知的。
优选地,应用程序“看到的”地址通常被称为虚拟地址。虚拟地址有时候被称为“逻辑地址”和“有效地址”。这些虚拟地址之所以虚拟,在于它们由多种动态地址转换(DAT)技术中的一种重定向到物理存储器位置,所述动态地址转换技术包括但不限于简单地给用偏移值给虚拟地址加前缀、经由一个或多个转换表转换虚拟地址,所述转换表优选地包括至少一个段表和一个页表(单独地或组合地),优选地,段表具有指向页表的项。在中,提供转换分级结构,包括区域第一表、区域第二表、区域第三表、段表和可选的页表。地址转换的性能通常通过利用转换后备缓冲器(TLB)被改善,该转换后备缓冲器包括将虚拟地址映射到相关的物理存储位置的项。当DAT使用转换表转换虚拟地址时,创建项。于是,虚拟地址的随后使用可利用快的TLB的项,而不是慢的顺序转换表访问。TLB内容可由包括LRU(最少最近使用)的多个替换算法来管理。
在处理器是多处理器系统的处理器的情况下,每个处理器具有保持共享资源的责任,所述共享资源诸如I/O、高速缓存、TLB和存储器,它们互锁以实现一致性。典型地,“窥探”技术将被用于维持高速缓存一致性。在窥探环境中,每个高速缓存线可被标记为正处于共享状态、独占状态、改变状态、无效状态等中的一个,以便有助于共享。
I/O单元5054(图16)向处理器提供用于附加到例如包括磁带、盘、打印机、显示器和网络的外围设备的装置。I/O单元通常由软件驱动器向计算机程序呈现。在诸如来自的System的大型计算机中,通道适配器和开放系统适配器是提供操作系统和外围设备之间的通信的大型计算机的I/O单元。
而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为例子,环境可包括仿真器(例如,软件或其他仿真机制),其中特定架构(包括例如指令执行、诸如地址转换的架构功能、以及架构寄存器)或其子集被仿真(例如,在具有处理器和存储器的本机计算机系统中)。在这样的环境中,仿真器的一个或多个仿真功能可实施本发明的一个或多个方面,即使执行仿真器的计算机可具有与正被仿真的能力不同的架构。作为一个例子,在仿真模式中,解码正被仿真的特定指令或操作,且建立合适的仿真功能以实施单个指令或操作。
在仿真环境中,主计算机包括例如存储器以存储指令和数据;指令获取单元以从存储器获取指令,且可选地,提供用于获取的指令的本地缓冲;指令解码单元以接收获取的指令并确定已被获取的指令的类型;以及指令执行单元以执行该指令。执行可包括将数据从存储器加载到寄存器;从寄存器将数据存储回存储器;或执行如由解码单元确定的某些类型的算术或逻辑运算。在一个例子中,每个单元在软件中实现。例如,被所述单元执行的操作被实现为仿真器软件中的一个或多个子例程。
更具体地,在大型计算机中,程序员(通常是如今的“C”程序员)一般通过编译器应用使用架构机器指令。存储在存储介质中的这些指令可以在服务器中本机地执行,或在执行其他架构的机器中执行。它们可在现有的和未来的大型计算机服务器以及的其他机器(例如,Power Systems服务器和System服务器)中被仿真。它们可在使用由AMDTM等制造的硬件的各种机器上运行Linux的机器中被执行。除了在下的该硬件上执行,Linux也可被用于这样的机器,其使用由Hercules,UMX或FSI(Fundamental Software,Inc)(其中一般地执行是处于仿真模式中)提供的仿真。在仿真模式中,仿真软件由本机处理器执行以仿真被仿真处理器的架构。
本机处理器典型地执行仿真软件,其包括固件或本机操作系统,以执行被仿真处理器的仿真程序。仿真软件负责获取并执行被仿真处理器架构的指令。仿真软件维护仿真的程序计数器以保持跟踪指令界限。仿真软件可一次获取一个或多个仿真的机器指令,并将所述一个或多个仿真的机器指令转换为对应的本机机器指令组,以由本机处理器执行。这些转换的指令可被高速缓存,这样可完成更快的转换。仿真软件将维持被仿真的处理器架构的架构规则以保证为被仿真处理器编写的操作系统和应用正确操作。而且,仿真软件将提供由被仿真的处理器架构确定的资源,包括但不限于控制寄存器、通用寄存器、浮点寄存器、例如包括段表和页表的动态地址转换功能、中断机制、上下文转换机制、日中时间(TOD)时钟和到I/O子系统的架构接口,这样被设计为在被仿真处理器上运行的操作系统或应用程序可在具有仿真软件的本机处理器上运行。
解码正被仿真的特定指令,且调用子例程以执行该单个指令的功能。仿真被仿真处理器的功能的仿真软件功能例如在“C”子例程或驱动器中实现,或由提供用于特定硬件的驱动器的其他方法实现,如本领域技术人员在理解优选实施例的描述后将理解的。包括但不限于Beausoleil等人的标题为“Multiprocessor for Hardware Emulation”的美国专利证书号5,551,013;以及Scalzi等人的标题为“Preprocessing of Stored Target Routines for EmulatingIncompatible Instructions on a Target Processor”的美国专利证书号6,009,261;以及Davidian等人的标题为“Decoding Guest Instruction to Directly AccessEmulation Routines that Emulate the Guest Instructions”的美国专利证书号,5,574,873;以及Gorishek等人的标题为“Symmetrical Multiprocessing Bus andChipset Used for Coprocessor Support Allowing Non-Native Code to Run in aSystem”的美国专利证书号6,308,255;以及Lethin等人的标题为“DynamicOptimizing Object Code Translator for Architecture Emulation and DynamicOptimizing Object Code Translation Method”的美国专利证书号6,463,582,;以及Eric Traut的标题为“Method for Emulating Guest Instructions on a HostComputer Through Dynamic Recompilation of Host Instructions”的美国专利证书号5,790,825(上述这些在这里全文引用作为参考);以及许多其他专利的各种软件和硬件仿真专利示出各种已知的方式来实现针对可为本领域技术人员获得的目标机器对为不同机器进行架构设计的指令格式的仿真。
在图18中,提供了仿真主计算机系统5092的例子,其仿真主架构的主计算机系统5000’。在仿真主计算机系统5092中,主处理器(CPU)5091是仿真主处理器(或虚拟主处理器),并包括具有与主计算机5000’的处理器5091不同的本机指令集架构的仿真处理器5093。仿真主计算机系统5092具有可被仿真处理器5093访问的存储器5094。在示例性实施例中,存储器5094被分区为主计算机存储器5096部分和仿真例程5097部分。根据主计算机架构,主计算机存储器5096对于仿真主计算机5092的程序来说是可用的。仿真处理器5093执行与被仿真处理器5091不同架构的架构指令集的本机指令(即来自仿真程序处理器5097的本机指令),且可通过使用从顺序和访问/解码例程获得的一个或多个指令从主计算机存储器5096中的程序访问用于执行的主机指令,所述顺序和访问/解码例程可解码访问的主机指令,以确定用于仿真被访问的主机指令的功能的本机指令执行例程。被定义用于主计算机系统5000’架构的其他工具可被架构工具例程仿真,所述架构工具例程包括诸如通用寄存器、控制寄存器、动态地址转换和I/O子系统支持和处理器高速缓存等工具。仿真例程也可利用在仿真处理器5093中可获得的功能(诸如通用寄存器和虚拟地址的动态转换)以改善仿真例程的性能。也可提供专用硬件和卸载引擎以辅助处理器5093来仿真主计算机5000’的功能。
在此使用的术语仅是为了描述特定实施例,且不旨在限制本发明。如在此使用的,单数形式“一”、“一个”和“该”也旨在包括复数形式,除非上下文另外清楚地指明。还将理解,当在说明书中使用时,术语“包括”和/或“包含”指明存在所述的特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其他特征、整体、步骤、操作、元件和/或组件。
所附权利要求书中的所有装置或步骤加功能元件的相应结构、材料、操作以及等价物,如有的话,旨在包括用于结合如特别要求保护的其他所要求保护的元件来执行所述功能的任何结构、材料或操作。呈现本发明的说明是为了示出和描述的作用,但不是穷尽性的或将本发明限制于所公开的形式。许多修改和变化对本领域普通技术人员来说是明显的,且不脱离本发明的范围和精神。选择和描述实施例是为了最佳地解释本发明的原理和实际应用,并使得本领域普通技术人员能针对适于考虑的特定用途的具有各种修改的各种实施例理解本发明。
Claims (17)
1.一种促进在处理环境中的处理的方法,所述方法包括:
预测要在流水线化处理器中执行所选择的指令,所述流水线化从处理器具有包括执行阶段的多个处理阶段,并且,所述所选择的指令具有第一权限级,并且在所述流水线化处理器中执行的一个或多个其他指令具有与所述第一权限级不同的第二权限级;
基于预测要执行所述所选择的指令,预测所述所选择的指令的入口地址和与其相关联的操作状态,所述入口地址指示基于所述所选择的指令要获取指令的位置;
基于预测所述入口地址,在所述所选择的指令到达所述执行阶段之前在所述入口地址处获取所述指令;以及
基于所述预测操作状态来启动所述获取的指令的解码。
2.根据权利要求1所述的方法,其中,所述方法进一步包括执行所述所选择的指令,其中,所述执行包括:
基于执行所述所选择的指令,更新所述所选择的指令的非推测操作状态;
将所述非推测操作状态与所述预测操作状态作比较;以及
基于用于指示差别的所述比较,执行恢复。
3.根据权利要求2所述的方法,其中,所述执行恢复包括:
执行所述流水线化处理器的清除,执行所述清除提供新的获取地址和新的推测操作状态;
基于执行所述清除,在所述新的获取地址处启动指令的获取;以及
基于所述新的推测操作状态来处理在所述新的获取地址处获取的所述指令。
4.根据权利要求1所述的方法,其中,所述方法进一步包括将用于所述所选择的指令的返回地址置于在数据结构内的入口中,所述返回地址指示处理要返回到的地址。
5.根据权利要求4所述的方法,其中,所述方法进一步包括:在所述入口内包括所述返回地址的操作状态和所述入口的建立者的指示符中的至少一个。
6.根据权利要求1所述的方法,其中,所述操作状态包括用于在所述入口地址处的指令的预测权限级,并且其中,所述方法进一步包括:在耦合到所述处理环境的解码单元的数据结构中存储所述预测操作状态,所述解码单元用于基于所述预测操作状态解码所述获取的指令。
7.根据权利要求1所述的方法,其中,所述预测所述入口地址包括:基于固定值、在寄存器中的值或高速缓存值之一预测所述入口地址。
8.根据权利要求1所述的方法,其中,所述预测包括使用分支预测逻辑预测要执行所述所选择的指令。
9.根据权利要求1所述的方法,其中,所述预测所述操作状态包括预测在所述入口地址处的所述指令的权限级,所述预测所述权限级包括基于与所述所选择的指令相关联的一个或多个参数预测所述权限级。
10.根据权利要求1所述的方法,其中,所述所选择的指令包括系统调用指令、管理程序调用指令或异步中断之一。
11.一种用于促进在处理环境中的处理的计算机系统,所述计算机系统包括:
存储器;以及
处理器,其与所述存储器进行通信,其中,所述计算机系统被配置为执行一种方法,所述方法包括:
预测要在流水线化处理器中执行所选择的指令,所述流水线化从处理器具有包括执行阶段的多个处理阶段,并且,所述所选择的指令具有第一权限级,并且在所述流水线化处理器中执行的一个或多个其他指令具有与所述第一权限级不同的第二权限级;
基于预测要执行所述所选择的指令,预测所述所选择的指令的入口地址和与其相关联的操作状态,所述入口地址指示基于所述所选择的指令要在其获取指令的位置;
基于预测所述入口地址,在所述所选择的指令到达所述执行阶段之前在所述入口地址处获取所述指令;以及
基于所述预测操作状态来启动所述获取的指令的解码。
12.根据权利要求11所述的计算机系统,其中,所述方法进一步包括执行所述所选择的指令,其中,所述执行包括:
基于执行所述所选择的指令来更新所述所选择的指令的非推测操作状态;
将所述非推测操作状态与所述预测操作状态作比较;以及
基于用于指示差别的所述比较,执行恢复。
13.根据权利要求12所述的计算机系统,其中,所述执行恢复包括:
执行所述流水线化处理器的清除,执行所述清除提供新的获取地址和新的推测操作状态;
基于执行所述清除,在所述新的获取地址处启动指令的获取;以及
基于所述新的推测操作状态来处理在所述新的获取地址处获取的所述指令。
14.根据权利要求11所述的计算机系统,其中,所述方法进一步包括将用于所述所选择的指令的返回地址置于在数据结构内的入口中,所述返回地址指示处理要返回到的地址。
15.根据权利要求14所述的计算机系统,其中,所述方法进一步包括:在所述入口内包括所述返回地址的操作状态和所述入口的建立者的指示符中的至少一个。
16.根据权利要求11所述的计算机系统,其中,所述操作状态包括在所述入口地址处的所述指令的预测的权限级,并且其中,所述方法进一步包括:在耦合到所述处理环境的解码单元的数据结构中存储所述预测操作状态,所述解码单元用于基于所述预测操作状态解码所述获取的指令。
17.根据权利要求11所述的计算机系统,其中,所述所选择的指令包括系统调用指令、管理程序调用指令或异步中断之一。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US13/931,656 US9619230B2 (en) | 2013-06-28 | 2013-06-28 | Predictive fetching and decoding for selected instructions |
US13/931,656 | 2013-06-28 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104252586A true CN104252586A (zh) | 2014-12-31 |
CN104252586B CN104252586B (zh) | 2017-10-13 |
Family
ID=52017497
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410301454.2A Active CN104252586B (zh) | 2013-06-28 | 2014-06-27 | 促进在处理环境中的处理的方法和计算机系统 |
Country Status (3)
Country | Link |
---|---|
US (3) | US9619230B2 (zh) |
CN (1) | CN104252586B (zh) |
DE (1) | DE102014108785A1 (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109960607A (zh) * | 2017-12-22 | 2019-07-02 | 龙芯中科技术有限公司 | 预测栈的错误恢复方法、装置及存储介质 |
CN111095201A (zh) * | 2017-09-19 | 2020-05-01 | 国际商业机器公司 | 响应于到子例程的分支而预测内容表指针值 |
CN111382429A (zh) * | 2018-12-27 | 2020-07-07 | 华为技术有限公司 | 指令的执行方法、装置及存储介质 |
CN112379930A (zh) * | 2015-01-07 | 2021-02-19 | 美光科技公司 | 产生并执行控制流 |
Families Citing this family (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9513924B2 (en) * | 2013-06-28 | 2016-12-06 | Globalfoundries Inc. | Predictor data structure for use in pipelined processing |
US9619230B2 (en) * | 2013-06-28 | 2017-04-11 | International Business Machines Corporation | Predictive fetching and decoding for selected instructions |
US9361144B2 (en) * | 2013-06-28 | 2016-06-07 | Globalfoundries Inc. | Predictive fetching and decoding for selected return instructions |
US11544214B2 (en) * | 2015-02-02 | 2023-01-03 | Optimum Semiconductor Technologies, Inc. | Monolithic vector processor configured to operate on variable length vectors using a vector length register |
GB2540942B (en) * | 2015-07-31 | 2019-01-23 | Advanced Risc Mach Ltd | Contingent load suppression |
US10552152B2 (en) * | 2016-05-27 | 2020-02-04 | Arm Limited | Method and apparatus for scheduling in a non-uniform compute device |
US10642618B1 (en) * | 2016-06-02 | 2020-05-05 | Apple Inc. | Callgraph signature prefetch |
GB2563010B (en) * | 2017-05-25 | 2019-12-25 | Advanced Risc Mach Ltd | An apparatus and method for managing a capability domain |
US10671497B2 (en) | 2018-01-19 | 2020-06-02 | International Business Machines Corporation | Efficient and selective sparing of bits in memory systems |
US11347507B2 (en) * | 2018-03-15 | 2022-05-31 | SiFive, Inc. | Secure control flow prediction |
US10732979B2 (en) * | 2018-06-18 | 2020-08-04 | Advanced Micro Devices, Inc. | Selectively performing ahead branch prediction based on types of branch instructions |
US10877864B2 (en) * | 2018-12-20 | 2020-12-29 | International Business Machines Corporation | Controlling segment layout in a stress test for a processor memory with a link stack |
US11093246B2 (en) | 2019-09-06 | 2021-08-17 | International Business Machines Corporation | Banked slice-target register file for wide dataflow execution in a microprocessor |
US11157276B2 (en) * | 2019-09-06 | 2021-10-26 | International Business Machines Corporation | Thread-based organization of slice target register file entry in a microprocessor to permit writing scalar or vector data to portions of a single register file entry |
US11119774B2 (en) | 2019-09-06 | 2021-09-14 | International Business Machines Corporation | Slice-target register file for microprocessor |
US11327766B2 (en) | 2020-07-31 | 2022-05-10 | International Business Machines Corporation | Instruction dispatch routing |
US11783050B2 (en) * | 2020-11-13 | 2023-10-10 | Centaur Technology, Inc. | Spectre fixes with predictor mode tag |
US20220283813A1 (en) * | 2021-03-02 | 2022-09-08 | Intel Corporation | Flexible return and event delivery |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5692168A (en) * | 1994-10-18 | 1997-11-25 | Cyrix Corporation | Prefetch buffer using flow control bit to identify changes of flow within the code stream |
US6697932B1 (en) * | 1999-12-30 | 2004-02-24 | Intel Corporation | System and method for early resolution of low confidence branches and safe data cache accesses |
CN101101544A (zh) * | 2006-07-07 | 2008-01-09 | 国际商业机器公司 | 用于改进处理器中分支预测的方法和装置 |
Family Cites Families (71)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5781753A (en) * | 1989-02-24 | 1998-07-14 | Advanced Micro Devices, Inc. | Semi-autonomous RISC pipelines for overlapped execution of RISC-like instructions within the multiple superscalar execution units of a processor having distributed pipeline control for speculative and out-of-order execution of complex instructions |
US5283873A (en) * | 1990-06-29 | 1994-02-01 | Digital Equipment Corporation | Next line prediction apparatus for a pipelined computed system |
US5313634A (en) | 1992-07-28 | 1994-05-17 | International Business Machines Corporation | Computer system branch prediction of subroutine returns |
AU6629894A (en) | 1993-05-07 | 1994-12-12 | Apple Computer, Inc. | Method for decoding guest instructions for a host computer |
US5454117A (en) | 1993-08-25 | 1995-09-26 | Nexgen, Inc. | Configurable branch prediction for a processor performing speculative execution |
US5623614A (en) * | 1993-09-17 | 1997-04-22 | Advanced Micro Devices, Inc. | Branch prediction cache with multiple entries for returns having multiple callers |
US5604877A (en) * | 1994-01-04 | 1997-02-18 | Intel Corporation | Method and apparatus for resolving return from subroutine instructions in a computer processor |
SG47981A1 (en) | 1994-03-01 | 1998-04-17 | Intel Corp | Pipeline process of instructions in a computer system |
US5551013A (en) | 1994-06-03 | 1996-08-27 | International Business Machines Corporation | Multiprocessor for hardware emulation |
JP3599409B2 (ja) * | 1994-06-14 | 2004-12-08 | 株式会社ルネサステクノロジ | 分岐予測装置 |
US5706491A (en) * | 1994-10-18 | 1998-01-06 | Cyrix Corporation | Branch processing unit with a return stack including repair using pointers from different pipe stages |
US5784586A (en) | 1995-02-14 | 1998-07-21 | Fujitsu Limited | Addressing method for executing load instructions out of order with respect to store instructions |
US5896528A (en) | 1995-03-03 | 1999-04-20 | Fujitsu Limited | Superscalar processor with multiple register windows and speculative return address generation |
JP3597540B2 (ja) | 1995-06-01 | 2004-12-08 | 富士通株式会社 | 並列データプロセッサにおけるアクティブ命令を回転させる方法および装置 |
US5881278A (en) * | 1995-10-30 | 1999-03-09 | Advanced Micro Devices, Inc. | Return address prediction system which adjusts the contents of return stack storage to enable continued prediction after a mispredicted branch |
US5790825A (en) | 1995-11-08 | 1998-08-04 | Apple Computer, Inc. | Method for emulating guest instructions on a host computer through dynamic recompilation of host instructions |
US5860017A (en) * | 1996-06-28 | 1999-01-12 | Intel Corporation | Processor and method for speculatively executing instructions from multiple instruction streams indicated by a branch instruction |
DE69727773T2 (de) | 1996-12-10 | 2004-12-30 | Texas Instruments Inc., Dallas | Verbesserte Verzweigungsvorhersage in einem Pipelinemikroprozessor |
US6009261A (en) | 1997-12-16 | 1999-12-28 | International Business Machines Corporation | Preprocessing of stored target routines for emulating incompatible instructions on a target processor |
US6256729B1 (en) | 1998-01-09 | 2001-07-03 | Sun Microsystems, Inc. | Method and apparatus for resolving multiple branches |
US6212603B1 (en) * | 1998-04-09 | 2001-04-03 | Institute For The Development Of Emerging Architectures, L.L.C. | Processor with apparatus for tracking prefetch and demand fetch instructions serviced by cache memory |
US6308255B1 (en) | 1998-05-26 | 2001-10-23 | Advanced Micro Devices, Inc. | Symmetrical multiprocessing bus and chipset used for coprocessor support allowing non-native code to run in a system |
US6304960B1 (en) | 1998-08-06 | 2001-10-16 | Intel Corporation | Validating prediction for branches in a cluster via comparison of predicted and condition selected tentative target addresses and validation of branch conditions |
US6240510B1 (en) * | 1998-08-06 | 2001-05-29 | Intel Corporation | System for processing a cluster of instructions where the instructions are issued to the execution units having a priority order according to a template associated with the cluster of instructions |
US6253315B1 (en) * | 1998-08-06 | 2001-06-26 | Intel Corporation | Return address predictor that uses branch instructions to track a last valid return address |
US20020147969A1 (en) | 1998-10-21 | 2002-10-10 | Richard A. Lethin | Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method |
US6393556B1 (en) | 1998-10-30 | 2002-05-21 | Intel Corporation | Apparatus and method to change processor privilege without pipeline flush |
US6332191B1 (en) | 1999-01-19 | 2001-12-18 | Advanced Micro Devices, Inc. | System for canceling speculatively fetched instructions following a branch mis-prediction in a microprocessor |
US6954923B1 (en) | 1999-01-28 | 2005-10-11 | Ati International Srl | Recording classification of instructions executed by a computer |
US7065633B1 (en) | 1999-01-28 | 2006-06-20 | Ati International Srl | System for delivering exception raised in first architecture to operating system coded in second architecture in dual architecture CPU |
US6289444B1 (en) | 1999-06-02 | 2001-09-11 | International Business Machines Corporation | Method and apparatus for subroutine call-return prediction |
GB2352911B (en) | 1999-07-30 | 2004-03-03 | Sony Uk Ltd | Method of processing signals and apparatus for signal processing |
US6446197B1 (en) * | 1999-10-01 | 2002-09-03 | Hitachi, Ltd. | Two modes for executing branch instructions of different lengths and use of branch control instruction and register set loaded with target instructions |
US6934832B1 (en) | 2000-01-18 | 2005-08-23 | Ati International Srl | Exception mechanism for a computer |
DE60143896D1 (de) * | 2000-07-14 | 2011-03-03 | Mips Tech Inc | Anweisungsabruf und -absendung in einem multi-thread-system |
US6711672B1 (en) * | 2000-09-22 | 2004-03-23 | Vmware, Inc. | Method and system for implementing subroutine calls and returns in binary translation sub-systems of computers |
US7017030B2 (en) * | 2002-02-20 | 2006-03-21 | Arm Limited | Prediction of instructions in a data processing apparatus |
US7203833B1 (en) | 2002-12-23 | 2007-04-10 | Microsoft Corporation | History based rights computation for managed code |
US7290253B1 (en) * | 2003-09-30 | 2007-10-30 | Vmware, Inc. | Prediction mechanism for subroutine returns in binary translation sub-systems of computers |
US7552426B2 (en) | 2003-10-14 | 2009-06-23 | Microsoft Corporation | Systems and methods for using synthetic instructions in a virtual machine |
US7831806B2 (en) * | 2004-02-18 | 2010-11-09 | Arm Limited | Determining target addresses for instruction flow changing instructions in a data processing apparatus |
JP4286768B2 (ja) * | 2004-11-30 | 2009-07-01 | 富士通株式会社 | 分岐予測装置およびその制御方法 |
US7478228B2 (en) * | 2006-08-31 | 2009-01-13 | Qualcomm Incorporated | Apparatus for generating return address predictions for implicit and explicit subroutine calls |
US8621605B2 (en) * | 2007-10-09 | 2013-12-31 | International Business Machines Corporation | Method for reducing the time to diagnose the cause of unexpected changes to system files |
WO2010004242A2 (en) | 2008-07-10 | 2010-01-14 | Cambridge Consultants Limited | Data processing apparatus, for example using vector pointers |
US8307353B2 (en) | 2008-08-12 | 2012-11-06 | Oracle America, Inc. | Cross-domain inlining in a system virtual machine |
US8171269B2 (en) * | 2009-03-06 | 2012-05-01 | Agere Systems Inc. | Branch target buffer with entry source field for use in determining replacement priority |
GB2478733B (en) | 2010-03-15 | 2013-08-14 | Advanced Risc Mach Ltd | Apparatus and method for handling exception events |
US8566569B2 (en) | 2010-06-24 | 2013-10-22 | International Business Machines Corporation | State machine-based filtering of pattern history tables based on distinguishable pattern detection |
US9122485B2 (en) | 2011-01-21 | 2015-09-01 | Apple Inc. | Predicting a result of a dependency-checking instruction when processing vector instructions |
US9098295B2 (en) | 2011-01-21 | 2015-08-04 | Apple Inc. | Predicting a result for an actual instruction when processing vector instructions |
US9213551B2 (en) | 2011-03-11 | 2015-12-15 | Oracle International Corporation | Return address prediction in multithreaded processors |
US10338928B2 (en) | 2011-05-20 | 2019-07-02 | Oracle International Corporation | Utilizing a stack head register with a call return stack for each instruction fetch |
US9021155B2 (en) | 2011-06-01 | 2015-04-28 | International Business Machines Corporation | Fibre channel input/output data routing including discarding of data transfer requests in response to error detection |
US9354874B2 (en) | 2011-10-03 | 2016-05-31 | International Business Machines Corporation | Scalable decode-time instruction sequence optimization of dependent instructions |
US9329869B2 (en) | 2011-10-03 | 2016-05-03 | International Business Machines Corporation | Prefix computer instruction for compatibily extending instruction functionality |
US10078515B2 (en) | 2011-10-03 | 2018-09-18 | International Business Machines Corporation | Tracking operand liveness information in a computer system and performing function based on the liveness information |
US9286072B2 (en) | 2011-10-03 | 2016-03-15 | International Business Machines Corporation | Using register last use infomation to perform decode-time computer instruction optimization |
US8756591B2 (en) | 2011-10-03 | 2014-06-17 | International Business Machines Corporation | Generating compiled code that indicates register liveness |
US9513915B2 (en) | 2012-03-28 | 2016-12-06 | International Business Machines Corporation | Instruction merging optimization |
US9280348B2 (en) | 2012-03-28 | 2016-03-08 | International Business Machines Corporation | Decode time instruction optimization for load reserve and store conditional sequences |
US9292291B2 (en) | 2012-03-28 | 2016-03-22 | International Business Machines Corporation | Instruction merging optimization |
US9323530B2 (en) | 2012-03-28 | 2016-04-26 | International Business Machines Corporation | Caching optimized internal instructions in loop buffer |
US9354888B2 (en) | 2012-03-28 | 2016-05-31 | International Business Machines Corporation | Performing predecode-time optimized instructions in conjunction with predecode time optimized instruction sequence caching |
US9229721B2 (en) * | 2012-09-10 | 2016-01-05 | Qualcomm Incorporated | Executing subroutines in a multi-threaded processing system |
US10042776B2 (en) * | 2012-11-20 | 2018-08-07 | Arm Limited | Prefetching based upon return addresses |
US9268572B2 (en) | 2012-12-11 | 2016-02-23 | International Business Machines Corporation | Modify and execute next sequential instruction facility and instructions therefor |
US20160066003A1 (en) | 2013-06-04 | 2016-03-03 | Thomson Licensing | Viral tuning method |
US9619230B2 (en) * | 2013-06-28 | 2017-04-11 | International Business Machines Corporation | Predictive fetching and decoding for selected instructions |
US9513924B2 (en) * | 2013-06-28 | 2016-12-06 | Globalfoundries Inc. | Predictor data structure for use in pipelined processing |
US9361144B2 (en) * | 2013-06-28 | 2016-06-07 | Globalfoundries Inc. | Predictive fetching and decoding for selected return instructions |
-
2013
- 2013-06-28 US US13/931,656 patent/US9619230B2/en active Active
-
2014
- 2014-06-24 DE DE201410108785 patent/DE102014108785A1/de active Pending
- 2014-06-27 CN CN201410301454.2A patent/CN104252586B/zh active Active
- 2014-12-03 US US14/558,808 patent/US9619232B2/en active Active
-
2017
- 2017-03-27 US US15/470,285 patent/US9921843B2/en active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5692168A (en) * | 1994-10-18 | 1997-11-25 | Cyrix Corporation | Prefetch buffer using flow control bit to identify changes of flow within the code stream |
US6697932B1 (en) * | 1999-12-30 | 2004-02-24 | Intel Corporation | System and method for early resolution of low confidence branches and safe data cache accesses |
CN101101544A (zh) * | 2006-07-07 | 2008-01-09 | 国际商业机器公司 | 用于改进处理器中分支预测的方法和装置 |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112379930A (zh) * | 2015-01-07 | 2021-02-19 | 美光科技公司 | 产生并执行控制流 |
CN111095201A (zh) * | 2017-09-19 | 2020-05-01 | 国际商业机器公司 | 响应于到子例程的分支而预测内容表指针值 |
CN111095201B (zh) * | 2017-09-19 | 2023-07-25 | 国际商业机器公司 | 响应于到子例程的分支而预测内容表指针值 |
CN109960607A (zh) * | 2017-12-22 | 2019-07-02 | 龙芯中科技术有限公司 | 预测栈的错误恢复方法、装置及存储介质 |
CN109960607B (zh) * | 2017-12-22 | 2021-04-20 | 龙芯中科技术股份有限公司 | 预测栈的错误恢复方法、装置及存储介质 |
CN111382429A (zh) * | 2018-12-27 | 2020-07-07 | 华为技术有限公司 | 指令的执行方法、装置及存储介质 |
CN111382429B (zh) * | 2018-12-27 | 2022-12-27 | 华为技术有限公司 | 指令的执行方法、装置及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US20170199740A1 (en) | 2017-07-13 |
US9921843B2 (en) | 2018-03-20 |
US9619230B2 (en) | 2017-04-11 |
CN104252586B (zh) | 2017-10-13 |
US20150006855A1 (en) | 2015-01-01 |
US20150089194A1 (en) | 2015-03-26 |
DE102014108785A1 (de) | 2014-12-31 |
US9619232B2 (en) | 2017-04-11 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104252586A (zh) | 选择的指令的预测获取和解码方法和系统 | |
CN104252360A (zh) | 在流水线化处理中使用的预测器数据结构 | |
US9489229B2 (en) | Transparent dynamic code optimization | |
CN104252335A (zh) | 用于选择的返回指令的预测获取和解码方法和系统 | |
US9870210B2 (en) | Partition mobility for partitions with extended code | |
CN102906701B (zh) | 在计算环境中控制对适配器的访问的方法和系统 | |
US9569115B2 (en) | Transparent code patching | |
CN102906692B (zh) | 修改适配器功能参数的指令的方法和系统 | |
CN104252336B (zh) | 基于解码时间指令优化来形成指令组的方法和系统 | |
US20150277869A1 (en) | Selectively controlling use of extended mode features | |
US20150278106A1 (en) | Transparent code patching including updating of address translation structures | |
CN103582879B (zh) | 管理耦合设施中的操作员消息缓冲器 | |
CN102713838B (zh) | 无停顿键设置工具 | |
CN104956364A (zh) | 向量异常码 | |
CN102906720A (zh) | 启用/禁用计算环境的适配器 | |
US20180074826A1 (en) | Effectiveness and prioritization of prefetches | |
CN111066006A (zh) | 设置内容表(toc)寄存器指令 | |
CN103597453A (zh) | 用于测试耦合设施的操作员消息命令 | |
CN103562864A (zh) | 执行开始操作员消息命令 | |
CN103597462A (zh) | 发送操作员消息命令到耦合设施 | |
CN103562877A (zh) | 处理操作员消息命令 | |
CN104081343B (zh) | 事务存储器的主分支指令 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |