首页> 中国专利> 以适当的预解码预载来自可变长度指令集的指令的系统、方法和软件

以适当的预解码预载来自可变长度指令集的指令的系统、方法和软件

摘要

在执行来自可变长度指令集的指令的处理器中,预载指令操作以从存储器检索对应于指令高速缓冲存储器线的数据块,对所述数据块中的来自可变长度指令集的指令进行预解码,且将所述指令和预解码信息加载到指令高速缓冲存储器中。指令执行单元向预解码器指示第一有效指令在所述数据块内的位置。所述预解码器连续确定每一指令的长度且因此确定指令边界。识别所述第一有效指令的所述位置的指令高速缓冲存储器线偏移量指示符可以多种方式产生并提供到所述预解码器。

著录项

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2022-03-15

    未缴年费专利权终止 IPC(主分类):G06F 9/30 专利号:ZL2008800105608 申请日:20080403 授权公告日:20161012

    专利权的终止

  • 2016-10-12

    授权

    授权

  • 2010-04-14

    实质审查的生效 IPC(主分类):G06F9/30 申请日:20080403

    实质审查的生效

  • 2010-02-10

    公开

    公开

说明书

技术领域

本发明大体上涉及处理器的领域,且特定来说涉及用于将来自可变长度指令集的指令预载到指令高速缓冲存储器中且对指令进行正确地预解码的系统、方法和软件。

背景技术

微处理器在广泛多种应用中执行计算任务。几乎总是期望改善的处理器性能,以允许通过软件增强而获得较快的操作和/或增加的功能性。通过利用这两种架构进步(例如RISC架构)和半导体技术中的进步,许多现代处理器以比例如DRAM和SDRAM等存储器芯片高得多的时钟速度执行。为了最小化相对缓慢的存储器存取的代价,这些处理器利用分级存储器结构,其中快速的芯片上高速缓冲存储器存储最近已存取和/或处理器预期(经由软件)在近期存取的数据和指令的本地副本。

预期对指令高速缓冲存储器的加载的一个实例是预载指令(例如,ARM指令PLI)。预载指令在指令执行之前将指令加载到指令高速缓冲存储器中。编程人员可在到目标的已知或预期分支(例如,子例程调用)的略前部将预载指令插入到代码中。预载指令将目标处的指令加载到指令高速缓冲存储器中,使得当分支执行时,目标处的指令在高速缓冲存储器中可用以供立即执行。

大多数现代处理器采用管线式架构,其中循序指令在执行时重叠以增加总体处理器处理量。维持通过管线的平稳执行对实现高性能是关键的。此项技术中已知的一种管线优化技术是对指令进行预解码。指令在从存储器检索时被检查,经部分解码,且关于所述指令的某种信息(称为预解码信息)连同相关联指令一起存储在指令高速缓冲存储器中。当稍后将指令从高速缓冲存储器获取到管线中时,预解码信息也被获取,且辅助对指令进行完全解码。预解码信息可例如识别分支和浮点指令或其它在管线中执行指令时有用的信息。

某些指令集包含具有不同长度的指令。举例来说,处理器可具有32位原生指令集,且另外包含执行Java字节代码的能力。作为另一实例,ARM处理器架构的若干版本执行来自称为Thumb-2的指令集的指令。Thumb-2指令可为16或32位长。大体上,编译人员选择Thumb-2指令以实现最紧凑的代码,且在一段Thumb-2代码内可以任何次序混合16位和32位指令。此外,大体上,对存储器中指令的对准没有限制。

可变长度指令集处理器中的预解码器的一个有用功能是确认和指示指令高速缓冲存储器线中的每一指令的长度。也就是说,预解码信息可识别指令边界,所述指令边界可例如通过检查指令操作码来确定。此信息在将指令获取到管线中以用于执行时辅助管线获取与解码级。

预载来自可变长度指令集的指令且对指令进行预解码以指示指令边界中遇到的一个问题在于,因为指令不一定在存储器中对准,所以其可能不沿着指令高速缓冲存储器线边界对准。因此,从存储器检索的高速缓冲存储器线大小的数据块中的第一数据(例如,半字)可为完整指令(例如,16位指令)或在同一高速缓冲存储器线中继续的指令的一部分(例如,32位指令的前16位),其中任一者均由预解码器检测。然而,第一数据可为在数据块之前开始的指令的一部分(例如,32位指令的最后16位),或可包括例如变量、直接数据(immediate data)等非指令数据。在后两种情况(部分指令或数据)中的任一者中,第一数据可能被作为完整指令或指令的第一部分而被错误地预解码。

