CN102207848A - 指令取回装置、处理器和程序计数器加法控制方法 - Google Patents

指令取回装置、处理器和程序计数器加法控制方法 Download PDF

Info

Publication number
CN102207848A
CN102207848A CN2011100733136A CN201110073313A CN102207848A CN 102207848 A CN102207848 A CN 102207848A CN 2011100733136 A CN2011100733136 A CN 2011100733136A CN 201110073313 A CN201110073313 A CN 201110073313A CN 102207848 A CN102207848 A CN 102207848A
Authority
CN
China
Prior art keywords
instruction
branch
increment value
register
change
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN2011100733136A
Other languages
English (en)
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.)
Sony Corp
Original Assignee
Sony Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Sony Corp filed Critical Sony Corp
Publication of CN102207848A publication Critical patent/CN102207848A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/32Address formation of the next instruction, e.g. by incrementing the instruction counter
    • G06F9/321Program or instruction counter, e.g. incrementing
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30156Special purpose encoding of instructions, e.g. Gray coding
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • 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/3017Runtime instruction translation, e.g. macros
    • G06F9/30178Runtime instruction translation, e.g. macros of compressed or encrypted 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/3802Instruction prefetching
    • G06F9/3804Instruction prefetching for branches, e.g. hedging, branch folding
    • 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
    • G06F9/3842Speculative instruction 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/3854Instruction completion, e.g. retiring, committing or graduating
    • G06F9/3858Result writeback, i.e. updating the architectural state or memory

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)
  • Memory System Of A Hierarchy Structure (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本发明公开了指令取回装置、处理器和程序计数器加法控制方法。该指令取回装置包括:程序计数器,被配置为管理程序中作为执行对象的指令的地址,在该程序中,属于多个指令序列的指令顺序地被放置;改变指示寄存器,被配置为指示对程序计数器上的递增值的改变;递增值寄存器,被配置为保存改变后的递增值;以及加法控制部件,被配置为使得如果改变指示寄存器指示了对程序计数器上的递增值的改变,则加法控制部件基于保存在递增值寄存器中的改变后的递增值来递增程序计数器,如果改变指示寄存器未指示对程序计数器上的递增值的改变,则加法控制部件每一指令字长度使所述程序计数器递增。

Description

指令取回装置、处理器和程序计数器加法控制方法
技术领域
本发明涉及指令取回(instruction fetch)装置。更具体地,本发明涉及用于预先取回包括分支指令(branch instruction)的指令序列的指令取回装置和处理器、与该装置和处理器一起使用的处理方法以及用于使计算机执行该处理方法的程序。
背景技术
为了使流水线化CPU(中央处理单元;或处理器)的处理能力最大化,理想地,应当使流水线内的指令保持流动而不受任何阻碍。为了保持这样的理想状态,需要把将被处理的下一指令从保存它的存储器位置预先取回到CPU或指令缓存中。然而,如果程序包括分支指令,则在分支指令被执行之前,无法清楚地标识出该分支指令之后的将被执行的指令的地址。因此,指令取回被暂停;流水线中断(pipeline stall)发生;并且指令执行的吞吐量下降。因此,许多CPU具有用于通过执行预取回来抑制流水线中断而不管因分支引起的不确定性的布置。
可通过简单硬件实现的典型预取回方案称为下一行预取回(参见日本专利No.4327237(图1))。这是一种用于按照指令被编程的顺序来预取回指令的技术。处理器从存储器取回指令的基本模式包括按照地址的升序顺序地访问存储器。因此,通过硬件的预取回构成了这样的一种尝试:将给定地址的指令存储到缓存中,并且然后在下一缓存行(cache line)也将被使用的假设下,也自动地存储下一缓存行。
发明内容
尽管上述下一行预取回可以利用简单硬件结构来实现,然而在不发生分支的假设下执行预取回的事实频繁地产生无用的预取回(称为预取回失误)。预取回失误的发生引起了这样的缺点:在丢弃预取回的指令并再次取回正确分支目的地的指令时使得CPU在其等待状态中停留了更长时间。另外,读写额外数据的需求使得要需要更多的存储器访问和更多的功耗。此外,频繁和无益的预取回导致了使数据路径上的流量拥塞恶化的问题。
减少预取回失误的另一尝试是使用称为分支预测的技术。鉴于下一行预取回涉及通过预测为从不发生分支来预取回下一行,分支预测的特征在于基于过去的历史来预测分支方向并且从预测出的地址预取回指令。分支预测是复杂的,并且需要使用包含大面积电路的硬件,该电路包括历史表。然而,通过分支预测获得的性能益处取决于预测算法的功效,许多这样的预测算法需要利用较大容量的存储装置和复杂的硬件来实现。当预测失败时,分支预测也要承担与下一行预取回所带来的不利方面类似的不利方面。大多数的实际程序具有比例失调的高比率的循环和处理其分支的例外,以使得分支预测的优点通常超过其缺点。尽管如此,一些应用是按照无论哪种预测算法可能被使用都难以提高其预测性能的方式来构成的。特别地,编译码应用往往会使除了对循环的预测以外的预测失误。在自然希望增加预测命中率的情况下,用于实现该目标的方案的电路正变得越来越大越来越复杂,并且可能不会带来与实际电路规模相当的性能改进。
与上面概述的仅在一个方向上执行预取回的技术相反,已提出了另一类型的技术,其涉及在分支的两个方向上预取回指令而不进行预测,以消除预取回失误。与分支预测技术相比,该技术能够通过增加有限量的硬件来免除流水线中断。然而,不仅将被存储用于预取回的数据量简单地加倍,而且必须一直读取无用数据。所导致的数据路径上的拥塞可能不利地影响性能;所增加的冗余电路使电路结构复杂;并且所增加的功耗是不可忽略的。
如上所述,现有的预取回技术具有其自己的优点(预期提高吞吐量)和缺点(增加了实现CPU的成本;分支预测处理的开销)。在这些技术的每种技术的成本和性能之间存在折衷。
本发明是鉴于上面的状况而作出的,并且提供了通过平均用于预取回指令的下一行预取回中所涉及的不利方面来提高吞吐量的创造性布置。
在实现本发明时,根据本发明的一个实施例,提供了指令取回装置以及表示其控制功能的程序计数器加法控制方法,该指令取回装置包括:程序计数器,被配置为管理程序中作为执行对象的指令的地址,在该程序中,属于多个指令序列的指令顺序地被放置;改变指示寄存器,被配置为指示对程序计数器上的递增值的改变;递增值寄存器,被配置为保存改变后的递增值;以及加法控制部件,被配置为使得如果改变指示寄存器指示了对程序计数器上的递增值的改变,则加法控制部件基于保存在递增值寄存器中的改变后的递增值来递增程序计数器,如果改变指示寄存器未指示对程序计数器上的递增值的改变,则加法控制部件按照每一指令字长度使程序计数器递增。上面的指令取回装置和程序计数器加法控制方法提供了这样的效果:在多个指令序列被布置为共同存在的情况中,使得程序计数器上的递增值以使得合适的指令序列被取回的方式被改变。
优选地,每当程序计数器基于保存在递增值寄存器中的改变后的递增值被递增时,改变指示寄存器可以被递减,如果改变指示寄存器指示正数,则改变指示寄存器指示对程序计数器的递增值的改变。该结构提供了使得程序计数器上的递增值根据要被执行的指令序列的长度而被改变的效果。
优选地,递增值寄存器可以将指令序列的数目保存为改变后的递增值。该结构提供了仅取回每一个指令序列的效果。
优选地,当在预定数目的方向上分支的分支指令被执行之后,递增值寄存器可以将预定数目保存作为指令序列的数目。该结构提供了仅取回对其作出分支的指令序列的效果。
根据本发明另一实施例,提供了一种处理器,该处理器包括:程序计数器,被配置为管理程序中作为执行对象的指令的地址,在程序中,属于多个指令序列的指令顺序地被放置;改变指示寄存器,被配置为指示对程序计数器上的递增值的改变;递增值寄存器,被配置为保存改变后的递增值;加法控制部件,被配置为使得如果改变指示寄存器指示了对程序计数器上的递增值的改变,则加法控制部件基于保存在递增值寄存器中的改变后的递增值来递增程序计数器,如果改变指示寄存器未指示对程序计数器上的递增值的改变,则加法控制部件还按照每一指令字长度使程序计数器递增;以及指令执行部件,被配置为执行由程序计数器指示的指令。该处理器提供了这样的效果:在多个指令序列被布置为共同存在的情况中,使得程序计数器上的递增值以使得合适的指令序列被取回的方式被改变。
根据如上概述的那样实现的本发明,可以通过平均用于预取回指令的下一行预取回中所涉及的不利方面来提高吞吐量。
附图说明
在阅读了以下描述和附图后将清楚本发明的其它目的和优点,在附图中:
图1是示出构成本发明第一实施例的一部分的处理器的典型流水线结构的示意图;
图2是示出构成第一实施例的一部分的处理器的典型块结构的示意图;
图3是示出用于第一实施例的典型指令分组结构的示意图;
图4是示出用于第一实施例的指令头部的典型字段结构的示意图;
图5是示出用于第一实施例的分支预测标志的典型设置的示意图;
图6是示出基于对指令词典表的参考的压缩通常如何被应用于第一实施例的示意图;
图7是示出在第一实施例中用于基于对指令词典表的参考的压缩的分支预测标志通常如何被改变的示意图;
图8是示出由第一实施例用来生成指令分组的典型功能结构的示意图;
图9是示出第一实施例生成指令分组的典型过程的流程图;
图10是示出由第一实施例用来执行指令的典型功能结构的示意图;
图11是示出第一实施例执行指令的典型过程的流程图;
图12是示出第一实施例的指令头部的字段结构的变体的示意图;
图13是示出结合本发明第二实施例的分支指令的放置与指令预取回起始位置之间的典型关系的示意图;
图14A和14B是示出第二实施例的涉及预取回起始地址设置寄存器的使用的配置示例的示意图;
图15是示出第二实施例的涉及指令头部中的指令预取回定时字段的使用的配置示例的示意图;
图16是示出第二实施例的涉及将预定指令执行计数用作预取回定时的配置示例的示意图;
图17是示出第二实施例的通常如何在指令头部中设置指令类型和执行计数的示意图;
图18是示出由第二实施例用来执行指令的典型功能结构的示意图;
图19是示出第二实施例执行指令的典型过程的流程图;
图20是示出结合本发明第三实施例的用于加法控制处理的程序计数器的典型功能结构的示意图;
图21是示出第三实施例的加法控制寄存器的典型结构的示意图;
图22是示出第三实施例如何通过两路分支来处理指令的示意图;
图23是示出第三实施例如何通过多向分支来处理指令的示意图;
图24A、24B、24C和24D是示出第三实施例的用于给加法控制寄存器设置值的典型指令集的示意图;
图25是示出第三实施例的如何通过条件分支指令向加法控制寄存器设置值的示意图;
图26是示出第三实施例的如何通过控制寄存器改变指令来向加法控制寄存器设置值的示意图;
图27是示出第三实施例执行指令的典型过程的流程图;
图28是示出构成本发明第四实施例一部分的处理器的典型流水线结构的示意图;
图29是示出构成第四实施例一部分的处理器的典型块结构的示意图;
图30是示出第四实施例的分支指令与缓存行之间的典型关系的示意图;
图31A和31B是示出第四实施例通常如何改变指令的放置的示意图;
图32是示出由第四实施例用来放置指令的典型功能结构的示意图;
图33是示出第四实施例放置指令的典型过程的流程图;
图34A和34B是示出第四实施例通常如何设置预取回地址寄存器的示意图;
图35是示出第四实施例用来执行指令的典型功能结构的示意图;以及
图36是示出第四实施例执行指令的典型过程的流程图。
具体实施方式
现在将描述本发明的优选实施例。将在以下标题下给出描述:
1.第一实施例(用于利用分支预测信息来控制对指令预取回的禁止)
2.第二实施例(用于控制指令预取回的定时)
3.第三实施例(用于通过以混合方式放置指令来平均指令预取回的不利方面)
4.第四实施例(用于通过固定分支目的地缓存行的放置来避免缓存行冲突)
5.实施例的组合
<1.第一实施例>
[处理器的结构]
图1是示出构成本发明第一实施例的一部分的处理器的典型流水线结构的示意图。该示例预先假设了五个流水线级:指令取回级(IF)11、指令译码级(ID)21、寄存器取回级(RF)31、执行级(EX)41以及存储器访问级(MEM)51。流水线通过缓存19、29、39和49来划界。流水线处理与时钟同步地执行。
指令取回级(IF)11包括执行指令取回处理。在指令取回级11处,程序计数器(PC)18通过加法部件12而被顺序地递增。程序计数器18所指向的指令向下游被发送给指令译码级21。此外,指令取回级11包括指令缓存(后面将讨论),指令被预取回到该指令缓存。下一行预取回部件13被用来预取回下一行,即,包含作为当前要被执行的对象的指令的缓存行之后的缓存行。
指令译码级(ID)21涉及对从指令取回级11提供来的指令进行译码。在指令译码级21处进行的译码的结果被转发给寄存器取回级(RF)31。在分支指令的情况中,指令的分支目的地地址被馈送给程序计数器(PC)18。
寄存器取回级(RF)31涉及取回指令执行所需的操作数(operand)。在许多流水线处理器中,操作数访问的对象被局限于寄存器文件。在寄存器取回级31处获取的操作数数据被提供给执行级(EX)41。
执行级(EX)41涉及利用操作数数据执行指令。例如,算术和逻辑操作以及分支确定操作被执行。在执行级(EX)41处获得的执行结果数据被存储到寄存器文件中。在存储指令的情况中,在存储器访问级(MEM)51处的存储器上执行写操作。
存储器访问级(MEM)51涉及获得对存储器的访问。在载入指令的情况中,在存储器上执行读取访问操作;在存储指令的情况中,在存储器上执行写访问操作。
图2是示出构成第一实施例一部分的处理器的典型块结构的示意图。该处理器包括处理器核110、指令缓存120、数据缓存130、下一行预取回部件150和分组(packet)解复用器160。该处理器还包括预取回队列170、指令队列180、指令词典索引(instruction dictionary index)191和指令词典表192。此外,该处理被连接到系统存储器140。
处理器核110包含除指令取回设施以外的处理器的大部分设施,并且包括程序计数器111、指令寄存器112、指令译码器113、执行部件114和寄存器文件115。程序计数器111顺序地对作为将被执行的对象的指令的地址进行向上计数。指令寄存器112保持作为程序计数器111的执行对象的指令。指令译码器113对由指令寄存器112保存的指令进行译码。执行部件114执行经指令译码器113译码的指令。寄存器文件115提供保存执行部件114执行指令所需的操作数和其它数据的存储区域。
指令缓存120是保存存储在系统存储器140中的指令的副本的缓存存储器。当处理器核110访问指令时,指令缓存120与系统存储器140相比允许处理器核110更快速地访问所关注的指令。因此,优选地,尽可能多地将指令预先保存在指令缓存120中。如果在访问指令缓存120时发现所需指令保存在指令缓存120中,则该访问称为命中(hit);如果发现所需指令未被缓存,则该访问称为未命中(miss hit)。
数据缓存130是保存存储在系统存储器140中的数据的副本的缓存存储器。当处理器核110访问数据时,数据缓存130与系统存储器140相比允许处理器核110更快速地访问该数据。因此,优选地,尽可能多地将数据预先保存在数据缓存130中。与指令缓存120一样,如果在访问数据缓存130时发现所需数据保存在数据缓存130中,则该访问称为命中;如果发现所需数据未被缓存,则该访问称为未命中。与指令缓存120不同,数据缓存130还用于写访问操作。
下一行预取回部件150用来从系统存储器140预取回下一行,即,作为被预测为将需要的指令的下一缓存行,到指令缓存120中。下一行预取回部件150与流水线结构的下一行预取回部件13相对应,并且属于指令取回级(IF)11。下一行预取回部件150监视程序计数器111的状态,并且以适当定时的方式向系统存储器140发出用于从指令缓存120预取回指令缓存120的缓存行的预取回请求。
分组解复用器160将从系统存储器140取回的指令分组划分为指令头部(header)和指令有效载荷(payload)。指令分组的结构将在后面讨论。给定指令的缓存行被包含在其指令有效载荷中。
预取回队列170是保存指令的包含在其指令有效载荷中的缓存行的队列。保存在预取回队列170中的缓存行从第一缓存行起顺序地被放入指令缓存120中。
指令队列180是保存根据程序计数器111从指令缓存120取回的指令的缓存行的队列。
指令词典索引191和指令词典表192用来基于对指令词典表的参考实现压缩指令(compression instruction)。当由被设计为高频率地出现的指令序列构成的宏首次出现时,则利用指令词典登记指令来登记该指令宏。当该宏下次出现时,则利用关于指令词典参考指令的单个指令来取代它。指令词典表192保存由一系列指令组成的每个宏。指令词典索引191用作用来访问指令词典表192的索引。如何基于对指令词典表的参考来使用压缩指令将在后面描述。
系统存储器140存储作为要执行的对象的指令以及执行所关注的指令所需的数据。处理器核110请求对系统存储器140的读或写访问操作。然而,只要在指令缓存120或数据缓存130中存在命中,该请求就不会发生。顺便提及,系统存储器140是在权利要求中描述的指令分组保存部件的示例。
在上面的块结构示例中,程序计数器111、指令缓存120、下一行预取回部件150、分组解复用器160、预取回队列170和指令队列180属于图1所示的指令取回级(IF)11。此外,指令寄存器112、指令词典索引191和指令词典表192可被当作是指令取回级(IF)11的构成部分。同样,指令译码器113属于指令译码级(ID)21。并且寄存器文件115属于寄存器取回级(RF)31。执行部件114属于执行级(EX)41。数据缓存130和系统存储器140属于存储器访问级(MEM)51。
[指令分组的结构]
图3是示出用于第一实施例的指令分组300的典型结构的示意图。指令分组300由指令头部310和指令有效载荷320组成。指令有效载荷320是容纳至少一个指令缓存行的区域。在此示例中,多达“n”(n是至少为1的整数)个指令缓存行被保存在指令有效载荷320中,每个指令缓存行为128字节。指令头部310被附接到每个指令有效载荷320并且保存与指令有效载荷320有关的信息。
图4是示出用于第一实施例的指令头部310的典型字段结构的示意图。指令头部310的第一结构示例包括分支预测标志字段311、指令预取回定时字段312、指令有效载荷压缩标志字段313、指令有效载荷长度字段314和预取回设置字段315。在此示例中,假设指令头部310为32比特长。从最低有效位(LSB)开始,分支预测标志311被指派为第0比特,接着是被指派为第1和2比特的指令预取回定时312,以及被指派为第3比特的指令有效载荷压缩标志313。此外,指令有效载荷长度314被指派为第4至第7比特,并且预取回设置315被指派为第8至第11比特。由剩余的第12至第31比特形成的20比特的未使用字段316可以用于其它目的,如后面将描述的。
分支预测标志311是指示在指令有效载荷320中存在分支指令以及该指令很有可能既不在指令有效载荷320内分支也不分支到下一指令有效载荷的字段。即,如果在预取回时下一行很有可能被发现是不想要的,则分支预测标志311通常可以指示“1”;否则,分支预测标志311可以指示“0”。顺便提及,分支预测标志311是权利要求中描述的分支预测信息的示例。
指令预取回定时312是指示执行指令预取回的定时的字段。将结合后面描述的第二实施例来讨论指令预取回定时312。顺便提及,指令预取回定时312是权利要求中描述的预取回定时信息的示例。
指令有效载荷压缩标志313是指示指令有效载荷320经过了无损压缩的字段。无损压缩是指不承受数据损失的可逆压缩类型。经过了无损压缩后,指令有效载荷320使其整个比特序列被压缩。包含在无损压缩类别中的有公知的Huffman编码、算术编码和LZ编码。如果发现指令有效载荷320已经过无损压缩,则其需要被展开;否则,指令有效载荷320的指令无法被执行。因此,如果指令有效载荷压缩标志313指示“1”,则指令在被译码之前被展开。使一个指令缓存行经过无损压缩的益处可以忽略,因为要取回的数据量未减少。只有所涉及的比特序列较长,才会提高编码效率。如果包括了分支指令,则指令分组需要被划分为基本块。
指令有效载荷长度314是指示指令有效载荷320的大小的字段。例如,指令有效载荷320的大小可以以指令缓存行计数为单位来指示。前面的示例预先假设了多达“n”个128字节的指令缓存行被存储在指令有效载荷320中。在此情况中,值“n”被设置为指令有效载荷长度314。
预取回设置315是用于预先设置作为预取回对象的地址的字段。将结合后面描述的第四实施例来讨论预取回设置315。
[分支预测标志]
图5是示出用于第一实施例的分支预测标志311的典型设置的示意图。该示例预先假设分支指令$1包括在指令分组#1的指令有效载荷中,而指令分组#2和#3中未包括分支指令。分支指令$1的分支目的地是指令分组#3的指令有效载荷内的指令地址,并且分支到该地址的概率被预测为高。因此,在此情况中,指令分组#1的指令头部中的分支预测标志311被设为“1”。另一方面,指令分组#2和#3的指令头部中的分支预测标志311被设为“0”,因为指令分组#2和#3中未包括分支指令。如后面将讨论的,分支预测标志311被假设为通常基于配置属性(profile)在编译时静态地被设置。当从指令分组#1的角度看时,下一行在指令分组#2中被发现并且分支目的地行在指令分组#3中被发现。
如上所述那样被设置的分支预测标志311在指令预取回时被参考。当被设为“1”时,分支预测标志311停止下一缓存行的预取回。这避免了被预测为不想要的指令预取回。
同时,如果连续发生了分支预测标志311被设为“1”的情况,则对指令预取回的抑制可能阻碍指令预取回设施被有效利用。为了避免连续的分支预测标志311被设为“1”的情况,有利地,可以考虑通过基于对指令词典表的参考的压缩处理来压缩分支指令之间的指令。这种基于对指令词典表的参考的压缩类型不同于与指令有效载荷压缩标志313有关的无损压缩。
[基于对指令词典表的参考的压缩]
图6是示出基于对指令词典表的参考的压缩通常如何被应用于第一实施例的示意图。图6左侧的未经压缩代码示出了如图所示那样被放置的未经压缩指令序列331至335。这里假设指令序列331、332和335是同一代码。还假设指令序列333和334是同一代码。
在图6中间的经压缩代码中,指令词典登记指令%1被放置在紧邻指令序列331之后。这种放置使得指令序列331的内容被登记在指令词典表192的区域%1(351)中。然后,当指令词典参考指令%1(342)被执行时,指令词典表192的区域%1(351)被参考,并且与指令序列332相对于的内容在被馈送给指令队列180之前被展开。
同样,在该经压缩代码中,指令词典登记指令%2被放置在紧邻指令序列333之后。这种放置使得指令序列333的内容被登记在指令词典表192的区域%2(352)中。然后,当指令词典参考指令%2(344)被执行时,指令词典表192的区域%2(352)被参考,并且与指令序列334相对于的内容在被馈送给指令队列180之前被展开。
此外,当指令词典参考指令%1(345)被执行时,指令词典表192的区域%1(351)被参考,并且与指令序列335相对于的内容在被馈送给指令队列180之前被展开。
如上所述,借助于指令词典表192实现了指令序列的压缩处理。该特征可用来改变分支预测标志311的设置,如下面将描述的。
图7是示出在第一实施例中用于基于对指令词典表的参考的压缩的分支预测标志311通常如何被改变的示意图。当如图7左侧所示的指令分组#1和#2中的分支预测标志311被设为“1”时,将不会连续地执行指令预取回。在此情况中,可以通过利用上述指令词典表192的指令压缩来作出防止分支预测标志311连续被设为“1”的尝试。
即,如图7右侧所示,分支指令$1和$2之间的指令利用指令词典表192被压缩,从而包括在指令分组#2中的分支指令$2被移到指令分组#1’中。通过如此将分支指令$2从指令分组#2中移除,可以将指令分组#2’的分支预测标志311设为“0”。
通常,基于对指令词典表的参考的压缩指令可能需要比一般指令更大数目的周期来进行译码。于是,将这种类型的压缩指令应用于所有指令可能与预期相反,将更加恶化处理能力。尽管如此,在存在特征在于其高的出现频率的指令宏的情况中,这种布置有效地提供了高的压缩效率。
[指令分组生成处理]
图8是示出由第一实施例用来生成指令分组的典型功能结构的示意图。该示例包括程序保存部件411、分支配置属性保存部件412、指令分组生成部件420、分支预测标志设置部件430、指令压缩部件440以及指令分组保存部件413。优选地,在编译时或者在链接时生成指令分组。如果在可重定位OS下执行动态链接,则还可以在执行时生成指令分组。
程序保存部件411保存将生成其指令分组的程序。分支配置属性保存部件412保存由程序保存部件411保存的程序中所包括的分支指令的分支配置属性。分支配置属性是通过预先分析或执行程序获得的。在无条件分支指令的情况中,在许多情况下可通过分析程序来判断是否执行分支。即使在条件分支指令的情况下,也可以通过执行程序来确定分支的统计概率。
指令分组生成部件420通过将保存在程序保存部件411中的程序划分为固定大小以生成指令有效载荷320并通过将指令头部310附接到所生成的指令有效载荷320,来生成指令分组300。如上所述,假设多达“n”个128字节指令缓存行被存储在指令有效载荷320中。
分支预测标志设置部件430设置由指令分组生成部件420生成的指令头部310中的分支预测标志311。通过参考保存在分支配置属性保存部件412中的分支配置属性,分支预测标志设置部件430预测包括在指令有效载荷320中的分支指令的分支目的地以及该分支指令的分支概率,以便设置分支预测标志311。如果在指令有效载荷320中发现分支指令并且如果该指令很有可能既不在指令有效载荷320内分支也不分支到下一指令有效载荷,则将“1”设置给分支预测标志311;否则将“0”设置给分支预测标志311。顺便提及,分支预测标志设置部件430是权利要求中描述的分支预测信息设置部件的示例。
指令压缩部件440对指令有效载荷320中包括的指令进行压缩。为了利用指令词典表192压缩指令,指令压缩部件440检查具有高出现频率的指令宏。当第一次检测到这样的指令宏出现时,则利用指令词典登记指令来登记该指令宏。当由指令序列构成的该指令宏下次出现时,其被关于指令词典参考指令的单个指令取代。结果,如果分支指令的放置被改变,则分支预测标志311再次被设置。如果发现整个指令有效载荷320经过了无损压缩,则指令头部310中的指令有效载荷压缩标志313被设为“1”。
指令分组保存部件413保存从指令压缩部件440输出的指令分组300。
图9是示出第一实施例生成指令分组的典型过程的流程图。
首先,指令分组生成部件420通过将保存在程序保存部件411中的程序划分为固定大小以生成指令有效载荷320并通过将指令头部310附接到所生成的指令有效载荷320,来生成指令分组300(在步骤S911中)。然后,分支预测标志设置部件430判断指令有效载荷320中是否发现了分支指令以及该指令是否很有可能既不在指令有效载荷320内分支也不分支到下一指令有效载荷(在步骤S912中)。如果判定这样的分支很有可能发生,则将“1”设置给分支预测标志311(在步骤S913中)。否则,将“0”设置给分支预测标志311。
如果判断出“1”被设置在连续的指令分组300的分支预测标志311中(在步骤S914中),则指令压缩部件440利用指令词典表192对指令有效载荷320中的指令进行压缩(在步骤S915中)。还可以使整个指令有效载荷320经过无损压缩。在此情况中,指令头部310的指令有效载荷压缩标志313被设为“1”。
[指令执行处理]
图10是示出由第一实施例用来执行指令的典型功能结构的示意图。该示例包括指令分组保存部件413、指令分组分离部件450、分支预测标志确定部件460、指令预取回部件470、指令展开部件480和指令执行部件490。
指令分组分离部件450将保存在指令分组保存部件413中的指令分组300分离为指令头部310和指令有效载荷320。
分支预测标志确定部件460参考指令头部310中的分支预测标志311以判断是否通过指令缓存120预取回下一缓存行。如果判定应当执行预取回,则分支预测标志确定部件460请求指令预取回部件470执行指令预取回。顺便提及,分支预测标志确定部件460是权利要求中描述的分支预测信息确定部件的示例。
当被分支预测标志确定部件460请求执行指令预取回时,指令预取回部件470向系统存储器140发出对下一缓存行的请求。预取回的指令被保存在指令缓存120中,并且如果指令流中未发生改变,则然后被提供给指令执行部件490。
如果发现指令头部310中的指令有效载荷压缩标志313被设为“1”,则指令展开部件480将经过了无损压缩的指令有效载荷320展开为可译码指令序列。如果未发现指令头部310中的指令有效载荷压缩标志313被设为“1”,则指令展开部件480在不进行改变的情况下输出指令有效载荷320中的指令。
指令执行部件490执行从指令展开部件480输出的指令序列。如果指令序列经过了基于对指令词典表的参考的压缩,则指令执行部件490通过执行指令词典登记指令和执行词典参考指令来展开指令。同时,在无损压缩的情况中,该指令序列无法按现状被译码;其需要被指令展开部件480展开。
图11是示出第一实施例执行指令的典型过程的流程图。
首先,保存在指令分组保存部件413中的指令分组300被指令分组分离部件450分离为指令头部310和指令有效载荷320(在步骤S921中)。然后由分支预测标志确定部件460判断指令头部310中的分支预测标志311(在步骤S922中)。如果判定“1”被设置给分支预测标志311,则指令预取回被禁止(在步骤S923中)。如果判定设置为“0”,则指令预取回部件470执行指令预取回(在步骤S924中)。
如果判断出指令头部310中的指令有效载荷压缩标志313被设为“1”(在步骤S925中),则指令展开部件480展开经过了无损压缩的指令有效载荷320(在步骤S926中)。
由此获得的指令被指令执行部件490执行(在步骤S927中)。在指令序列经过了基于对指令词典表的参考的压缩的情况中,指令执行部件490通过执行指令词典登记指令和指令词典参考指令来展开每条指令。
顺便提及,步骤S921是权利要求中描述的分离指令分组的步骤的示例。步骤S922是权利要求中描述的判断分支预测信息步骤的示例。步骤S923和S924是权利要求中描述的预取回指令步骤的示例。
根据如上所述的本发明的第一实施例,可以通过预先适当地设置分支预测标志311来禁止无用的指令预取回。
[变体]
图12是示出第一实施例的指令头部310的字段结构的变体的示意图。在图4中的字段结构示例中,第12至31比特的20个比特区域被示为未使用区域316,而图12的变体涉及使指令有效载荷的起始指令被保存在20比特的区域317中。尽管第一实施例预先假设指令集为32比特长,然而可以通过诸如从指令字段移除未使用部分以及减少操作数之类的布置来将起始指令缩小为20个比特。该20个比特的指令随后被嵌入在区域317中。由于起始指令被嵌入在区域317中,因此指令有效载荷320的大小被减小了一个指令,即减小了32个比特。
在上面的示例中,起始指令被示为被缩小为20个比特。然而,经缩小的指令的比特宽度不限于20个比特。可以与其它字段相关地适当确定该比特宽度。
<2.第二实施例>
上述第一实施例预先假设利用指令分组来管理程序。然而,这种类型的管理对于本发明第二实施例来说不是强制性的。下面将首先说明不借助于指令分组的指令预取回控制,然后说明利用指令分组的指令预取回。第二实施例的流水线结构和块结果与第一实施例的相同,因此将不进一步讨论。
[分支指令放置和指令预取回起始位置]
图13是示出根据本发明第二实施例的分支指令的放置与指令预取回起始位置之间的典型关系的示意图。在缓存行#1中发现的分支指令$1的分支目的地被包括在缓存行#3中。因此如果分支指令$1被执行并且因此分支被实现,则缓存行#1之后的缓存行#2即使被预取回也将被浪费。
现在假设缓存行#2的预取回从预取回起始位置A开始。此时,执行分支指令$1的结果是未知的,从而使得缓存行#2的预取回可能变得不必要。另一方面,如果缓存行#2的预取回从预取回起始位置B开始,则执行分支指令$1的结果是已知的,从而可以禁止对缓存行#2的无用预取回。
如上所述,预取回起始位置可以影响对下一行预取回是否得到有效地禁止的判断。根据上面给出的示例,预取回起始位置越晚,就越容易知道执行分支指令的结果,这对禁止无用预取回更加有利。另一方面,如果预取回起始位置太晚,则不能按时执行预取回,这可能引起指令流水线中的指令等待状态。出于这些考虑,第二实施例被配备有用于以预先建立的适当定时方式来执行指令预取回的设施。
[在定时被设置到预取回起始地址设置寄存器中的情况中]
图14A和14B是示出第二实施例的涉及预取回起始地址设置寄存器的使用的配置示例的示意图。如图14A所示,该配置示例包括构成下一行预取回部件150的一部分的地址比较部件154和预取回起始地址设置寄存器153。
预取回起始地址设置寄存器153用来设置每个缓存行中开始下一行预取回的地址。将设置在该预取回起始地址设置寄存器153中的地址可以是缓存行内的相对地址。假设该地址是基于(比如说)程序的分支指令频率在编译时确定的。顺便提及,预取回起始地址设置寄存器153是权利要求中描述的地址设置寄存器的示例。
地址比较部件154将预取回起始地址设置寄存器153中设置的地址与程序计数器111的内容相比较。当在关于缓存行中的相对地址的比较中检测到匹配时,地址比较部件154发出下一行预取回请求。
根据上述配置示例,缓存行中的期望位置可被选作被设置给预取回起始地址设置寄存器153的预取回起始地址。然后可由地址比较部件154来检测匹配。
图14B示出了如上所述那样设置的地址的示例。假设大约四个预取回起始位置被建立在缓存行中。当假设缓存行为128字节长时,则该缓存行可以以32字节为间隔被划分,以建立四个位置:开始(第0字节)、第32字节、第64字节(中间)以及第96字节。如果假设该指令集包含每个指令长4个字节(34个比特)的指令,则每个指令地址的二进制表示中的低位的2个比特可被忽略。因此,在此情况中,仅需要比较从第3比特到第7比特的低位的5个比特。
[指令头部的使用]
图15是示出第二实施例的涉及指令头部310中的指令预取回定时字段312的使用的配置示例的示意图。该配置示例在上面结合第一实施例说明的指令分组被使用的假设下,使用指令头部310中的指令预取回定时字段312。此外,下一行预取回部件150被构成为除了包括图14A所示的预取回起始地址设置寄存器153和地址比较部件154以外,还包括设置步长地址寄存器151和乘法部件152。
设置步长地址寄存器151用来将用于设置预取回起始地址的粒度保存为步长值。例如,如果针对如先前示例(其中,预取回起始位置被建立在缓存行的开始(第0字节)处、第32字节处、第64字节处和第96字节处)中的32个字节来设置步长值,则值“32”被保存在设置步长地址寄存器151中。
乘法部件152用来将指令预取回定时字段312中的值乘以保存在设置步长地址寄存器151中的步长值。由于如上所述,指令预取回定时字段312为2比特宽,因此该字段被补充有保存在其中的将被乘以步长地址寄存器151所指示的步长值的步长计数。因此,在指令头部310的指令预取回定时字段312中,“00”被设置来表示缓存行的开始(第0字节),“01”表示第32字节,“10”表示第64字节,并且“11”表示第96字节。乘法部件152的乘法结果被保存在预取回起始地址设置寄存器153中。
该配置的其余布置与图14A中的相同。由地址比较部件154将保存在预取回起始地址设置寄存器153中的地址与程序计数器111的内容相比较。当在关于缓存行中的相对地址的比较中检测到匹配时,地址比较部件154发出下一行预取回请求。
为了便于乘法部件152的乘法或地址比较部件154的地址比较,步长值优选地应当为2的n次幂,“n”为整数。
根据上述配置示例,可以通过利用指令头部310中的指令预取回定时字段312将预取回起始地址设置给预取回起始地址设置寄存器153。
[在将预定指令执行计数用于预取回定时的情况中]
图16是示出第二实施例的涉及将预定指令执行计数用作预取回定时的配置示例的示意图。在上述图14A、14B和15的配置示例中,缓存行中的固定位置被建立用作预取回定时。作为对比,在此配置示例中,当特定类型的指令被执行了预定次数时,预取回定时被识别出。该配置包括构成下一行预取回部件150一部分的指令类型设置寄存器155、执行计数设置寄存器156、指令类型比较部件157、执行计数器158、执行计数比较部件159。
指令类型设置寄存器155用来设置将计算其执行计数的指令的类型。可应用的指令类型可以包括诸如除法和载入指令之类的具有较长延迟的指令,以及分支指令。这里可以设置长延迟类型的指令,因为即使后续指令更多或更少地被延迟,整体的指令执行基本上不受影响。也可以设置分支类型的指令,因为存在如上面参考图13说明的分支指令的执行优选地可被等待以便确定后续指令的情况。
执行计数设置寄存器156被用来设置与指令类型设置寄存器155中设置的指令类型相对应的指令的执行计数。当相对应指令被执行了执行计数设置寄存器156中所设置的那么多次时,执行计数设置寄存器156发出下一行预取回请求。
可以根据包括在配置属性数据中的指令出现频率来在编译时静态地或者在执行时动态地确定指令类型和执行计数。
指令类型比较部件157将保存在指令寄存器112中的指令的类型与指令类型设置寄存器155中所设置的指令类型相比较以进行匹配。每当检测到匹配时,指令类型比较部件157就将计数触发输出给执行计数器158。
执行计数器158计算与指令类型设置寄存器155中设置的指令类型相对应的指令的执行计数。执行计数器158包括加法部件1581和计数值寄存器1582。加法部件1581将“1”加到计数值寄存器1582中的值中。计数值寄存器1582是保存执行计数器158的计数值的寄存器。每当指令类型比较部件157输出计数触发时,计数值寄存器1582就保存加法部件1581的输出。执行计数以这种方式来计算。
执行计数比较部件159将计数值寄存器1582中的值与执行计数设置寄存器156中的值相比较以进行匹配。当检测到匹配时,执行计数比较部件159发出下一行预取回请求。
可以提供多对指令类型设置寄存器155和执行计数设置寄存器156。在此情况中,需要分别提供执行计数器158。当在这些对中的任一对中检测到匹配时,下一行预取回请求被发出。
[指令头部的使用]
图17是示出第二实施例的通常如何在指令头部310中设置指令类型和执行计数的示意图。在图16的配置示例中,指令类型和执行计数被示为分别被设置在指令类型设置寄存器155和执行计数设置寄存器156中。替代地,这些值也可以改为被设置在指令头部310中。
在图17的示例中,指令类型被设置在指令头部310中的从第12比特到第25比特的14比特区域318中,并且执行计数被设置在从第26比特到第31比特的6比特区域319中。因此,如果区域318的值被发送给指令类型比较部件157的一个输入并且区域319的值被提供给执行计数比较部件159的一个输入,则可以利用预定指令执行计数作为预取回定时。
[指令执行处理]
图18是示出由第二实施例用来执行指令的典型功能结构的示意图。该示例包括程序执行状态生成部件510、检测状态设置部件520、指令预取回定时检测部件530、指令预取回部件570和指令执行部件590。
程序执行状态生成部件510生成当前程序的执行状态。例如,程序执行状态生成部件510可以生成保存当前执行指令的地址的程序计数器111的值,作为当前程序的执行状态。作为另一示例中,程序执行状态生成部件510可以生成保存在执行计数器158中的预定指令类型的当前执行计数。
检测状态设置部件520设置将检测其指令预取回定时的程序的执行状态。例如,作为程序执行状态,检测状态设置部件520可以将将要检测其指令预取回定时的指令的地址的至少一部分设置在预取回起始地址设置寄存器153中。作为另一示例,检测状态设置部件520可以将预定指令类型的执行计数设置在执行计数设置寄存器156中。
指令预取回定时检测部件530将当前程序的执行状态与设置在检测状态设置部件520中的程序执行状态相比较以进行匹配。在比较之后两个状态之间相匹配的情况中,指令预取回定时检测部件530检测指令预取回定时。地址比较部件154或执行计数比较部件159可被用作指令预取回定时检测部件530。
指令预取回部件570在指令预取回定时检测部件530检测到指令预取回定时时,执行下一行的指令预取回。
指令执行部件590执行指令预取回部件570获取的指令。指令执行部件590的执行结果影响由程序执行状态生成部件510生成的当前程序的执行状态。即,程序计数器111中的值和执行计数器158中的值可被更新。
图19是示出第二实施例执行指令的典型过程的流程图。
首先,将检测其指令预取回定时的程序的执行状态被设置在检测状态设置部件520中(在步骤S931中)。例如,将要检测其指令预取回定时的指令的地址或者预定指令类型的执行计数被设置在检测状态设置部件520中。
指令执行部件590随后执行指令(在步骤S932中)。指令预取回定时检测部件530检测指令预取回定时(在步骤S933中)。例如,如果所设置指令地址与程序计数器111上的值相匹配或者如果预定指令类型的执行计数与执行计数器158上的值一致,则指令预取回定时检测部件530检测到指令预取回定时。当指令预取回定时检测部件530检测到指令预取回定时时,指令预取回部件570执行指令预取回(在步骤S934中)。
根据本发明的第二实施例,可以预先设置指令预取回定时,以便控制指令预取回定时。
<3.第三实施例>
上述第一和第二实施例被示为解决了对是否禁止下一行预取回的控制。下面将描述的本发明的第三实施例以及后面将讨论的第四实施例将在下一行和分支目的地行两者被预取回的假设下操作。第三实施例的流水线结构和块结果与第一实施例的相同,因此将不进一步说明。
[程序计数器的加法控制处理]
图20是示出结合本发明第三实施例的用于加法控制处理的程序计数器的典型功能结构的示意图。该功能结构示例包括指令取回部件610、指令译码部件620、指令执行部件630、加法控制寄存器640、加法控制部件650和程序计数器660。
指令取回部件610根据程序计数器660上的值来取回作为将被执行的对象的指令。指令取回部件610对应于指令取回级11。由指令取回部件610取回的指令被提供给指令译码部件620。
指令译码部件620对由指令取回部件610取回的指令进行译码。指令译码部件620对应于指令译码级21。
指令执行部件630执行经指令译码部件620译码的指令。指令执行部件630对应于指令执行级41。下面将不会讨论所涉及的关于操作数访问的细节。
加法控制寄存器640保存用于程序计数器660的加法控制的数据。后面将说明通常是如何构成加法控制寄存器640的。
加法控制部件650基于保存在加法控制寄存器640中的数据来对程序计数器660执行加法控制。
程序计数器660对作为被执行的对象的指令的地址进行计数。因此,程序计数器660对应于程序计数器(PC)18。程序计数器660包括程序计数器值保存部件661和加法部件662。程序计数器值保存部件661是保存程序计数器的值的寄存器。加法部件662递增程序计数器值保存部件661中的值。
图21是示出第三实施例的加法控制寄存器640的典型结构的示意图。加法控制寄存器640保存递增字(incremented word)计数(incr)641和递增计数(conti)642。
递增字计数641用来保存当程序计数器值保存部件661的值被递增时使用的递增字计数。第三实施例预先假设指令的指令集中的每个指令为32比特(4字节),以使得一个字为4字节长。如果假设程序计数器660通过省略地址的低位的2个比特来以字为单位保存该地址,则一般地,在每次加法增加递增值“1”。作为对比,在第三实施例中,递增字计数641的值被加起来作为增量。如果“1”被设置给递增字计数641,则以一般方式执行操作。如果等于或大于“2”的整数被设置,则可以在一些指令被稀疏(thin out)的同时来执行操作。该操作的具体示例将在后面讨论。顺便提及,递增字计数641是权利要求中描述的递增值寄存器的示例。
递增计数642用来保存由加法部件662根据递增字计数641执行加法的次数。在一般设置中,通常增加递增值“1”。如果等于或大于“1”的整数被设置给递增计数642,则根据递增字计数641来执行加法。替代地,未示出的减法部件可以在每次指令被执行时从递增计数642中减去“1”,直到使递增计数642为“0”为止。作为另一替代,可以提供一单独的计数器,在每次指令被执行时该计数器被递减“1”,直到该计数器上的值变为“0”为止。在任一情况中,当根据递增字计数641执行加法达递增计数642所指定的次数之后,递增值为“1”的通常加法被恢复。顺便提及,递增计数642是权利要求中描述的改变指示寄存器的示例。
[指令如何被执行]
图22是示出第三实施例如何通过两路分支来处理指令的示意图。如果假设参考字符A表示用于两路分支的分支指令的地址,则不经过分支的指令序列可被布置为具有按如下顺序排列的指令“A+4”、“A+12”、“A+20”、“A+28”、“A+36”、“A+44”、“A+52”、“A+60”等。另一方面,经过分支的指令序列可被布置为具有按如下顺序排列的指令“A+8”、“A+16”、“A+24”、“A+32”、“A+40”、“A+48”、“A+56”、“A+64”等。即,不经过分支的指令序列和经过分支的指令序列被彼此交替布置。
在上面的两路分支情况中,当两个指令序列中的每个指令序列的起始指令被执行时,“2”被设置给递增字计数641并且各个指令序列中的指令的数目被设置给递增计数642。该布置使得能够仅执行彼此交替的两个指令序列中的一个。
图23是示出第三实施例如何通过多向分支(multidirectional branching)来处理指令的示意图。尽管图23所示的技术是处理三路分支的示例,然而,还可将同一技术应用于四路或更多路分支的情况。如果假设参考字符A表示用于三路分支的分支指令的地址,则第一指令序列可被布置为具有按如下顺序排列的指令“A+4”、“A+16”、“A+28”、“A+40”、“A+52”、“A+64”、“A+76”等。第二指令序列可被布置为具有按如下顺序排列的指令“A+8”、“A+20”、“A+32”、“A+44”、“A+56”、“A+68”、“A+80”等。并且第三指令序列可被布置为具有按如下顺序排列的指令“A+12”、“A+24”、“A+36”、“A+48”、“A+60”、“A+72”、“A+84”等。即,第一至第三指令序列构成了彼此相距一个指令的三个错开的指令序列。
在上面三路分支的情况中,当每个指令序列的起始指令被执行时,“3”被设置给递增字计数641并且各个指令序列中的指令的数目被设置给递增计数642。该布置使得能够仅执行彼此相距一个指令的错开指令的指令序列中的一个指令序列。
[加法控制寄存器中的设置]
图24A、24B、24C和24D是示出第三实施例的用于给加法控制寄存器640设置值的典型指令集的示意图。图24A示出了第三实施例使用的典型指令格式。该指令格式由六比特的操作码(OPCODE)、五比特的第一源操作数(rs)、五比特的第二源操作数(rt)、五比特的目的地操作数(rd)和11比特的中间字段(imm)构成。
图24B示出了第三实施例使用的典型操作码的表。操作码的高位的3比特在表的垂直方向上示出,并且其低位的3比特在水平方向上指示出。在随后的说明中,将着重于操作码表右下角示出的条件分支指令和操作码为“100111”的控制寄存器改变指令。
图24C示出了条件分支指令的典型指令格式。这种类型的典型条件分支指令有该表中示出的BEQfp、BNEfp、BLEfp、BGTZfp、BLTZfp、BGEZfp、BTLZALfp和BGEZALfp。参考字符B代表“分支”;B之后的EQ表示“相等”,即,表示两个源操作数的值是否相等的分支条件(rs=rt);B之后的NE表示“不相等”,即,表示两个源操作数的值是否不相等的分支条件(rs≠rt);B之后的LE指示“小于或等于”,即,表示第一源操作数是否小于或等于第二源操作数的分支条件(rs≤rt);B之后的GTZ代表“大于零”,即,代表第一源操作数大于零的分支条件(rs>0);B之后的LTZ表示“小于零”,即,表示第一源操作数小于零的分支条件(rs<0);B之后的GEZ表示“大于或等于零”,即,表示第一源操作数是否大于或等于零的分支条件(rs≥0);BLTZ和BGEZ之后的AL表示“分支和链接”,即,表示在分支时保留返回地址的操作;并且这些缩写词的每个之后的“fp”代表“浮点数”,即指示两个源操作数的值都是浮点数。被给定作为目的地操作数的递增字计数“incr”是用来递增程序计数器660的值的递增字计数。被给定作为中间字段的递增计数“conti”表示程序计数器660根据递增字计数“incr”执行加法的次数。当这些条件分支指令被执行时,在加法控制寄存器640中,递增字计数“incr”被设置给递增字计数641并且递增计数“conti”被设置给递增计数642。
图24D示出了控制寄存器改变指令PCINCMODE的典型指令结构。控制寄存器改变指令PCINCMODE是将程序计数器660的递增模式设置给加法控制寄存器640的指令。执行该控制寄存器改变指令PCINCMODE可以在加法控制寄存器640中将递增字计数“incr”设置给递增字计数641并将递增计数“conti”设置给递增计数642。控制寄存器改变指令PCINCMODE是与条件分支指令不同的指令。实际上,控制寄存器改变指令PCINCMODE与条件分支指令联合使用。
图25是示出第三实施例的如何通过条件分支指令向加法控制寄存器640设置值的示意图。在此示例中,条件分支指令BEQfp具有在其中指定的分支条件:“rs=rt”、递增字计数“2”以及递增计数“L/2”。假设该条件分支指令BEQfp的指令字地址用“m”表示。在此假设下,如果分支条件“rs=rt”被满足,则基于递增字计数“2”按照如下顺序执行指令:“m+2”、“m+4”、“m+6”...,直到“m+L”。另一方面,如果分支条件“rs=rt”未被满足,则基于递增字计数“2”按照如下顺序执行指令:“m+1”、“m+3”、“m+5”...,直到“m+(L-1)”。
图26是示出第三实施例的如何通过控制寄存器改变指令PCINCMODE向加法控制寄存器640设置值的示意图。在此示例中,控制寄存器改变指令PCINCMODE被放置在紧邻未对加法控制寄存器640进行设置的一般性条件分支指令之后。控制寄存器改变指令PCINCMODE被示为具有在其中指定的递增字计数“2”和递增计数“L/2”。这里也假设控制寄存器改变指令PCINCMODE的指令字地址用“m”来表示。在此假设下,如果条件分支指令的分支条件被满足,则基于递增字计数“2”按照如下顺序执行指令:“m+2”、“m+4”、“m+6”...,直到“m+L”。另一方面,如果条件分支指令的分支条件未被满足,则基于递增字计数“2”按照如下顺序执行指令:“m+1”、“m+3”、“m+5”...,直到“m+(L-1)”。
[指令执行处理]
图27是示出第三实施例执行指令的典型过程的流程图。这里假设已预先利用上述条件分支指令和控制寄存器改变指令等完成了对加法控制寄存器640的递增字计数和递增计数的设置。
如果加法控制寄存器640中的递增计数642大于零(在步骤S941中),则由加法部件662将由程序计数器660将递增字计数641乘以“4”获得的值加到程序计数器值保存部件661中(在步骤S942中)。在此情况中,加法控制寄存器640中的递增计数642被递减“1”(在步骤S943中)。如果加法控制寄存器640中递增计数642不大于零(在步骤S941中),则由加法部件662将程序计数器660上的值“4”加到程序计数器值保存部件661中(在步骤S944中)。重复上面的步骤。顺便提及,步骤S942是改变递增加法步骤的示例,并且步骤S944是一般性递增加法步骤的示例,这两个步骤都在权利要求中被描述。
根据如上所述的本发明的第三实施例,通过以混合的方式以指令为单位在分支之后放置多个指令序列并且通过根据分支条件控制程序计数器的加法来执行适当指令序列的指令。这使得能够以适当的混合方式来放置下一行和分支目的地行,从而平均了指令预取回操作中涉及的不利方面。
<4.第四实施例>
[处理器的结构]
图28是示出构成本发明第四实施例一部分的处理器的典型流水线结构的示意图。假设第四实施例的基本流水线结构由五个流水线级组成,与上述第一实施例一样。
上述第一实施例被示为让下一行预取回部件13执行下一行预取回,然而第四实施例使得下一行分支目的地行预取回部件14预取回下一行和分支目的地行。即,预取回的不仅有下一行,即,包含作为当前要执行的对象的指令的缓存行之后的缓存行,而且还有分支目的地行,该分支目的地行是包括分支目的地指令的缓存行。由下一行分支目的地行预取回部件14预取回的分支目的地行被保存在预取回队列17中。保存在预取回队列17中的分支目的地行被提供给指令译码级(ID)21。由于下一行直接从指令缓存被馈送,因此下一行不必经由预取回队列17处理。
图29是示出构成第四实施例一部分的处理器的典型块结构的示意图。第四实施例的基本块结构与上述第一实施例的相同。
上述第一实施例被示为让下一行预取回部件150预取回下一行,然而第四实施例使得下一行分支目的地行预取回部件250预取回下一行和分支目的地行。此外,将预取回队列171与指令缓存120并置,以使得可将分支目的地行直接从预取回队列171馈送给指令寄存器112。即,如果分支发生,则来自预取回队列171的指令被提供,由此旁路(bypass)将从指令缓存120馈送的指令。该布置允许指令被连续地发出而不会中断流水线。顺便提及,下一行分支目的地行预取回部件250是预取回部件的示例并且预取回队列171是预取回队列的示例,它们两个都在权利要求中被描述到。
由于不强制第四实施例将指令划分为指令分组,因此从块结构中排除了该设施。此外,基于对指令词典表的参考的压缩对于第四实施例来说不是强制性的,以使得可从块结构中排除该设置。这些设施可以根据需要被组合地实现。
[分支指令与缓存行之间的关系]
图30是示出第四实施例的分支指令与缓存行之间的典型关系的示意图。
包含有作为当前将执行的对象的指令的缓存行称为当前行,并且紧邻当前行之后的缓存行称为下一行。包含有当前行中所包括的分支指令的分支目的地指令的缓存行称为分支目的地行。在此示例中,分支指令被放置在当前行的末尾。该放置旨在使下一行和分支目的地行在当前行的起始指令被执行时被预取回,以使得这两行将在分支指令被执行之前已被预取回。因此,可以不必将分支指令放置在当前行的末尾。如果位于当前行的至少后半部分,则在一些情况中,可以赶在该分支指令被达到时完成预取回。
如果分支指令被放在当前行的末尾并且如果该分支指令的分支条件未得到满足并且因此分支未发生,则需要下一行。如果分支条件得到满足并且因此分支发生,则需要分支目的地行。因此,为了成功地执行预取回而不管分支条件是否得到满足,优选地,预取回下一行和分支目的地行两者。第四实施例让下一行分支目的地行预取回部件250预取回这两行,以便在独立于分支条件是否得到满足的情况下连续地执行指令。在此情况中,优选地,吞吐量应当为常规设置的两倍以预取回两行,但这不是强制性的。
考虑到指令缓存120中的缓存行的冲突,优选地,对分支目的地行的放置施加约束。例如,在指令缓存120基于直接映射原理操作时,如果试图同时缓存具有相同行地址的缓存行,则它们将彼此冲突。在此情况中,如果预取回的下一行在紧邻具有相同行地址的预取回的分支目的地行之后,则下一行被驱动出指令缓存120。在两路设置相关联原理有效时,这样的冲突的可能性被减小。尽管如此,取决于缓存状态,预取回的分支目的地行可能影响其它缓存行。因此,在第四实施例中,假设指令缓存基于作为最严格条件的直接映射原理操作。于是,分支目的地行的放置由编译器或链接器以使得下一行和分支目的地行不具有相同行地址的方式来调节。
当指令地址的放置将被编译器或链接器改变时,以下说明的技术可被用作示例。这里假设有如下所示的指令序列,其中,“0x”之后的数字是十六进制数。
0x0000:指令A
0x0004:指令B
0x0008:指令C
如果希望上面的指令序列中的指令的放置被向后位移4字节,则NOP(无操作)指令可被插入序列中,如下:
0x0000:NOP指令
0x0004:指令A
0x0008:指令B
0x000C:指令C
如果指令A是在被执行时使得多个操作被执行的指令,则指令A可被划分为如下所示的指令AA和指令AB。该布置也可以将上述指令序列中的指令的放置向后位移4字节。
0x0000:指令AA
0x0004:指令AB
0x0008:指令B
0x000C:指令C
图31A和31B是示出第四实施例通常如何改变指令的放置的示意图。如图31A所示,考虑这样的程序,其中,指令序列A和B后跟随有分支到指令序列D或指令序列E以进行处理的分支指令C,然后是指令序列F的处理。在此情况中,如果指令序列B的结果不影响分支指令C的分支条件,则可将分支指令C移到紧邻指令序列A之后,同时将指令序列B放在分支目的地处,如图31B所示。以这种方式,可以在不影响执行结果的情况下改变指令的放置。
[指令放置处理]
图32是示出用于由第四实施例放置指令的典型功能结构的示意图。该功能结构示例预先假设目标代码是由保存在程序保存部件701中的程序生成的并且所生成的目标代码被保存在目标代码保存部件702中。该结构示例包括分支指令提取部件710、分支指令放置部件720、分支目的地指令放置部件730和目标代码生成部件740。
分支指令提取部件710从保存在程序保存部件701中的程序中提取分支指令。分支指令提取部件710在程序中获取所提取分支指令的地址,并且将地址提供给分支指令放置部件720。此外,分支指令提取部件710获取所提取分支指令的分支目的地地址,并且将该分支目的地地址馈送给分支目的地指令放置部件730。
分支指令放置部件720将由分支指令提取部件710提取出的分支指令放置在缓存行(当前行)的后半部分。分支指令被放置在缓存行的后半部分以使得将在分支指令被达到之前完成预取回,如上面讨论的。从该角度来说,最好将分支指令放在缓存行的末尾。
分支目的地指令放置部件730将由分支指令提取部件710提取出的分支指令的分支目的地指令放置在具有与下一缓存行(下一行)的行地址不同的行地址的另一缓存行(分支目的地行)中。下一行和分支目的地行被放置在具有不同行地址的不同缓存行中,以避免指令缓存120中的冲突,如上面说明的。
目标代码生成部件740生成包含由分支指令放置部件720和分支目的地指令放置部件730放置在其中的分支指令和分支目的地指令的指令序列的目标代码。由目标代码生成部件740生成的目标代码被保存在目标代码保存部件702中。顺便提及,目标代码生成部件740是权利要求中描述的指令序列输出部件的示例。
图33是示出第四实施例放置指令的典型过程的流程图。
首先,分支指令提取部件710从保存在程序保存部件701中的程序中提取分支指令(在步骤S951中)。由分支指令放置部件720将由分支指令提取部件710提取出的分支指令放置在缓存行(当前行)的后半部分(在步骤S952中)。由分支目的地指令放置部件730将由分支指令提取部件710提取出的分支指令的分支目的地指令放置在具有与下一缓存行(下一行)的行地址不同的行地址的另一缓存行(分支目的地行)中(在步骤S953中)。目标代码生成部件740然后生成包含由分支指令放置部件720和分支目的地指令放置部件730放置在其中的分支指令和分支目的地指令的指令序列的目标代码(在步骤S954中)。
顺便提及,步骤S951是分支指令提取步骤的示例;步骤S952是分支指令放置步骤的示例;步骤S953是分支目的地指令放置步骤的示例;并且步骤S954是指令序列输出步骤的示例,所有这些步骤在权利要求中被描述。
[预取回地址的设置]
图34A和34B是示出第四实施例通常如何设置预取回地址寄存器的示意图。如上面讨论的,分支目的地行被放置在与下一行的行地址不同的行地址处。分支目的地行可以利用相对于当前行的位置以永久固定的方式被预取回,然而,替代地,如下面将描述的,可以在每当分支发生时,以自动方式来设置分支目的地地址。
图34A示出了预取回地址寄存器(PRADDR)790的典型结构。预取回地址寄存器790用来设置从其将分支目的地行预取回到指令缓存120中的预取回地址。预取回地址被保存在预取回地址寄存器790的低位的12个比特中。
图34B示出了用于为预取回地址寄存器790设置值的MTSI_PRADDR(Move To Special Register Immediate-PRADDR)指令的指令格式。MTSI_PRADDR指令是特殊(special)指令之一并且用来向特定寄存器(在此情况中为预取回地址寄存器790)设置立即值(immediate value)。该指令的第17至第21比特表示预取回地址寄存器PRADDR。该指令的第11至第8比特被设置给预取回地址寄存器790的第11至第8比特。这些设置建立了将被预取回的分支目的地行的地址。这里假设指令缓存120是4K字节的缓存,其基于两路设置相关联原理并且提供总共16行(每路8行)以构成256字节的条目大小。
作为另一示例,可以借助于上面结合第一实施例说明的划分为指令分组300并且利用指令头部310的预取回设置字段315。在此情况中,图4的指令头部310中的从第11比特到第8比特的预取回设置字段315被设置给预取回地址寄存器的第11至第8比特。这使得能够在不求助于特殊指令的情况下设置作为要预取回的对象的分支目的地行的地址。
[指令执行处理]
图35是示出第四实施例用来执行指令的典型功能结构的示意图。该结构示例预先假设基于检测到的程序计数器111的状态将行预取回了指令缓存120和预取回队列171。该结构示例包括预取回定时检测部件750、下一行预取回部件760和分支目的地预取回部件770。这些组件对应于块结构中的下一行分支目的地行预取回部件250。
预取回定时检测部件750通过参考程序计数器111的状态来检测指令预取回定时。在第四实施例中,优选地,在较早阶段开始预取回以便在两路中预取回下一行和分支目的地行。因此,可以在(比如说)缓存行的起始指令开始被执行时检测到指令预取回定时。
下一行预取回部件760预取回下一行。从系统存储器140预取回的下一行被存储到指令缓存120中。
分支目的地预取回部件770预取回分支目的地行。相对于当前行处于固定位置处的缓存行可被用作分支目的地行。替代地,可以使用设置在上述预取回地址寄存器790中的地址。从系统存储器140预取回的分支目的地行被存储到指令缓存120和预取回队列171中。
图36是示出第四实施例执行指令的典型过程的流程图。
首先,预取回定时检测部件750检测缓存行的起始指令开始被执行(在步骤S961中)。然后,下一行预取回部件760预取回下一行(在步骤S962中)。分支目的地预取回部件770预取回分支目的地行(在步骤S963中)。重复这些步骤,由此下一行和分支目的地行的指令序列在两路中被预取回。
根据如上所述的本发明的第四实施例,分支目的地行被布置为具有与下一行的行地址不同的行地址,以使得下一行和分支目的地行的指令序列在两路中被预取回。这种结构有助于提高吞吐量。
<5.实施例的组合>
前面的段落分别讨论了本发明的第一至第四实施例。替代地,这些实施例可以以各种各样的组合的形式来实现。
[第一实施例与第二实施例的组合]
第一实施例被示为根据指令头部310中的分支预测标志311来判断师傅执行预取回。为了避免判断中的失败预测,可将第一实施例与第二实施例有效组合。即,第二实施例用来延迟预取回的判定以便预先清楚地确定分支存在与否,由此使得正确的缓存行被预取回。
[第一或第二实施例与第三实施例的组合]
第三实施例在两路中执行预取回。这意味着难以将第三实施例应用于一些情况,例如分支指令具有地址很远的分支目的地的情况以及“if”语句没有“else”子句的情况。例如,如果所有的多向分支情况不具有相同数目的指令,则需要插入NOP指令直到对于所有情况指令数目变得相同为止。在较长指令序列的情况中,指令执行的吞吐量和使用缓存的效率往往会降低。作为针对这些难题的对策,可以在发现分支到遥远地址的可能性高的情况中使用第一实施例的分支预测标志311来禁止两路预取回。该布置避免了第三实施例的缺点。还可以利用延迟指令预取回定时以便预先清楚地确定分支存在与否的第二实施例来避免第三实施例的缺点,从而使得无用预取回得到抑制。
[第一或第二实施例与第四实施例的组合]
第四实施例被示为总是预取回下一行和分支目的地行。该结构承受了如下缺点:如果当前行不包含分支指令,则将无用地预取回分支目的地行。因此,第一实施例的分支目的地标志311被用来确定执行下一行的可能性。如果基于分支目的地标志311发现执行下一行的可能性为高,则仅下一行被预取回。该布置避免了第四实施例的缺点。还可以利用延迟指令预取回定时以便预先清楚地确定分支存在与否的第二实施例来避免第四实施例的缺点,从而使得无用预取回得到抑制。
[第三实施例与第四实施例的组合]
第四实施例被示为在两路中预取回下一行和分支目的地行。当第三实施例也被组合地使用时,可以在三路或更多路中执行多向分支。即,通过在两路中预取回多个指令序列共同存在于其中的缓存行,可以实现多向分支。
在上面的组合中,第三实施例可被应用于具有有限范围的分支的情况,例如具有有限范围的行大小的情况,而第四实施例可用来处理更广范围的分支。第三和第四实施例的选择性实现方式可以避免它们两者的缺点。即,第四实施例具有在保持执行吞吐量不减少的情况下总是以一半的效率来使用指令缓存的缺点。第三实施例具有当被应用于广范围的分支时不太有效的缺点。由此可将这两个实施例相组合以抵消它们的缺点。
[其它组合]
上面概述的那些组合以外的实施例的组合也可被实现来增强个体实施例的效果。例如,第一或第二实施例的、第三实施例的,以及第四实施例的组合加强了所涉及实施例的效果。
上述实施例及其变体仅仅是可以实现本发明的示例。如从上面可清楚的,优选实施例的描述中的实施例及其变体的细节基本上对应于权利要求中要求保护的发明事项。同样,权利要求中指明的发明事项基本上对应于优选实施例的描述中具有相同名称的细节。然而,本发明的这些实施例及其变体以及其它示例不是对本发明的限制,并且本领域技术人员应当明白,可以根据设计要求和其它因素进行各种修改、组合、子组合和变更,只要它们在权利要求或其等同物的范围之内。
此外,上面讨论的作为实施例一部分的步骤和处理的序列可被解释为用于执行这些步骤和处理的方法、用于使得计算机执行这些方法的程序,或者存储这些程序的记录介质。记录介质的示例包括CD(致密盘)、MD(迷你盘)、DVD(数字通用光盘))、存储卡以及蓝光盘(注册商标)。
本申请包含与2010年3月29日向日本专利局提交的日本优先专利申请JP 2010-075782中公开的内容有关的主题,该申请的全部内容通过引用结合于此。