由于数据块中的其它指令的长度和(因此)边界是循序确定的,因此对第一数据进行不正确地预解码可能引起数据块中的所有指令被不正确地预解码,且不正确的预解码信息随指令一起被写入到指令高速缓冲存储器。当随后将指令从高速缓冲存储器获取到管线中且预解码信息被确定为错误时,必须丢弃高速缓冲存储器线且再次从存储器获取指令并对其进行预解码以确定正确的指令边界,这对处理器性能和功率消耗两者均造成不利影响。

发明内容

根据本文揭示和主张的一个或一个以上实施例,在执行来自可变长度指令集的指令的处理器中,预载指令操作以从存储器检索对应于指令高速缓冲存储器线的数据块,对所述数据块中的指令进行预解码,且将所述指令和预解码信息加载到所述指令高速缓冲存储器中。指令执行单元向预解码器指示第一有效指令在所述数据块内的位置。所述预解码器连续确定每一指令的长度且因此确定指令边界。识别所述第一有效指令的位置的指令高速缓冲存储器线偏移量指示符可以多种方式被产生并提供到所述预解码器。

一个实施例涉及一种将来自可变长度指令集的指令预载到指令高速缓冲存储器中的方法。设定指令高速缓冲存储器线偏移量指示符,所述指示符识别第一有效指令进入对应于指令高速缓冲存储器线的数据块内的偏移量。执行预载指令,其操作以从存储器检索包含至少一个来自可变长度指令集的指令的数据块,且将所述指令加载到所述指令高速缓冲存储器中。响应于所述指令高速缓冲存储器线偏移量指示符而以第一指令开始对所述数据块中的指令进行连续预解码。

另一实施例涉及一种处理器。所述处理器包含:存储器接口;和指令高速缓冲存储器,其操作以存储来自可变长度指令集的指令及其对应的预解码信息。所述处理器还包含指令执行单元,其操作以产生指令高速缓冲存储器线偏移量指示符,所述指令高速缓冲存储器线偏移量指示符识别待加载到所述指令高速缓冲存储器中的数据块中的第一有效指令。所述处理器进一步包含预解码器,其插入在所述指令高速缓冲存储器与所述存储器接口之间,且操作以在预载指令执行后响应于所述指令高速缓冲存储器线偏移量指示符而以第一有效指令开始对所述数据块中的来自可变长度指令集的指令进行连续预解码。

又一实施例涉及一种计算机可读媒体,其存储可变长度指令集中的至少一预载指令,所述指令操作以致使处理器将指令预载到指令高速缓冲存储器中,其中所述经预载的指令是以第一有效指令开始而被预解码的。

附图说明

图1是对从可变长度指令集预载的指令进行正确预解码的处理器的功能框图。

图2是描绘来自可变长度指令集的指令在三个代表性数据块中的对准的框图。

图3是预载来自可变长度指令集的指令的方法的流程图。

具体实施方式

图1描绘执行来自至少一个可变长度指令集的指令的处理器110的功能框图。特定来说,处理器110对从可变长度指令集预载的指令进行正确地预解码。处理器110在包含管线114的执行单元112中执行指令,管线114包括以管级组织的多个寄存器或锁存器116以及例如算术逻辑单元(ALU)(未图示)等逻辑与计算电路。管线根据控制逻辑118执行指令。如图所示,管线114可为超标量设计。

通用寄存器(GPR)堆120提供构成存储器层级的顶部的寄存器。在一个实施例中,指令执行单元还包含状态寄存器122,其可指示进入第一指令所位于的指令高速缓冲存储器线中的偏移量,如本文进一步解释。指令执行单元112还包含L2处理逻辑124,其跟踪从L2高速缓冲存储器136或主存储器138获取的指令和数据的性质。

管线114从指令高速缓冲存储器126获取指令,其中存储器寻址和许可由指令侧翻译旁视缓冲器(ITLB)128管理。预解码器130对从L2高速缓冲存储器136(或主存储器138)获取的指令进行预解码,且将指令和预解码信息放置于指令高速缓冲存储器126中。在一个或一个以上实施例中,预解码信息包含指令高速缓冲存储器线中的指令的长度。如本文更详细论述,预解码器130响应于来自指令执行单元112的识别第一指令在高速缓冲存储器线内的位置的指令高速缓冲存储器线偏移量指示符(ICOI)而正确地确定指令的长度。