Claims (6)

1.一种指令取回装置,包括:
程序计数器,被配置为管理程序中作为执行对象的指令的地址,在所述程序中,属于多个指令序列的指令顺序地被放置;
改变指示寄存器,被配置为指示对所述程序计数器上的递增值的改变;
递增值寄存器,被配置为保存改变后的递增值;以及
加法控制部件,被配置为使得如果所述改变指示寄存器指示了对所述程序计数器上的所述递增值的改变,则所述加法控制部件基于保存在所述递增值寄存器中的所述改变后的递增值来递增所述程序计数器,如果所述改变指示寄存器未指示对所述程序计数器上的所述递增值的任何改变,则所述加法控制部件每一指令字长度使所述程序计数器递增。
2.根据权利要求1所述的指令取回装置,其中,每当所述程序计数器基于保存在所述递增值寄存器中的所述改变后的递增值被递增时,所述改变指示寄存器被递减,如果所述改变指示寄存器指示正数,则所述改变指示寄存器指示对所述程序计数器的所述递增值的改变。
3.根据权利要求2所述的指令取回装置,其中,所述递增值寄存器将所述指令序列的数目保存为所述改变后的递增值。
4.根据权利要求3所述的指令取回装置,其中,当在预定数目的方向上分支的分支指令被执行之后,所述递增值寄存器将所述预定数目保存作为所述指令序列的数目。
5.一种处理器,包括:
程序计数器,被配置为管理程序中作为执行对象的指令的地址,在所述程序中,属于多个指令序列的指令顺序地被放置;
改变指示寄存器,被配置为指示对所述程序计数器上的递增值的改变;
递增值寄存器,被配置为保存改变后的递增值;
加法控制部件,被配置为使得如果所述改变指示寄存器指示了对所述程序计数器上的所述递增值的改变,则所述加法控制部件基于保存在所述递增值寄存器中的所述改变后的递增值来递增所述程序计数器,如果所述改变指示寄存器未指示对所述程序计数器上的所述递增值的任何改变,则所述加法控制部件每一指令字长度使所述程序计数器递增;以及
指令执行部件,被配置为执行由所述程序计数器指示的指令。
6.一种用于处理器中的程序计数器加法控制方法,所述处理器具有被配置为管理作为将被执行的对象的指令的地址的程序计数器、被配置为指示对所述程序计数器上的递增值的改变的改变指示寄存器、以及被配置为保存改变后的递增值的递增值寄存器,所述程序计数器加法控制方法包括以下步骤:
如果所述改变指示寄存器指示了对所述程序计数器上的所述递增值的改变,则基于保存在所述递增值寄存器中的所述改变后的递增值来递增所述程序计数器;以及
如果所述改变指示寄存器未指示对所述程序计数器上的所述递增值的任何改变,则每一指令字长度使所述程序计数器递增。
CN2011100733136A 2010-03-29 2011-03-22 指令取回装置、处理器和程序计数器加法控制方法 Pending CN102207848A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2010-075782 2010-03-29
JP2010075782A JP2011209905A (ja) 2010-03-29 2010-03-29 命令フェッチ装置、プロセッサ、および、プログラムカウンタ加算制御方法

Publications (1)

Publication Number Publication Date
CN102207848A true CN102207848A (zh) 2011-10-05

Family

ID=44657675

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2011100733136A Pending CN102207848A (zh) 2010-03-29 2011-03-22 指令取回装置、处理器和程序计数器加法控制方法

Country Status (3)

Country Link
US (1) US8650385B2 (zh)
JP (1) JP2011209905A (zh)
CN (1) CN102207848A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023124370A1 (zh) * 2021-12-30 2023-07-06 上海商汤智能科技有限公司 指令同步装置、芯片和计算机设备,数据处理方法

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP6016689B2 (ja) * 2013-03-28 2016-10-26 ルネサスエレクトロニクス株式会社 半導体装置
US10795681B2 (en) * 2014-12-23 2020-10-06 Intel Corporation Instruction length decoding
US10296463B2 (en) * 2016-01-07 2019-05-21 Samsung Electronics Co., Ltd. Instruction prefetcher dynamically controlled by readily available prefetcher accuracy
US10198260B2 (en) 2016-01-13 2019-02-05 Oracle International Corporation Processing instruction control transfer instructions
US10942742B1 (en) * 2018-12-11 2021-03-09 Amazon Technologies, Inc. Hardware engine with configurable instructions
JP7485086B2 (ja) 2020-12-10 2024-05-16 日本電信電話株式会社 命令処理方法及び命令処理回路

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5724563A (en) * 1995-04-12 1998-03-03 Matsushita Electric Industrial Co., Ltd. Pipeline processsor
CN1484787A (zh) * 2000-10-05 2004-03-24 Arm 处理器流水线中的硬件指令翻译
US7346741B1 (en) * 2005-05-10 2008-03-18 Sun Microsystems, Inc. Memory latency of processors with configurable stride based pre-fetching technique

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH04327237A (ja) 1991-04-18 1992-11-16 Unitika U M Glass Kk バグフィルター用クロス

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5724563A (en) * 1995-04-12 1998-03-03 Matsushita Electric Industrial Co., Ltd. Pipeline processsor
CN1484787A (zh) * 2000-10-05 2004-03-24 Arm 处理器流水线中的硬件指令翻译
US7346741B1 (en) * 2005-05-10 2008-03-18 Sun Microsystems, Inc. Memory latency of processors with configurable stride based pre-fetching technique

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023124370A1 (zh) * 2021-12-30 2023-07-06 上海商汤智能科技有限公司 指令同步装置、芯片和计算机设备,数据处理方法