从数据高速缓冲存储器132存取数据,其中存储器寻址和许可由主翻译旁视缓冲器(TLB)134管理。在各种实施例中,ITLB 128可包括TLB 134的一部分的副本。或者,ITLB 128和TLB 134可集成。类似地,在处理器110的各种实施例中,指令高速缓冲存储器126和数据高速缓冲存储器132可合成一体。

指令高速缓冲存储器126和数据高速缓冲存储器132中的未中致使对2级(L2)高速缓存存储器136的存取,所述L2高速缓存存储器136在图1描绘的实施例中是集成的。L2高速缓冲存储器136中的未中致使在存储器接口142的控制下经由系统总线140对主(芯片外)存储器138的存取。处理器110可包含输入/输出(I/O)接口144,其控制在外围总线150上对各种外围装置146、148的存取。在此项技术中众所周知,处理器110执行从例如存储器136等计算机可读媒体或由外围装置146、148读取的磁性或光学媒体检索的指令。

所属领域的技术人员将认识到,处理器110的许多变化是可能的。举例来说,处理器110可包含3级(L3)或额外的高速缓冲存储器,且/或单独的L2高速缓冲存储器136可专用于指令高速缓冲存储器126和数据高速缓冲存储器132中的每一者。另外,可从特定实施例中省略处理器110中描绘的功能块中的一者或一者以上。

处理器110执行来自至少一个可变长度指令集的指令。在各种实施例中,处理器110可执行来自固定长度指令集(例如,32位ARM指令集)和一个或一个以上可变长度指令集(例如,32位和16位Thumb-2指令集)的指令,或来自两个或两个以上可变长度指令集的指令。在这些实施例中,当前处理器指令集模式可由例如状态寄存器122等寄存器中的一个或一个以上位指示。在另一实施例中,处理器110执行仅来自单个可变长度指令集的指令。

由处理器110执行的可变长度指令集包含至少一个预载指令,其操作以在指令执行之前将指令加载到指令高速缓冲存储器126中。预载指令从L2高速缓冲存储器136或存储器138检索含有一个或一个以上指令的指令高速缓冲存储器线大小的数据块。所述数据块由预解码器130预解码以确定指令长度和其它预解码信息。随后将指令和预解码信息写入到指令高速缓冲存储器126。

图2描绘通过可变长度指令集中的预载指令预载到高速缓冲存储器线中的数据块中的数据和指令的若干可能分布。在图2描绘的实施例中,高速缓冲存储器线是十六个半字。为了清楚起见,仅详细展示数据块的下半部。在图2中描绘的实施例中处理器110执行来自具有16位和32位指令两者的指令集(例如,Thumb-2)的指令。将预载到高速缓冲存储器线中的第一假设数据块202以指令A(32位指令)开始,继之以16位指令B和C、32位指令D以及16位指令E和F。预解码器130检查与指令A相关联的指令长度指示符,且确定其为32位指令。在一个实施例中,指令长度指示符是指令操作码的位字段。举例来说,在Thumb-2指令集中,如果位[15:11]具有值′b11101、′b11110或′b11111,那么指令是32位长,任何其它编码指示16位指令。

在已确定占据半字0的指令是32位指令(占据半字0和1)之后,预解码器130检查半字2处的位模式,且确定指令B是16位长。以此方式,预解码器130沿着预载的数据块连续工作,确定每一指令的长度且因此确定下一指令的开始位置。将指令长度连同其它预解码信息一起写入到指令高速缓冲存储器126中。数据块202经适当地预解码,因为指令A在数据块202的开始处对准。

预载指令从L2高速缓冲存储器136或存储器138检索固定大小的数据块202、204、206(等于指令高速缓冲存储器线的大小)。在多数实施方案中,通过掩蔽最低有效n个地址位而在存储器中对准数据块202、204、206,其中高速缓冲存储器线是2n个字节。具有特定个别指令的目标地址的预载指令从存储器检索包含目标指令的经对准数据块202、204、206,而不是以目标指令开始的存储器块(除非目标指令恰好是数据块202、204、206中的第一指令,例如图2中的指令A)。因此,通过预载指令从存储器检索的数据块202、204、206的第一数据(例如,半字)不一定是指令或指令的开头。

举例来说,数据块204包含处于对应于半字0-3的位置中的非指令数据。由于此数据可包含任何位模式,因此其可能被作为指令而错误地预解码。举例来说,常规的预解码器可将数据解释为半字0处的16位指令、半字1-2处的32位指令以及半字3-4处的另一32位指令。在此情况下,关于含有指令G的半字位置的预解码信息是错误的。