Also Published As

Publication number Publication date
JP2011209905A (ja) 2011-10-20
US8650385B2 (en) 2014-02-11
US20110238952A1 (en) 2011-09-29

Similar Documents

Publication Publication Date Title
CN102207853A (zh) 指令获取设备和处理器
CN102207848A (zh) 指令取回装置、处理器和程序计数器加法控制方法
US20020144101A1 (en) Caching DAG traces
US6675376B2 (en) System and method for fusing instructions
EP2850515B1 (en) Fusing conditional write instructions having opposite conditions in instruction processing circuits, and related processor systems, methods, and computer-readable media
KR101851439B1 (ko) 충돌 검출을 수행하고, 레지스터의 콘텐츠를 다른 레지스터의 데이터 구성요소 위치들로 브로드캐스트하기 위한 시스템들, 장치들 및 방법들
CN109643237B (zh) 分支目标缓冲器压缩
US10666288B2 (en) Systems, methods, and apparatuses for decompression using hardware and software
US20200225956A1 (en) Operation cache
JP2003523573A (ja) プロセッサにおける書き込みトラヒックを減少するシステム及び方法
TW202001586A (zh) 組合載入或儲存指示
WO2010128582A1 (ja) プロセッサ
CN101911016A (zh) 执行相对指令
CN103078646B (zh) 字典查询压缩、解压缩方法及其装置
CN113703832A (zh) 一种立即数转移指令的执行方法、装置及介质
WO2018059337A1 (zh) 数据处理装置和方法
CN103336681B (zh) 针对采用变长指令集的流水线结构处理器的取指方法
US5276825A (en) Apparatus for quickly determining actual jump addresses by assuming each instruction of a plurality of fetched instructions is a jump instruction
US20200210193A1 (en) Hardware profiler to track instruction sequence information including a blacklisting mechanism and a whitelisting mechanism
CN101714076B (zh) 对指令束进行解压缩的处理器和方法
JP3762816B2 (ja) マイクロプロセッサにおける早期例外を追跡するシステム及び方法
US20140189322A1 (en) Systems, Apparatuses, and Methods for Masking Usage Counting
CN101911014A (zh) 旋转然后插入所选比特的工具以及由此的指令
EP2469858B1 (en) Apparatus and method for sequentially parsing bitstreams based on removal of emulation prevention byte
US20060015706A1 (en) TLB correlated branch predictor and method for use thereof

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C05 Deemed withdrawal (patent law before 1993)
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20111005