作为另一实例,数据块206以指令J的第二半开始,其前16位在另一数据块中。然而,常规预解码器可将指令J解释为占据半字0-1的32位指令,且因此跳过指令K。如果在稍后将相关指令从指令高速缓冲存储器获取到管线中时将数据块204、206及其对应的错误的预解码信息写入到指令高速缓冲存储器,那么必须丢弃所述指令且重新获取所述指令以获得正确的预解码信息。这对处理器性能造成不利影响,因为管线必须暂停以等待L2高速缓冲存储器136或存储器138存取。功率消耗也增加,因为必须检索和预解码相同的数据块204、206两次。

为了允许以正确的预解码预载来自可变长度指令集的指令,指令执行单元112产生指令高速缓冲存储器线偏移量指示符(ICOI),其识别第一有效指令在数据块202、204、206内的位置或第一有效指令的开头。指令执行单元112在执行预载指令后将ICOI提供到预解码器130。ICOI的位大小取决于指令高速缓冲存储器线和指令集中的最短指令的大小。例如在图2中描绘的实施例中,最短指令是16位或半字,且指令高速缓冲存储器线包含16个半字。因此,在此实施例中ICOI需要四个位。大体上,ICOI包括m个位,其中指令高速缓冲存储器126的线大小是最短指令的2m倍。可以多种方式产生ICOI并将其传送到预解码器130。

在一个实施例中,将预载指令目标地址的一个或一个以上未使用地址位编码为ICOI。预载指令(例如,PLI)将目标指令的地址视为操作数。可将目标指令地址分解为例如标签、组号和高速缓冲存储器线索引。举例来说,对于32位指令虚拟地址VA[31:0],与指令高速缓冲存储器126的CAM结构中存储的标签相比较的标签可包括VA[31:11]。在p路组关联高速缓冲存储器中,如果标签匹配,那么组号从返回的p个结果中选择。组号可包括VA[10:5]。索引VA[4:0]寻址高速缓冲存储器线的个别字节,即,存储在指令高速缓冲存储器126的RAM结构中的数据。所述数据包括指令和预解码信息。

根据一个实施例,高速缓冲存储器线索引(例如,VA[4:0])的一部分或全部用于对指令高速缓冲存储器线偏移量指示符(ICOI)进行编码。在图2中描绘的实施例中,对于ICOI仅需要五个索引位VA[4:0]中的四个。在一个实施例中,预载目标指令地址位VA[4:1]可保持ICOI,从而使VA[0]保持自由以用作另一旗标(例如,用以在两个不同的指令集编码之间进行选择以用于执行预解码操作)。如果指令集包含8位指令,那么将需要整个高速缓冲存储器线索引VA[4:0]来存储ICOI。

当地址经确定且写入到编译人员指定的GPR以准备相关联预载指令的执行时,将ICOI编码到预载目标地址的高速缓冲存储器线索引部分中。当预载指令执行时,其从指定的GPR寄存器读取目标指令地址。如果目标地址在指令高速缓冲存储器126中命中,那么预载指令执行完成。如果目标地址在指令高速缓冲存储器126中未中,那么指令执行单元112内的逻辑(例如L2处理逻辑124)执行未中处理,存取L2高速缓冲存储器136和(如果必要)主存储器138以检索包含目标指令的数据块,例如数据块202、204、206。对数据块202、204、206进行预解码以确定块202、204、206中的每一有效指令的长度及其它信息。

当将含有指令的数据块202、204、206加载到预解码器130中时,L2处理逻辑124将ICOI呈现给预解码器130。响应于ICOI,预解码器130对在ICOI指定的偏移量处开始的指令进行预解码,所述偏移量对应于第一有效指令的位置或第一有效指令的开始。在图2的实施例中,ICOI对于数据块202将为′b0000,对于数据块204将为′b0100且对于数据块206将为′b0001。

预解码器130例如通过检查指令操作码确定第一指令的长度(和其它预解码信息),且从第一指令的长度确定第二指令的开始处。预解码器130随后确定第二指令的长度,且依此类推,直到已确定数据块202、204、206中每个指令的长度(和其它预解码信息)为止。预解码器130随后将指令连同正确的预解码信息一起写入到指令高速缓冲存储器126。在一个实施例中,预解码器130另外推测性地对如ICOI所指示的第一有效指令之前的数据进行预解码,因为也许所述数据可能包含一个或一个以上指令。

在一个实施例中,指令高速缓冲存储器线偏移量指示符(ICOI)包括例如状态寄存器122等寄存器中的字段。在此实施例中,ICOI位在预载指令执行之前经显式地设定。在预载指令执行后,预解码器130检查状态寄存器122或其它寄存器中的ICOI位,且对以所指示的第一有效指令开始的数据块202、204、206进行正确地预解码。随后将指令和预解码信息写入到指令高速缓冲存储器126。

在一个实施例中,指令高速缓冲存储器线偏移量指示符(ICOI)包括预载指令的操作码中的一个或一个以上位。可针对ICOI界定预载指令操作码的位字段,且编译人员可根据编程人员的指令或在代码中的指示来设定ICOI位字段。在预载指令执行后,例如由L2处理逻辑124将ICOI位字段呈现给预解码器130,且预解码器130对以指示的第一有效指令开始的数据块202、204、206进行预解码。随后将指令和预解码信息写入到指令高速缓冲存储器126。

在一个实施例中,可变长度指令集包含多个预载指令,其各自指定一不同的指令高速缓冲存储器线偏移量指示符(ICOI)。举例来说,在图2中描绘的实施例中,16个不同的预载指令各自指定一不同的ICOI以用于对数据块202、204、206中的指令进行预解码。编程人员或编译人员可基于已知的存储器对准和待预解码的第一指令的地址来指定适当的预载指令以用于进入经预载数据块202、204、206中的已知偏移量。

所属领域的技术人员将认识到上文描述的实施例并不相互排斥。举例来说,在操作码中具有ICOI位字段的预载指令在特定实施方案中可通过将ICOI锁存到例如状态寄存器122等寄存器中,或通过将ICOI置换到预载目标地址中的一个或一个以上未使用的地址位中,来将ICOI呈现给预解码器130。大体上,鉴于本发明的教示,所属领域的技术人员可确认用于将进入第一有效指令所在的数据块202、204、206中的偏移量传送到预解码器130的最佳解决万案。

图3描绘预载指令的方法300。所述方法通过设定指令高速缓冲存储器线偏移量指示符(ICOI)(框302)而开始。ICOI识别第一有效指令在高速缓冲存储器线或数据块202、204、206内的位置。在各种实施例中,可通过更改预载指令目标地址、在例如状态寄存器122等寄存器中设定ICOI位或在预载指令操作码中设定ICOI位字段来设定ICOI。

执行预载指令(框304)。预载指令操作以从L2高速缓冲存储器136或存储器138检索含有至少一目标指令的数据块202、204、206,且将数据块202、204、206提供到预解码器130。响应于ICOI,预解码器130在数据块202、204、206中定位第一有效指令(框306),且确定第一指令的长度(框308)。如果其未达到数据块202、204、206的末尾(框310),那么预解码器130使用在框308中确定的指令长度来确定另一指令的开始(框312),且检查所述指令以确定其长度(框308)。此过程继续,直到达到数据块202、204、206的末尾为止(框310)。

在一个实施例中,预解码器130可对第一指令之前的数据进行预解码(框314)。如果所述数据是随机数据(如数据块204中描绘)或指令的继续(如数据块206中描绘),那么所产生的预解码信息将很可能是错误的。然而,如果第一指令之前的数据包括与数据块202、204、206的开始对准的有效指令,那么预解码信息将是正确的,且可辅助管线114。在其它实施例中,不对第一指令之前的数据进行预解码。

预解码器130将指令和预解码信息写入到指令高速缓冲存储器126(框316)。所属领域的技术人员将容易认识到某些方法步骤可以与图3中描绘的次序不同的次序执行。举例来说,可在对有效指令进行预解码之前对第一指令之前的数据进行预解码(框314)。另外,预解码器130可渐进地将指令和预解码信息写入到指令高速缓冲存储器126(框316),因为数据块202、204、206中的每一指令均经预解码。

根据本文描述和主张的一个或一个以上实施例,处理器110可将来自可变长度指令集的指令预载到指令高速缓冲存储器126中,且在指令或指令的开始处未与指令高速缓冲存储器线的开头对准时对指令进行正确地预解码。这可避免当从指令高速缓冲存储器126获取到经不正确预解码的指令且必须丢弃、重新获取且重新预解码所述指令时经受的性能和功率消耗降级。可以多种方式实施向预解码器130传送识别第一有效指令的指令高速缓冲存储器线偏移量指示符(ICOI)。

虽然已相对于本发明的特定特征、方面和实施例描述了本发明,但将明白,在本发明的宽广范围内,许多变化、修改和其它实施例是可能的,且因此,所有变化、修改和实施例均应视为在本发明的范围内。因此本发明的实施例应在所有方面中解释为说明性而小是限制性的,且希望属于随附权利要求书的意义和等效范围内的所有改变都包含于其中。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号