CN105183429A - 解码被一个或多个其它指令修改的指令 - Google Patents

解码被一个或多个其它指令修改的指令 Download PDF

Info

Publication number
CN105183429A
CN105183429A CN201510247606.XA CN201510247606A CN105183429A CN 105183429 A CN105183429 A CN 105183429A CN 201510247606 A CN201510247606 A CN 201510247606A CN 105183429 A CN105183429 A CN 105183429A
Authority
CN
China
Prior art keywords
instruction
elementary
prefix
determining
decoding unit
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
Application number
CN201510247606.XA
Other languages
English (en)
Other versions
CN105183429B (zh
Inventor
詹姆斯·罗伯特·惠特克
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hai Luo Software Co ltd
Imagination Technologies Ltd
Original Assignee
Imagination Technologies Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of CN105183429A publication Critical patent/CN105183429A/zh
Application granted granted Critical
Publication of CN105183429B publication Critical patent/CN105183429B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

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/30181Instruction operation extension or modification
    • G06F9/30196Instruction operation extension or modification using decoder, e.g. decoder per instruction set, adaptable or programmable decoders
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • 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
    • 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/30149Instruction analysis, e.g. decoding, instruction word fields of variable length 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/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3818Decoding for concurrent execution

Landscapes

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

Abstract

本发明涉及解码被一个或多个其它指令修改的指令。用于对计算机程序中的指令进行解码的方法和装置,其中,指令包括由一个或多个其它指令进行修改的一个或多个基本指令。在例子中,在解码器处接收第一指令。解码器确定第一指令是否通过程序计数器的非递增变化(即程序中的跳转)而得到。如果第一指令通过程序计数器的非递增变化而得到,则解码器对紧靠的前面的指令解码以确定原始指令是否是基本指令(即由一个或多个其它指令进行修改的指令)。如果前面的指令指示原始指令是基本指令,则错误出现且异常处理代码被调用。

Description

解码被一个或多个其它指令修改的指令
背景
计算机指令集用于将中央处理单元(CPU)执行的一组操作编码在程序内。最小化用于存储这些指令的存储器量是合乎需要的。例如,一个指令集可使用32比特来对指令编码。32比特的使用提供对富指令集的编码,但不允许更常见的操作使用更少的比特来被编码。另一指令集可使用16比特来对指令编码。16比特的使用提供高代码密度,但限制可被编码的指令的数量。
可使用较短的指令(例如16比特)来编码的有限数量的指令的一个解决方案是允许前面的指令修改当前指令的含义。前面的修改指令被称为前缀指令。以这种方式,常见的操作使用单个指令(例如16比特),而较不常见的指令使用两个指令(例如具有总共32比特的一个前缀指令和一个基本指令)。这提供在代码密度和指令的丰富性之间的良好折衷。
下面描述的实施方式仅作为例子被提供且不是解决已知计算机的任何或所有缺点的实现的限制。
发明内容
本发明内容被提供以介绍下面在具体实施方式中进一步描述的简化形式的一系列概念。该发明内容并不打算表明所主张的主题的关键特征或本质特征,其也不打算用作在确定所主张的主题的范围时的帮助。
方法和装置用于对计算机程序中的指令解码,其中所述指令包括由一个或多个其它指令进行修改的一个或多个基本指令。在例子中,在解码器处接收第一指令。解码器确定第一指令是否通过程序计数器的非递增变化(即程序中的跳转)而得到。如果第一指令通过程序计数器的非递增变化而得到,则解码器对紧靠的前面的指令解码以确定原始指令是否是基本指令(即由一个或多个其它指令进行修改的指令)。如果前面的指令指示原始指令是基本指令,则错误出现且异常处理代码被调用。
第一方面提供了在解码单元处对计算机程序的指令解码的方法,该方法包括:在解码单元处接收第一指令;在解码单元处确定第一指令是否通过程序计数器的非递增变化来调用;响应于确定第一指令通过程序计数器的非递增变化来调用,从取指单元请求第二指令,第二指令是紧靠程序中的第一指令的前面的指令;在解码单元处从取指单元接收第二指令;在解码单元处分析第二指令以确定第一指令是否是基本指令;以及响应于确定第一指令是基本指令,调用异常处理代码。
第二方面提供了在解码单元处对计算机程序的指令解码的方法,该方法包括:在解码单元处接收指令,指令包括至少一个修改符比特,修改符比特指示指令是否是基本指令,基本指令是由一个或多个其它指令进行修改的指令;在解码单元处分析至少一个修改符比特以确定所接收的指令是否是基本指令;响应于确定所接收的指令是基本指令,在解码单元处确定是否存在基本指令的预定数量的存储的前缀指令;以及响应于确定不存在基本指令的预定数量的存储的前缀指令,调用异常处理器代码。
第三方面提供了在解码单元处对计算机程序中的指令解码的方法,该方法包括:在解码单元处接收第一指令;从取指单元请求至少一个附加指令,所述至少一个附加指令中的每个指令跟随程序中的第一指令;在解码单元处接收所述至少一个附加指令,所述至少一个附加指令包括第一附加指令;确定第一附加指令是否是后缀指令,后缀指令是修改前面的指令的指令;响应于确定第一附加指令是后缀指令,在解码单元处使用第一附加指令来修改第一指令;以及响应于确定第一附加指令不是后缀指令,向执行单元提供第一指令和所述至少一个附加指令用于执行。
第四方面提供布置成执行计算机程序的数据处理装置,数据处理装置包括:程序存储器,其配置成存储计算机程序,计算机程序包括多个指令;程序计数器,其配置成识别程序存储器中的第一指令;取指单元,其配置成取回在程序存储器中的由程序计数器识别的第一指令;以及解码单元,其配置成:从取指单元接收第一指令;确定第一指令是否通过程序计数器的非递增变化来调用;响应于确定第一指令通过程序计数器的非递增变化来调用,从取指单元请求第二指令,第二指令是紧靠程序存储器中的第一指令的前面的指令;从取指单元接收第二指令;分析第二指令以确定第一指令是否是基本指令,基本指令是由至少一个其它指令进行修改的指令;以及响应于确定第一指令是基本指令,调用异常处理代码。
第五方面提供布置成执行计算机程序的数据处理装置,数据处理装置包括:程序存储器,其配置成存储计算机程序,计算机程序包括多个指令;程序计数器,其配置成识别程序存储器中的指令;取指单元,其配置成从程序存储器取回由程序计数器识别的指令;以及解码单元,其配置成:从取指单元接收指令,指令包括至少一个修改符比特,修改符比特指示指令是否是基本指令,基本指令是由至少一个其它指令进行修改的指令;以及在解码单元处分析至少一个修改符比特以确定所接收的指令是否是基本指令;响应于确定所接收的指令是基本指令,确定是否存在基本指令的预定数量的存储的前缀指令;以及响应于确定不存在基本指令的预定数量的存储的前缀指令,调用异常处理器代码。
第六方面提供布置成执行计算机程序的数据处理装置,数据处理装置包括:程序存储器,其配置成存储计算机程序,计算机程序包括多个指令;程序计数器,其配置成指示程序存储器中的第一指令;取指单元,其配置成从程序存储器取回如由程序计数器指示的第一指令;以及解码单元,其配置成:从取指单元接收第一指令;从取指单元请求至少一个附加指令,所述至少一个附加指令中的每个指令跟随程序存储器中的第一指令;接收所述至少一个附加指令,所述至少一个附加指令包括第一附加指令;确定第一附加指令是否是后缀指令,后缀指令是修改前面的指令的指令;响应于确定第一附加指令是后缀指令,使用第一后缀指令来修改第一指令;以及响应于确定第一附加指令不是后缀指令,向执行单元提供第一指令和所述至少一个附加指令用于执行。
第七方面提供编译器以将多个指令存储在程序存储器中,编译器包括处理器,其配置成:接收多个指令,多个指令包括一个或多个基本指令和每个基本指令的至少一个相应的修改指令;分析多个指令以识别每个基本指令及其至少一个相应的修改指令;以及在程序存储器中存储每个基本指令及其相应的至少一个修改指令,使得每个基本指令及其相应的修改指令在程序存储器内的边界的同一侧上。
第八方面提供计算机可读存储介质,其具有在其上编码的用于产生第四方面的数据处理装置的计算机可读程序代码。
第九方面提供计算机可读存储介质,其具有在其上编码的用于产生配置成执行第一方面的方法的数据处理装置的计算机可读程序代码。
第十方面提供计算机可读存储介质,其具有在其上编码的用于产生第五方面的数据处理装置的计算机可读程序代码。
第十一方面提供计算机可读存储介质,其具有在其上编码的用于产生配置成执行第二方面的方法的数据处理装置的计算机可读程序代码。
第十二方面提供计算机可读存储介质,其具有在其上编码的用于产生第六方面的数据处理装置的计算机可读程序代码。
第十三方面提供计算机可读存储介质,其具有在其上编码的用于产生配置成执行第三方面的方法的数据处理装置的计算机可读程序代码。
第十四方面提供实质上如同参考图3描述的解码指令的方法。
第十五方面提供实质上如同参考图5描述的解码指令的方法。
第十六方面提供实质上如同参考图8描述的解码指令的方法。
第十七方面提供实质上如同参考图10描述的解码指令的方法。
如将对技术人员明显的是,优选的特征可在适当时被组合,并可与本发明的任何方面组合。
附图说明
将参考下面的附图以例子的方式描述本发明的实施方式,其中:
图1是示例数据处理装置的示意图;
图2示出根据第一实施方式对指令解码的方法的例子;
图3是图2的方法的流程图;
图4示出根据第二实施方式对指令解码的方法的例子;
图5是图4的方法的流程图;
图6示出根据第三实施方式对指令解码的方法的例子;
图7示出图6的方法的第二个例子;
图8是图6和7的方法的流程图;
图9示出根据第四实施方式对指令解码的方法的例子;
图10是图9的方法的流程图;以及
图11示出在程序存储器中布置指令的方法的例子。
在全部附图中使用共同的参考数字来指示类似的特征。
具体实施方式
下面仅以例子的方式描述本发明的实施方式。这些例子代表申请人当前已知的实施本发明的最佳方式,但是其不是可实现本发明的唯一方式。该描述阐述例子的功能和用于构造和操作例子的步骤的顺序。然而,可通过不同的例子来实现相同或等效的功能和顺序。
上面描述的前缀指令方法的一个问题是在程序代码中存在不定性的可能性。如果机器(或观察者)从任意点开始读取,则在该点处的指令是否应受到来自前面的前缀指令的修改是不明确的。在程序代码中的计算的分支的普遍使用提供了代码执行可在代码内的任何偏移处开始的可能性。这种不定性因此意味着程序代码的作用变得非常难以预测。这可导致攻击安全应用中使用的代码的意外的错误或可能的方法。
例如,如果分支错误地跳转到应由前缀修改的指令,则程序将在指令未修改的情况下从这个点继续。这种不可预测的性质可能对程序操作是灾难性的。程序可继续运行一段时间,读取另外的指令和产生输出,直到引起程序中的错误或停止的某事发生。这使调试这种类型的错误变得很难,因为错误源是可能在一段时间之前出现的加上前缀的指令的分支。
在安全应用或安全性非常重要的应用的情况下,快速知道程序中某些部分已出错则很重要,使得错误可被控制。在后缀指令的分支的情况下,错误可能花费一些时间来显露自身,导致不确定的时期,其中程序操作是不可预测的。例如,这在程序控制核电站或银行业务系统的情况下将可能是非常有害的。
这种类型的错误也可出现在除了非法分支以外的情况中。例如,在太空应用(例如卫星)的情况下,在CPU内的一个或多个比特可被穿过宇宙飞船的高能粒子(即来自宇宙射线)反转。如果指令地址受到这样的比特反转,则所取出的指令不是所预期的指令。
除了递增到下一指令以外的程序计数器的任何变化在本文都将被称为程序中的“跳转”。如在上面描述的,例如,跳转可由程序中的分支或外部因素(例如穿过计算机的高能粒子)引起。“非法跳转”是使程序前往不能被合法执行的指令的跳转。例如,直接使程序前往加上前缀的基本指令的分支指令引起非法跳转,因为基本指令不能在没有其前缀的情况下被合法地执行。“非法分支”是引起非法跳转的分支指令。
本文描述的实施方式涉及用于对指令解码的方法和数据处理装置,指令包括允许使到基本指令的非法跳转容易被识别出的基本指令。在第一实施方式中,指令的一个或多个比特用于指示当前指令是否由另一指令进行修改。在第二实施方式中,当前指令和前面的指令都被取出并被解码以确定当前指令是否由前面的指令进行修改。在第三实施方式中,指令由后缀指令(即在当前指令后面的指令)而不是由前缀指令(即在当前指令前面的指令)修改,且当前指令和后面的指令都被取出并被解码以确定当前指令是否由后面的指令进行修改。在第四实施方式中,指令由后缀指令修改,且指令的一个或多个比特用于指示当前指令是否由另一指令进行修改。
由另一指令进行修改的指令将在本文被称为“基本指令”,且修改随后的指令的指令将在本文被称为“前缀指令”。
现在参考示出执行计算机程序的数据处理单元100(例如处理器)的图1。
数据处理单元100包括配置成存储形成计算机程序的指令序列的程序存储器102。在图1所示的例子中,指令被表示为I1到In。
数据处理单元100还包括配置成从程序存储器102(以程序顺序)取出如由程序计数器(PC)112所指示的指令的取指单元104和布置成解释指令的解码单元106。如果在对指令解码时没有错误或异常,则解码单元106将指令转发到执行单元108用于执行(其可包括读取和/或写入一个或多个寄存器110)并更新程序计数器112以指向下一指令。
然而,如果在对指令解码时有错误(例如指令是无效的),则解码单元106通知更新程序计数器112的异常处理器单元114,使得取指单元104从程序存储器102取出异常处理代码。以这种方式,异常可被可预测地处理,而不使数据处理单元100执行无效代码。
如果使用前缀修改指令,则可能存在程序计数器112被更新以指向将被前缀修改的指令(即基本指令)的情况。例如,在非法分支指令的情况下,目标基本指令将未修改地被取出、解码和执行,这将使程序不可预测地操作。解码单元106将不会检测到指令应已经被加上前缀,且因此将不调用异常处理器单元114。
因此,存在对能够识别基本指令的解码单元106的需求,使得该解码单元106可在到基本指令的非法跳转出现时调用异常处理器单元114。下面描述了用于对指令解码的方法,其可由允许解码单元106识别基本指令的解码单元106实现。
由图1的单元(例如取指单元104、解码单元106和执行单元108)执行的一个或多个功能可例如经由流水线处理被并行地执行。
现在参考图2和3,其示出用于对指令解码的方法的第一实施方式。在这个实施方式中,指令的一个或多个比特用于指示是否存在当前指令的至少一个修改指令(例如是否存在前缀指令)。
图2示出第一实施方式的例子。具体地,图2示出两个指令202和204。第一指令202对应于图1的I4,且第二指令204对应于图1的I5,其中I4是I5的前缀。每个指令202和204具有用于指示指令是否由另一指令进行修改(即存在该指令的前缀指令)的、被称为修改符比特的预留比特206和208。在这个例子中,因为I5将由I4修改,I5的修改符比特208被设置为一以指示I5将由另一指令修改。因为I4是用于修改I5的前缀,修改符比特206被设置为零以指示I4本身不由另一指令修改。
当解码单元106对指令解码时,其检查指令202或204的修改符比特206或208以确定指令是否由另一指令修改(即指令是否是基本指令)。如果修改符比特206或208指示指令202或204将被修改且解码单元106没有对修改指令(例如前缀指令)解码,则解码单元106检测到错误(例如非法分支)并调用异常处理器单元114。异常处理器单元114然后更新程序计数器112,使得取指单元104从程序存储器102取出异常处理代码。在一些情况下,异常处理器单元114也可保存状态和/或清空相关流水线。
例如,如图2所示,如果前面的指令是使程序计数器112被更新以指向I5的I2(分支指令),则解码单元106将对I5解码并检查修改符比特208。因为I5的修改符比特208被设置为一,指示指令将被修改且前面的指令(I2)不是前缀指令,则解码单元106知道错误已出现并调用异常处理器单元114。
虽然在图2中修改符比特206或208被示为指令202或204的最高有效比特,但是其可位于任何预定的位置处。此外,虽然在图2中有单个修改符比特206或208,但是在其它情况下可以有多于一个修改符比特。这可例如在指令可由多于一个修改指令修改的情况下被使用以指示修改指令的数量。这将允许解码单元106不仅捕获应被修改的指令的非法跳转(例如非法分支指令),而且捕获不是第一修改指令(例如第一前缀指令)的指令的非法跳转。
使用指令的一个或多个比特以指示指令是否由一个或多个其它指令进行修改(即指令是基本指令)允许到基本指令的非法跳转(例如非法分支指令)被快速和容易地识别出。然而代价是,为了这个目的预留指令的一个或多个比特减少了可用于识别指令的比特的数量,并因而减少了可在单个指令中编码的不同类型的指令的数量。
图3是根据第一实施方式的可由解码单元(例如解码单元106)执行的示例方法300的流程图。在步骤302,解码单元106接收由取指单元104取出的指令。指令包括至少一个修改符比特。如上所述,修改符比特指示指令是否是由一个或多个其它指令进行修改的基本指令,以及可选地,有多少修改指令。一旦取出的指令被接收到,方法300就继续进行到步骤304。
在步骤304,解码单元106对取出的指令解码以识别在取出的指令中的特定比特模式。一旦取出的指令被解码,方法300就继续进行到步骤306。
在步骤306,解码单元106确定解码的指令是否是另一指令的前缀。确定解码的指令是否是另一指令的前缀可包括将该指令与一个或多个预定比特模式进行比较以确定是否存在匹配。如本领域中的技术人员已知的,指令可包括指定待执行的操作的操作码(操作代码)。在一些情况下,存在前缀指令的专用操作码。因此,确定指令是否是另一指令的前缀可包括读取指令的操作码。
如果将解码的指令确定为前缀,则在步骤308存储指令,使得其可用于修改随后的基本指令。在一些情况下,前缀指令可存储在解码单元106或取指单元104的本地存储单元例如存储器或寄存器中。可通过只存储允许基本指令被修改的足够信息来减少针对每个前缀指令存储的数据量。例如,可以不存储16比特指令的全部16比特。在一些情况下,代替存储前缀指令,前缀指令可被丢弃并在对基本指令解码之后重新取出。
一旦前缀指令被存储,方法300就返回进行到步骤302。然而,如果确定解码的指令不是前缀,则方法300继续进行到步骤310。
在步骤310,解码单元106确定解码的指令是否是基本指令(即由另一指令进行修改)。确定解码的指令是否是基本指令包括分析修改符比特以确定它们是否指示指令将进行修改。如上所述,修改符比特是指令中用于指示指令是否由一个或多个其它指令进行修改、以及可选地有多少修改指令的一个或多个预留比特。
如果修改符比特指示指令不会受到修改,则在步骤312,解码单元106将未修改的指令(即在步骤304中解码的指令)传递到执行单元108用于执行。然而,如果修改符比特指示指令由一个或多个其它指令进行修改(即指令是基本指令),则方法继续进行到步骤314。
在步骤314,解码单元106确定是否存在基本指令的预定数量的存储的前缀指令。存储的前缀指令是以前由解码单元根据步骤306和308解码和存储的前缀指令。
在只有单个修改符比特的情况下,则预定的数量可以是一(即解码单元106检查以查看是否存在基本指令的存储的前缀)。在有指示修改指令的数量的多于一个修改符比特的情况下,则解码单元106可分析修改符比特以确定基本指令的前缀指令的数量。在这些情况下,预定的数量是在修改符比特中指定的前缀指令的数量。例如,如果修改符比特指示具有基本指令的两个前缀修改指令,则预定的数量是二,且解码单元106确定其是否具有基本指令的两个存储的前缀指令。
如果具有基本指令的预定数量的存储的前缀指令,则在步骤316中,解码单元306使用所存储的前缀指令来修改所接收的指令(即在步骤302中接收的指令)。例如,MOV指令(将数据从一个位置复制到另一位置的指令),当未被修改时可使用16比特操作数或地址。如果MOV指令之前有前缀指令,则MOV指令可被修改以替代地使用32比特操作或地址。在步骤318中,修改的指令被提供到执行单元108用于执行。
然而,如果没有预定数量的存储的前缀指令(即不具有存储的前缀指令或具有比在修改符比特中指定的更少的存储的前缀指令),则错误出现(例如非法分支指令出现)且在步骤320,解码单元106调用异常处理器单元114。
现在参考示出用于对指令解码的方法的第二实施方式的图4和图5。在这个实施方式中,当前指令和前面的指令(即紧靠程序代码中的当前指令的前面的指令)都被取指和解码以确定当前指令是否由前面的指令进行修改。虽然可取出多于一个前面的指令,但是解码器可只根据紧靠在前面的一个指令确定当前指令是基本指令。
图4示出第二实施方式的例子。具体地,图4示出两个指令402和404。第一指令402对应于图1的I4,且第二指令404对应于图1的I5,其中I4是I5的前缀。如果前面的指令是使程序计数器112被更新以指向I5的I2(分支指令),则I5和I4都被取指和解码。I4将被识别为I5的前缀。这指示错误出现(例如非法分支)且异常处理器单元114被调用。
在一些情况下,当前指令和前面的指令都只在程序中的跳转(即程序计数器的不是递增到下一指令的变化,例如,由分支指令引起的对程序计数器112的变化)之后被取指和解码。在存在到下一指令的程序计数器的简单递增的场合,只有当前指令被取指和解码。在这些情况下,资源不被再次取出前面的指令浪费,因为其已经在前面的循环中被取指和解码。
取出和解码当前和前面的指令允许到基本指令的非法跳转(例如非法分支指令)被快速和容易地识别出。代价是通过在分支之后取出前面的指令而引起的延迟。然而,这由于很多处理器现在是高度并行的事实而明显减轻,这意味着通常同时发出很多指令,减小了等待前面的指令的影响。
图5是根据第二实施方式的可由解码单元(例如解码单元106)执行的示例方法500的流程图。在步骤502,解码单元106接收由取指单元104取出的第一指令。一旦取出的指令被接收到,方法500就继续进行到步骤504。
在步骤504,解码单元106对第一指令解码以识别在第一指令中的特定比特模式。一旦第一指令被解码,方法500就继续进行到步骤506。
在步骤506,解码单元106确定第一指令是否是通过程序中的跳转被调用(即,得到)的指令。如上所述,程序中的跳转是程序计数器的不是递增到下一指令的任何变化(即程序计数器的非递增变化)。在一些情况下,如果执行单元108对程序计数器做出不是递增到下一指令的变化,则执行单元108可配置成将指示或信号发送到解码单元106。在这些情况下,当解码单元106从执行单元108接收到这样的指示或信号时,其可确定第一指令通过程序中的跳转被调用。在其它情况下,程序计数器112本身可包括监测变化并在其检测到非递增变化时向解码单元106提供指示或信号的硬件。在这些情况下,当解码单元106从程序计数器112接收到这样的指示或信号时,其可使这个信号与其将接收到的未来指示关联(例如其知道其将是多少循环,直到其得到与该指示或信号有关的指令为止)。然后当解码单元106随后接收到用于解码的指令时,解码单元106将知道指令通过程序中的跳转被调用。
如果解码单元106确定第一指令不是通过程序中的跳转被调用,则方法500继续进行到步骤508。然而,如果解码单元106确定第一指令通过程序中的跳转被调用,则方法500继续进行到步骤520。
在步骤508,解码单元106确定第一指令是否是另一指令的前缀。确定第一指令是否是另一指令的前缀可包括将第一指令与一个或多个预定的比特模式进行比较以确定是否存在匹配。例如,如上所述,确定指令是否是另一指令的前缀可包括分析指令的操作码。如果第一指令被确定为前缀,则在步骤510存储指令,使得其可在稍后用于修改随后的基本指令。方法500然后返回进行到步骤502。然而,如果确定第一指令不是前缀,则方法500继续进行到步骤512。
在步骤512,解码单元106确定是否存在第一指令的至少一个存储的前缀。如果具有第一指令的至少一个存储的前缀,则在步骤514中,解码单元106使用所存储的前缀指令来修改第一指令(即在步骤502中接收的指令),并在步骤516中将修改的第一指令传递到执行单元108用于执行。然而,如果没有针对第一指令存储的前缀,则解码单元106将未修改的第一指令(即在步骤504中解码的指令)传递到执行单元108用于执行。
在步骤520,解码单元106从取指单元104请求第二指令。第二指令是紧靠程序中的第一指令前面的指令(即,位于第一指令的程序计数器值减去一个指令的指令)。在步骤522,解码单元106接收第二指令并对第二指令解码。在步骤524,解码单元106确定第二指令是否是前缀。如果解码单元106确定第二指令是前缀,则错误出现(例如非法分支指令出现)且在步骤526解码单元106调用异常处理器单元114。
然而,如果解码单元106确定第二指令不是前缀,则在步骤528,解码单元106确定第一指令是否是前缀指令。如果解码单元106确定第一指令是前缀,则在步骤510前缀指令被存储用于未来使用。然而,如果解码单元106确定第一指令不是前缀指令,则在步骤518,未修改的第一指令传递到执行单元108用于执行。
现在参考示出用于对指令解码的方法的第三实施方式的图6到图8。在这个实施方式中,指令不是由前缀修改,而是其由后缀修改且当前指令和后面的指令都被取出和解码以确定当前指令是否由后面的指令进行修改。换句话说,指令不是由一个或多个前面的指令修改,而是指令由一个或多个后面的指令修改。由于在当前指令被发送用于执行之前由等待取出和解码后面的指令而引起的延迟,后缀修改指令在过去不是可行的。然而,因为现代多发射处理器(multiple-issueprocessor)具有同时在考虑当中的多个指令,由于必须检查后缀而引起的效率损失被最小化。
图6示出第三实施方式的第一个例子,其中基本指令由后面的指令(即后缀指令)修改。具体地,图6示出两个指令602和604。第一指令602对应于图1的I4,且第二指令604对应于图1的I5,其中I5是I4的后缀。在这个例子中,当I4被取指和解码时,解码单元106等待,直到I5被取指和解码以确定I4是否进行修改为止。
图7示出第三实施方式的第二个例子,其中出现了非法分支指令。具体地,图7示出两个指令702和704。第一指令702对应于图1的I4,且第二指令704对应于图1的I5,其中I5是I4的后缀。在这个例子中,前面的指令I2是使程序计数器112指向I5的分支指令。当I5被解码时,将确定I5是较早的指令的后缀。因为后缀不能有效地跟随分支指令,所以解码单元106将知道错误出现并将调用异常处理器单元114。
图8是根据第三实施方式的可由解码单元(例如解码单元106)执行的示例方法800的流程图。在步骤802,解码单元106接收由取指单元104取出的第一指令。一旦第一指令被接收到,方法800就继续进行到步骤804。
在步骤804,解码单元106对第一指令解码以识别在所取出的指令中的特定比特模式。一旦第一指令被解码,方法800就继续进行到步骤806。
在步骤806,解码单元106确定第一指令是否是另一指令的后缀。确定解码的指令是否另一指令的后缀可包括将该指令与一个或多个预定比特模式进行比较以确定是否存在匹配。如上所述,指令可包括描述将由指令执行什么操作的操作码。后缀指令可被分配专用操作码,其允许后缀指令通过其操作码被识别为后缀指令。这与一般不能只根据其操作码而被识别为基本指令的基本指令形成对照。例如,MOV指令具有MOV操作码。只有使用附加信息(例如随后对后缀指令解码的附加信息),解码器才知道MOV指令是由另一指令进行修改的基本指令。
如果第一指令被确定为后缀,则错误出现且在步骤808,解码单元106调用异常处理器单元114。然而,如果确定第一指令不是后缀,则方法800继续进行到步骤810。
在步骤810,解码单元106从取指单元104请求一个或多个附加指令。附加指令紧跟程序中的第一指令。在任何基本指令可能只有单个后缀指令的情况下,解码单元106则可以只取出一个附加指令(即紧跟第一指令的指令)。然而,在任何基本指令可以具有多于一个后缀指令的情况下,解码单元106则可请求多个附加指令(例如紧跟第一指令的两个指令)。在一些情况下,基于所使用的指令集在解码单元106中硬编码了最大数量的修改指令。在这些情况下,解码单元106可使用这个硬编码信息来确定要请求多少附加指令。例如,如果解码单元106使用指定修改指令的最大数量是三的信息被硬编码,则解码单元106可请求三个附加指令。一旦请求了附加指令,则方法800继续进行到步骤812。
在步骤812,解码单元106接收附加指令并对附加指令解码。一旦附加指令被接收和解码,方法800就继续进行到步骤814。
在步骤814,解码单元106确定第一附加指令(即紧跟第一指令的指令)是否是后缀。确定附加指令是否是后缀可包括将该指令与一个或多个预定比特模式进行比较以确定是否存在匹配。例如,解码单元106可通过分析指令的操作码来确定附加指令是后缀指令。如果确定第一附加指令是后缀,则方法继续进行到步骤816。然而,如果确定第一附加指令不是后缀,则在步骤820,解码单元106将未修改的第一指令和附加指令同时提供到执行单元108用于执行。
在步骤816,为后缀指令的任何附加指令用于修改第一指令(即在步骤802中接收的指令)。例如,如果请求了三个附加指令且前两个附加指令被识别为后缀指令,则这两个后缀指令用于修改第一指令。一旦第一指令被修改,则在步骤818中,解码单元106将修改的第一指令和任何非后缀附加指令转发到执行单元108用于执行。
现在参考示出用于对指令解码的方法的第四实施方式的图9和图10。这个实施方式是第一和第三实施方式的组合。特别是,指令由后缀(例如随后的指令)而不是前缀(即前面的指令)修改,且预留每个指令的一个或多个比特用于指示指令是否由一个或多个其它指令进行修改。
图9示出第四实施方式的例子。具体地,图9示出两个指令902和904。第一指令902对应于图1的I4,且第二指令904对应于图1的I5,其中I5是I4的后缀。如上面关于图6所述的,当I4被取指和解码时,解码单元106等待,直到I5被取指和解码以确定I4是否应被修改。每个指令也具有用于指示指令是否由另一指令进行修改的、被称为修改符比特的预留比特906或908。在这个例子中,因为I4将由I5修改,I4的修改符比特906被设置为一以指示I4将由另一指令进行修改。类似地,因为I5是用于修改I4的后缀,修改符比特908被设置为零以指示I5本身不受到修改。
当解码单元106对指令902或904解码时,其检查修改符比特906或908以确定指令是否进行修改(即其是基本指令)。如果修改符比特906或908指示指令902或904进行修改,则解码单元106知道其应在继续进行之前等待下一指令被取指和解码。然而,如果修改符比特906或908指示指令不进行修改,则指令906或908可立即被发送到执行单元108用于执行,而不必等待下一指令被取指和解码。例如,当解码单元106对I4解码时,修改符比特906通知解码单元106等待并取出I5且对I5解码,使得其可用于修改I4。
虽然在图9中修改符比特906或908被示为最高有效比特,但是其可位于任何预定的位置处。此外,虽然在图9中有单个修改符比特906或908,但在其它情况下可以有多于一个修改符比特。例如,这可在指令可由多于一个修改指令修改的情况下被使用以指示修改指令的数量。这在当前指令被分发到执行单元108之前通知解码单元106应取出和解码多少指令。
修改符比特906或908不仅可用于通知解码单元106其应何时等待下一指令,修改符比特906或908也可用于识别假设后缀修改指令存在但下一指令却不是有效的修改指令的情形中的错误。例如,如果修改符比特906或908指示指令待进行修改但下一指令不是有效的修改指令,则解码单元106知道错误出现并可调用异常处理器单元114。
图10是根据第四实施方式的可由解码单元(例如解码单元106)执行的示例方法1000的流程图。在步骤1002,解码单元106接收由取指单元104取出的第一指令。第一指令包括指示第一指令是否是基本指令、以及可选地有多少用于第一指令的修改指令的至少一个修改符比特。一旦第一指令被接收到,方法1000就继续进行到步骤1004。
在步骤1004,解码单元106对第一指令解码以识别所取出的指令中的特定比特模式。一旦第一指令被解码,方法1000就继续进行到步骤1006。
在步骤1006,解码单元106确定第一指令是否是另一指令的后缀。确定第一指令是否是另一指令的后缀可包括将第一指令与一个或多个预定比特模式进行比较以确定是否存在匹配。例如,解码单元106可通过分析指令的操作码来确定第一指令是否是后缀指令。如果确定第一指令是后缀,则错误出现且在步骤1008,解码单元106调用异常处理器单元114。然而,如果确定第一指令不是后缀,则方法1000继续进行到步骤1010。
在步骤1010,解码单元106确定第一指令是否是基本指令(即是否由一个或多个其它指令进行修改)。确定第一指令是否是基本指令包括分析修改符比特以确定其是否具有指示指令是基本指令的预定比特模式。如果第一指令不是基本指令,则在步骤1012,未修改的第一指令被分发到执行单元108用于执行。然而,如果解码的指令是基本指令,则方法1000继续进行到步骤1014。
在步骤1014,解码单元106请求程序中的至少一个附加指令。附加指令紧跟程序中的第一指令。在任何基本指令只能有一个后缀的情况下,则解码单元106可以只请求一个附加指令。然而,如果基本指令可由多于一个后缀修改,则解码单元106可对修改符比特解码以确定用于第一指令的修改指令的数量,且所请求的附加指令的数量等于根据修改符比特确定的修改指令的数量。一旦请求了附加指令,方法1000就继续进行到步骤1016。
然后在步骤1016,解码单元106接收附加指令并对附加指令解码。一旦下一指令被接收和解码,方法1000就继续进行到步骤1018。
在步骤1018,确定每个附加指令是否是第一指令的有效后缀。确定附加指令是否是第一指令的有效后缀可包括将附加指令与一个或多个预定比特模式进行比较以确定是否存在匹配。如果每个附加指令是第一指令的有效后缀,则方法1000继续进行到步骤1020。然而,如果确定附加指令中的至少一个不是有效后缀,则错误出现且在步骤1008异常处理器单元114被调用。
在步骤1020,所接收和解码的后缀指令用于修改第一指令(即在步骤1002中接收的指令),且在步骤1022中,修改的第一指令被发送到执行单元108用于执行。
涉及取出和解码多个连续的指令(即取出前面的指令以寻找前缀,或取出后面的指令以寻找后缀)的上面描述的第二和第三实施方式可通过控制程序存储器102中的指令的布局来进一步增强。特别是,程序存储器102可具有固定边界,越过固定边界可能是昂贵的。这可包括例如在存储器管理单元(MMU)中的缓存器行边界或过渡页边界。例如MMU页尺寸可以是4K。延迟执行指令同时等待跨过这些边界中的一个边界取出指令可能因此是不受欢迎的,因为其由于必须取出额外的缓存器行或虚拟存储器页的成本而慢得多。
为了解决该问题,可在程序存储器102中规定边界,前缀或/或后缀不允许越过边界。具体地,前缀或后缀指令不应由这样的边界与其相应的基本指令分离。这可避免必须取出额外的缓存器行或虚拟存储器页用于检查前面或后面的指令的成本,因为已知前缀或后缀越过边界延伸不是合法的。编译器可通过例如插入无操作(NOP)指令(其为实际上根本什么也不做的指令)来处理这个例外,以便根据其基本指令装填(pad)前缀或后缀指令,所以它们不跨过边界。另外,更复杂的编译器可通过使指令重新排序来避免使用NOP。如果指令集允许多个前缀或后缀,则定位应被限制,所以前缀和相应的基本或后缀和相应的基本的整个组不被允许越过边界。
现在参考图11a和11b,其示出程序中的NOP的插入以确保后缀指令及其相应的基本指令不跨过边界。特别是,图11a示出由四个指令1102、1104、1106和1108组成的程序。指令分别对应于图1的指令I3、I4、I5和I6,其中I4是I5的前缀,且I4和I5跨过缓存器行1110边界或MMU页边界。在图11b中,NOP1112插在I3和I4之间,使得I4被推到边界1110的另一侧,使得前缀I4及其基本指令I5在边界1110的同一侧上。
参考图11a和11b描述的方法可由编译器或类似的设备执行。
上面描述的实施方式的效应之一是更有效的计算机。具体地,通过使数据处理装置能够更快和更有效地识别非法跳转,装置不必浪费执行错误代码的资源。
上面描述的实施方式的另一效应是静态分析(也被称为静态代码分析或SCA)的使用。这是在源或对象代码上执行的自动程序分析,而不执行程序。因为其在没有执行的情况下进行,所以静态分析必须考虑程序中的分支的每个可能的结果。这导致很多排列,且分析迅速变得复杂和缓慢。因为上面描述的方法消除了如非法的某些分支目的地(因为它们分支到指令或修改指令的错误部分),这降低了静态分析需要考虑的分支排列的数量。因此,静态分析速度提高了。
术语“处理器”和“计算机”在本文用于指代具有使其可执行指令的处理能力的任何设备或其部分。术语“处理器”可例如包括中央处理单元(CPU)、图形处理单元(GPU或VPU)、物理处理单元(PPU)、无线处理单元(RPU)、数字信号处理器(DSP)、通用处理器(例如通用GPU)、微处理器、设计成在CPU外部加速任务的任何处理单元等。本领域中的技术人员将认识到,这样的处理能力合并到很多不同的设备中,且因此术语“计算机”包括机顶盒、媒体播放器、数字无线电装置、PC、服务器、移动电话、个人数字助理和很多其它设备。
本领域中的技术人员将认识到,用于存储程序指令的存储设备可分布在网络当中。例如,远程计算机可存储被描述为软件的过程的例子。本地或终端计算机可访问远程计算机并下载软件的一部分或全部以运行程序。可选地,本地计算机可按需要下载软件的片段,或执行在本地终端处的一些软件指令和在远程计算机(或计算机网络)处的一些软件指令。本领域中的技术人员也将认识到,通过利用本领域中的技术人员已知的常规技术,软件指令的全部或一部分可由专用电路例如DSP、可编程逻辑阵列等执行。
本文描述的方法可由配置有软件的计算机执行,软件以存储在有形存储介质上的机器可读形式,例如以包括用于配置计算机来执行所述方法的组成部分的计算机可读程序代码的计算机程序的形式、或以包括适合于当程序在计算机上运行时执行本文所述的任何方法的所有步骤的计算机程序代码工具的计算机程序的形式,且其中的计算机程序可体现在计算机可读存储介质上。有形(或非暂时性)存储介质的例子包括磁盘、拇指驱动器、存储卡等,且并不包括传播信号。软件可适合于在并行处理器或串行处理器上执行,使得方法步骤可以按任何适当的顺序或同时被执行。
本文描述的硬件部件可由非暂时性计算机可读存储介质产生,非暂时性计算机可读存储介质具有在其上编码的计算机可读程序代码。
还预期包括“描述”或定义实现上面描述的模块、功能、部件或逻辑的硬件配置的软件,例如,如用于设计集成电路或用于配置可编程芯片的HDL(硬件描述语言)软件,以执行期望功能。也就是说,可提供计算机可读存储介质,其具有在其上编码的用于产生配置成执行本文描述的任何方法的处理单元或用于产生包括本文描述的任何装置的处理单元的计算机可读程序代码。也就是说,计算机系统可配置成根据电路元件的定义和定义用于组合那些电路元件的规则的数据产生数字电路的表示,其中非暂时性计算机可读存储介质可具有在其上存储的处理器可执行指令,当所述指令在这样的计算机系统处被执行时使计算机系统产生如本文描述的处理单元。
存储用于实现所公开的方面的机器可执行数据的存储器可以是非暂时性介质。非暂时性介质可以是易失性的或非易失性的。易失性非暂时性介质的例子包括基于半导体的存储器,例如SRAM或DRAM。可用于实现非易失性存储器的技术的例子包括光学和磁性存储器技术、闪存、相变存储器、电阻性RAM。
对“逻辑”的特定提及指执行一种或多种功能的结构。逻辑的例子包括布置成执行那些功能的电路系统。例如,这样的电路系统可包括晶体管和/或在制造过程中可用的其它硬件元件。作为例子,这样的晶体管和/或其它元件可用于形成实现和/或包含存储器例如寄存器、触发器或锁存器、逻辑运算符例如布尔运算、数学运算符例如加法器、乘法器或移位器和互连的电路系统或结构。这样的元件可被提供为定制电路或标准单元库、宏或提供在其它抽象级处。可以特定的布置使这样的元件互连。逻辑可包括固定功能的电路系统,且电路系统可被编程以执行一种或多种功能;这样的编程可从固件或软件更新或控制机制提供。被识别为执行一种功能的逻辑也可包括实现组成部分的功能或子过程的逻辑。在例子中,硬件逻辑具有实现固定功能操作或多个固定功能操作、状态机或过程的电路系统。
本文给出的任何范围或设备值可扩展或改变而不失去所寻求的效应,这对技术人员将是明显的。
将理解,上面描述的益处和优点可涉及一个实施方式或可涉及几个实施方式。实施方式不限于解决任何或所有所陈述的问题的那些实施方式或具有任何或全部所陈述的益处和优点的那些实施方式。
对“一个”项目的任何提及指那些项目中的一个或多个。术语“包括”在本文用于意指包括所标识的方法框或元件,但这样的框或元件并不包括排他列表,且装置可包含附加框或元件,以及方法可包含附加操作或元件。此外,框、元件和操作本身并不隐含地是封闭的。
本文描述的方法的步骤可在适当时以任何适当的顺序或同时被执行。在附图中的方框之间的箭头示出方法步骤的一个示例顺序,但并不意欲排除其它顺序或并行的多个步骤的执行。此外,单独的框可从任何方法删除而不偏离本文描述的主题的精神和范围。上面描述的任何例子的方面可与所描述的其它例子中的任一个的方面组合以形成另外的例子,而不失去所寻求的效应。在附图的元件被示为由箭头连接的场合,将认识到,这些箭头示出在元件之间的通信(包括数据和控制消息)的仅仅一个示例流向。元件之间的流向可以在任一方向上或在两个方向上。
将理解,优选实施方式的上述描述仅作为例子被给出,以及各种修改可由本领域中的技术人员做出。虽然上面以某个详细程度或参考一个或多个单独的实施方式描述了各种实施方式,但是本领域中的技术人员可对所公开的实施方式进行很多变更而不偏离本发明的精神或范围。

Claims (36)

1.一种在解码单元处对计算机程序的指令解码的方法(500),所述方法包括:
在所述解码单元处接收第一指令(502);
在所述解码单元处确定所述第一指令是否通过程序计数器的非递增变化来调用(506);
响应于确定所述第一指令通过所述程序计数器的非递增变化来调用,从取指单元请求第二指令,所述第二指令是所述计算机程序中紧靠所述第一指令的前面的指令(520);
在所述解码单元处从所述取指单元接收第二指令(522);
在所述解码单元处分析所述第二指令以确定所述第一指令是否是基本指令(522、524);以及
响应于确定所述第一指令是基本指令,调用异常处理代码(526)。
2.如权利要求1所述的方法(500),其中,分析所述第二指令以确定所述第一指令是否是基本指令包括分析所述第二指令以确定所述第二指令是否是前缀指令(524)。
3.如权利要求1所述的方法(500),还包括:
响应于确定所述第一指令不通过所述程序计数器的非递增变化来调用,在所述解码单元处确定所述第一指令是否是前缀指令(508);以及
响应于确定所述第一指令是前缀指令,存储所述第一指令(510)。
4.如权利要求3所述的方法(500),还包括:
响应于确定所述第一指令不是前缀指令,确定是否存在所述第一指令的至少一个存储的前缀指令(512);
响应于确定存在所述第一指令的至少一个存储的前缀指令,在所述解码单元处使用所述至少一个存储的前缀指令来修改所述第一指令(514);以及
响应于确定不存在所述第一指令的至少一个存储的前缀指令,向执行单元提供所述第一指令用于执行(518)。
5.如权利要求4所述的方法(500),还包括,向执行单元提供所修改的第一指令用于执行(516)。
6.如权利要求1到4中的任一项所述的方法(500),还包括,响应于确定所述第一指令不是基本指令且不是前缀指令,向执行单元提供所述第一指令用于执行(518)。
7.如权利要求1到4中的任一项所述的方法(500),其中,调用异常处理代码包括更新所述程序计数器以指向异常处理代码。
8.如权利要求1到4中的任一项所述的方法(500),其中,所述计算机程序存储在程序存储器中,使得基本指令和所述基本指令的每个前缀指令一起存储在程序存储器边界的同一侧上。
9.一种布置成执行计算机程序的数据处理装置(100),所述数据处理装置包括:
程序存储器(102),其配置成存储所述计算机程序,所述计算机程序包括多个指令(402、404);
程序计数器(112),其配置成识别所述程序存储器(102)中的第一指令(404);
取指单元(104),其配置成取回所述程序存储器(102)中的由所述程序计数器(112)识别的所述第一指令(404);以及
解码单元(106),其配置成:
从所述取指单元(104)接收所述第一指令(404);
确定所述第一指令(404)是否通过所述程序计数器(112)的非递增变化来调用;
响应于确定所述第一指令(404)通过所述程序计数器(112)的非递增变化来调用,从所述取指单元(104)请求第二指令(402),所述第二指令(402)是所述程序存储器(102)中紧靠所述第一指令的前面的指令;
从所述取指单元(104)接收所述第二指令(402);
分析所述第二指令(402)以确定所述第一指令(404)是否是基本指令,基本指令是由至少一个其它指令进行修改的指令;以及
响应于确定所述第一指令(404)是基本指令,调用异常处理代码。
10.一种在解码单元处对计算机程序的指令解码的方法(300),所述方法包括:
在所述解码单元处接收指令,所述指令包括至少一个修改符比特,所述修改符比特指示所述指令是否是基本指令,基本指令是由一个或多个其它指令进行修改的指令(302);
在所述解码单元处分析所述至少一个修改符比特以确定所接收的指令是否是基本指令(304、310);
响应于确定所接收的指令不是基本指令,在所述解码单元处确定所接收的指令是否是前缀指令,前缀指令是修改随后的指令的指令(306);
响应于确定所接收的指令是前缀指令,存储所接收的指令(308);
响应于确定所接收的指令是基本指令,在所述解码单元处确定是否存在所述基本指令的预定数量的存储的前缀指令(314);以及
响应于确定不存在所述基本指令的所述预定数量的存储的前缀指令,调用异常处理代码(320)。
11.如权利要求10所述的方法(300),还包括,响应于确定存在所述基本指令的所述预定数量的存储的前缀指令,在所述解码单元处使用所述基本指令的所述预定数量的存储的前缀指令来修改所述基本指令(316)。
12.如权利要求11所述的方法(300),还包括,向执行单元提供所修改的基本指令用于执行(318)。
13.如权利要求10到12中的任一项所述的方法(300),其中,所述至少一个修改符比特包括至少两个修改符比特,所述至少两个修改符比特指示所述预定数量;并且,所述方法还包括分析所述至少两个修改符比特以确定所述预定数量。
14.如权利要求10到12中的任一项所述的方法(300),其中,所述至少一个修改符比特包括仅仅一个比特,且所述预定数量是一。
15.如权利要求10到12中的任一项所述的方法(300),其中,所述至少一个修改符比特在所接收的指令中的预定位置处。
16.如权利要求10到12中的任一项所述的方法(300),还包括:
响应于确定所接收的指令不是前缀指令且不是基本指令,向执行单元提供所接收的指令用于执行(312)。
17.如权利要求10到12中的任一项所述的方法(300),其中,调用异常处理代码包括更新程序计数器以指向异常处理代码。
18.一种布置成执行计算机程序的数据处理装置(100),所述数据处理装置包括:
程序存储器(102),其配置成存储所述计算机程序,所述计算机程序包括多个指令(202、204);
程序计数器(112),其配置成识别所述程序存储器(102)中的指令(202、204);
取指单元(104),其配置成从所述程序存储器(102)取回由所述程序计数器(112)识别的所述指令(202、204);以及
解码单元(106),其配置成:
从所述取指单元接收所述指令(202、204),所述指令包括至少一个修改符比特(206、208),所述至少一个修改符比特(206、208)指示所述指令是否是基本指令,基本指令是由至少一个其它指令进行修改的指令;
分析所述至少一个修改符比特(206、208)以确定所接收的指令(202、204)是否是基本指令;
响应于确定所接收的指令(202、204)不是基本指令,确定所接收的指令(202、204)是否是前缀指令(202),前缀指令是修改随后的指令的指令;
响应于确定所接收的指令是前缀指令(202),存储所接收的指令;
响应于确定所接收的指令(202、204)是基本指令(204),确定是否存在所述基本指令(204)的预定数量的存储的前缀指令;以及
响应于确定不存在所述基本指令的所述预定数量的存储的前缀指令,调用异常处理代码。
19.一种在解码单元处对计算机程序中的指令解码的方法(800、1000),所述方法包括:
在所述解码单元处接收第一指令(802、1002);
在所述解码单元处确定所述第一指令是否是后缀指令,后缀指令是修改前面的指令的指令;
响应于确定所述第一指令是后缀指令,确定所述第一指令是否跟随分支指令;以及
响应于确定所述第一指令跟随分支指令,调用异常处理代码(808、1008)。
20.如权利要求19所述的方法(800、1000),其中,调用异常处理代码包括更新程序计数器以指向异常处理代码。
21.如权利要求19所述的方法(800、1000),还包括:
响应于确定所述第一指令不是后缀指令,从取指单元请求至少一个附加指令,所述至少一个附加指令中的每个附加指令跟随所述计算机程序中的第一指令(810、1014);
在所述解码单元处接收所述至少一个附加指令,所述至少一个附加指令包括第一附加指令(812、1016);
确定所述第一附加指令是否是后缀指令(814、1018);
响应于确定所述第一附加指令是后缀指令,在所述解码器单元处使用所述第一附加指令来修改所述第一指令(816、1020);以及
响应于确定所述第一附加指令不是后缀指令,向执行单元提供所述第一指令和所述至少一个附加指令用于执行(820、1022)。
22.如权利要求21所述的方法(800、1000),其中,仅在确定所述第一指令不是后缀指令时请求所述至少一个附加指令(806、1006)。
23.如权利要求21所述的方法(800、1000),还包括,向执行单元提供所修改的第一指令用于执行(818、1022)。
24.如权利要求21所述的方法(1000),其中,所述第一指令包括至少一个修改符比特,所述至少一个修改符比特指示所述第一指令是否是基本指令,基本指令是由至少一个其它指令进行修改的指令;以及
所述方法还包括分析所述至少一个修改符比特以确定所述第一指令是否是基本指令,且仅在确定所述第一指令是基本指令时请求所述至少一个附加指令(1010)。
25.如权利要求24所述的方法(1000),其中所述至少一个修改符比特包括至少两个修改符比特,所述至少两个修改符比特指示所述第一指令的修改指令的数量;以及
所述方法还包括响应于确定所述第一指令是基本指令,分析所述至少两个修改符比特以确定修改指令的数量;以及
所请求的附加指令的数量等于修改指令的数量。
26.如权利要求19到25中的任一项所述的方法(1000),其中所述计算机程序被存储在程序存储器中,使得基本指令和所述基本指令的每个相应的后缀指令一起存储在程序存储器边界的同一侧上。
27.一种布置成执行计算机程序的数据处理装置(100),所述数据处理装置包括:
程序存储器(102),其配置成存储所述计算机程序,所述计算机程序包括多个指令(602、604、702、704、902、904);
程序计数器(112),其配置成指示所述程序存储器(102)中的第一指令;
取指单元(104),其配置成从所述程序存储器(102)取回如由所述程序计数器(112)识别的所述第一指令;以及
解码单元(106),其配置成:
从所述取指单元(104)接收所述第一指令(602、704、902);
确定所述第一指令(602、704、902)是否是后缀指令,后缀指令是修改前面的指令的指令;
响应于确定所述第一指令(704)是后缀指令,确定所述第一指令(704)是否跟随分支指令;以及
响应于确定所述第一指令(704)跟随分支指令,调用异常处理代码。
28.一种在程序存储器中存储计算机程序的方法,所述计算机程序包括多个指令,所述方法包括:
在编译器处接收所述多个指令,所述多个指令包括一个或多个基本指令和每个基本指令的至少一个修改指令;
在所述编译器处分析所述多个指令以识别每个基本指令和每个识别的基本指令的至少一个修改指令;以及
将每个识别的基本指令存储在与所述识别的基本指令的所述至少一个修改指令所在的所述程序存储器内的边界的同一侧上。
29.如权利要求28所述的方法,其中,所述程序存储器内的边界包括缓存器行首、缓存器行尾和存储器管理单位页中的一个或多个。
30.如权利要求28或权利要求29所述的方法,其中每个修改指令是后缀指令。
31.如权利要求28或权利要求29所述的方法,其中每个修改指令是前缀指令。
32.如权利要求28或权利要求29所述的方法,其中,将识别的基本指令存储在与所述基本指令的所述至少一个修改指令所在的所述程序存储器内的边界的同一侧上,包括,在所述计算机程序中,在所述识别的基本指令或所述识别的基本指令的所述至少一个修改指令之前插入一个或多个无操作指令,使得所述识别的基本指令和所述识别的基本指令的所述至少一个修改指令存储在所述程序存储器内的边界的同一侧上。
33.如权利要求28或权利要求29所述的方法,其中,将每个识别的基本指令存储在与所述识别的基本指令的所述至少一个修改指令所在的所述程序存储器内的边界的同一侧上包括,将所述多个指令重新排序,使得每个识别的基本指令被存储在与所述识别的基本指令的所述至少一个修改指令所在的所述程序存储器内的边界的同一侧上。
34.如权利要求28或权利要求29所述的方法,其中所述多个指令包括基本指令的至少两个修改指令,并且将每个识别的基本指令存储在与所述识别的基本指令的所述至少一个修改指令所在的所述程序存储器内的边界的同一侧上包括,将所述基本指令存储在与所述基本指令的所述至少两个修改指令所在的所述程序存储器的边界的同一侧上。
35.一种存储计算机程序的设备,所述计算机程序包括多个指令,所述设备包括:
程序存储器;以及
处理器,所述处理器配置成:
接收所述多个指令,所述多个指令包括一个或多个基本指令和每个基本指令的至少一个修改指令;
分析所述多个指令以识别每个基本指令和每个识别的基本指令的至少一个修改指令;以及
将每个识别的基本指令存储在与所述识别的基本指令的所述至少一个修改指令所在的所述程序存储器内的边界的同一侧上。
36.一种布置成执行计算机程序的数据处理装置(100),所述数据处理装置包括:
程序存储器(102),其配置成存储所述计算机程序,所述计算机程序包括多个指令,所述多个指令包括一个或多个基本指令和每个基本指令的至少一个修改指令,所述多个指令存储在所述程序存储器上,使得每个基本指令被存储在与所述基本指令的所述至少一个修改指令所在的所述程序存储器内的边界的同一侧上;
程序计数器(112),其配置成识别所述程序存储器(102)中的第一指令;
取指单元(104),其配置成取回在所述程序存储器(102)中的由所述程序计数器(112)识别的第一指令;以及
解码单元(106),其配置成:
从所述取指单元接收所述第一指令;以及
从所述取指单元请求附加指令以寻找所述第一指令的修改指令,
所述附加指令是所述程序存储器中紧靠所述第一指令的前面的指令或
所述程序存储器中紧靠所述第一指令的后面的指令;以及
其中,所述取指单元(104)还配置成确定所述附加指令与所述第一指令是否在所述程序存储器的边界的同一侧上,且响应于确定所述附加指令不在所述程序存储器的所述边界的同一侧上,避免从所述程序存储器取回所述附加指令。
CN201510247606.XA 2014-05-27 2015-05-15 解码被一个或多个其它指令修改的指令 Active CN105183429B (zh)

Applications Claiming Priority (8)

Application Number Priority Date Filing Date Title
GB1409326.4 2014-05-27
GB1409326.4A GB2521019B (en) 2014-05-27 2014-05-27 Decoding instructions that are modified by one or more other instructions
GB1501621.5 2015-01-30
GB1501619.9A GB2526646B (en) 2014-05-27 2015-01-30 Decoding base instructions modified by a prefix instruction using modifier bits
GB1501619.9 2015-01-30
GB1501620.7A GB2526647B (en) 2014-05-27 2015-01-30 Decoding base instructions that are modified by a postfix instruction
GB1501621.5A GB2526648B (en) 2014-05-27 2015-01-30 Storing a computer program in program memory
GB1501620.7 2015-01-30

Publications (2)

Publication Number Publication Date
CN105183429A true CN105183429A (zh) 2015-12-23
CN105183429B CN105183429B (zh) 2019-06-11

Family

ID=51177454

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201510247606.XA Active CN105183429B (zh) 2014-05-27 2015-05-15 解码被一个或多个其它指令修改的指令

Country Status (4)

Country Link
US (2) US9898293B2 (zh)
CN (1) CN105183429B (zh)
DE (1) DE102015107875A1 (zh)
GB (4) GB2521019B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10877759B2 (en) 2015-09-30 2020-12-29 International Business Machines Corporation Managing the capture of information in applications with prefix instructions
US10394568B2 (en) * 2015-09-30 2019-08-27 International Business Machines Corporation Exception handling for applications with prefix instructions
US10761852B2 (en) * 2015-09-30 2020-09-01 International Business Machines Corporation Extending data range addressing
GB2543304B (en) * 2015-10-14 2020-10-28 Advanced Risc Mach Ltd Move prefix instruction
US10061580B2 (en) 2016-02-25 2018-08-28 International Business Machines Corporation Implementing a received add program counter immediate shift (ADDPCIS) instruction using a micro-coded or cracked sequence
US10572259B2 (en) * 2018-01-22 2020-02-25 Arm Limited Hints in a data processing apparatus
US10884720B2 (en) * 2018-10-04 2021-01-05 Microsoft Technology Licensing, Llc Memory ordering annotations for binary emulation
US11537853B1 (en) 2018-11-28 2022-12-27 Amazon Technologies, Inc. Decompression and compression of neural network data using different compression schemes

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5819080A (en) * 1996-01-02 1998-10-06 Advanced Micro Devices, Inc. Microprocessor using an instruction field to specify condition flags for use with branch instructions and a computer system employing the microprocessor
CN1431585A (zh) * 2002-08-22 2003-07-23 智慧第一公司 延伸微处理器地址模式的装置及方法
CN1434937A (zh) * 1999-12-17 2003-08-06 英特尔公司 检测单字节前缀和分支的长度解码
US20090089564A1 (en) * 2006-12-06 2009-04-02 Brickell Ernie F Protecting a Branch Instruction from Side Channel Vulnerabilities
CN101436122A (zh) * 2008-11-25 2009-05-20 中国科学院微电子研究所 一种实现指令并行执行的优化方法和装置

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3711422B2 (ja) * 1995-12-20 2005-11-02 セイコーエプソン株式会社 情報処理回路
US6970998B1 (en) * 2002-02-22 2005-11-29 Redback Networks Inc. Decoding suffix instruction specifying replacement destination for primary instruction
JP3627725B2 (ja) * 2002-06-24 2005-03-09 セイコーエプソン株式会社 情報処理装置及び電子機器
JP5471082B2 (ja) * 2009-06-30 2014-04-16 富士通株式会社 演算処理装置および演算処理装置の制御方法
GB2486737B (en) * 2010-12-24 2018-09-19 Qualcomm Technologies Int Ltd Instruction execution
US9329869B2 (en) * 2011-10-03 2016-05-03 International Business Machines Corporation Prefix computer instruction for compatibily extending instruction functionality
US9804852B2 (en) * 2011-11-30 2017-10-31 Intel Corporation Conditional execution support for ISA instructions using prefixes

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5819080A (en) * 1996-01-02 1998-10-06 Advanced Micro Devices, Inc. Microprocessor using an instruction field to specify condition flags for use with branch instructions and a computer system employing the microprocessor
CN1434937A (zh) * 1999-12-17 2003-08-06 英特尔公司 检测单字节前缀和分支的长度解码
CN1431585A (zh) * 2002-08-22 2003-07-23 智慧第一公司 延伸微处理器地址模式的装置及方法
US20090089564A1 (en) * 2006-12-06 2009-04-02 Brickell Ernie F Protecting a Branch Instruction from Side Channel Vulnerabilities
CN101436122A (zh) * 2008-11-25 2009-05-20 中国科学院微电子研究所 一种实现指令并行执行的优化方法和装置

Also Published As

Publication number Publication date
GB201501621D0 (en) 2015-03-18
GB2526647B (en) 2016-05-25
GB201501620D0 (en) 2015-03-18
US10379861B2 (en) 2019-08-13
GB2526647A (en) 2015-12-02
GB2521019A (en) 2015-06-10
CN105183429B (zh) 2019-06-11
US20150347144A1 (en) 2015-12-03
GB2526648B (en) 2018-09-26
GB201501619D0 (en) 2015-03-18
US9898293B2 (en) 2018-02-20
GB2526648A (en) 2015-12-02
GB2521019B (en) 2016-05-25
DE102015107875A1 (de) 2015-12-03
GB201409326D0 (en) 2014-07-09
GB2526646B (en) 2016-05-25
GB2526646A (en) 2015-12-02
US20180143835A1 (en) 2018-05-24

Similar Documents

Publication Publication Date Title
CN105183429A (zh) 解码被一个或多个其它指令修改的指令
CN204945992U (zh) 一种处理器
RU2417407C2 (ru) Способы и устройство для моделирования поведения предсказания переходов явного вызова подпрограммы
US20070157007A1 (en) Forward-pass dead instruction identification
CN105320519A (zh) 使用长历史记录的条件分支预测
CN104820580A (zh) 改进的返回堆栈缓存
US20130152048A1 (en) Test method, processing device, test program generation method and test program generator
US10606600B2 (en) Fetched data in an ultra-short piped load store unit
CN105993000B (zh) 用于浮点寄存器混叠的处理器和方法
KR101806279B1 (ko) 명령어 순서 강제 명령어들의 쌍들, 프로세서들, 방법들, 및 시스템들
CN104978284A (zh) 处理器子程序高速缓冲存储器
US20140250289A1 (en) Branch Target Buffer With Efficient Return Prediction Capability
US9268714B2 (en) Validation of cache locking using instruction fetch and execution
JP7377807B2 (ja) リンク付き分岐命令の分岐ターゲット・バリアント
CN112596792B (zh) 分支预测方法、装置、介质及设备
US10372902B2 (en) Control flow integrity
CN110825442B (zh) 一种指令预取方法及处理器
US20170192838A1 (en) Cpu system including debug logic for gathering debug information, computing system including the cpu system, and debugging method of the computing system
US20130283023A1 (en) Bimodal Compare Predictor Encoded In Each Compare Instruction
CN113448626B (zh) 推测分支模式更新方法和微处理器
CN107045606B (zh) 用于监测程序代码的执行的方法和设备
TWI502498B (zh) 微處理器、積體電路、計算機程式產品與提供微碼指令儲存空間的方法
CN102902548B (zh) 汇编级内存复制标准库函数的生成方法及装置
US9720840B2 (en) Way lookahead
US7353343B2 (en) Memory management system for preventing program execution when CPU fetches execution code from unoccupied region of memory

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
CB02 Change of applicant information

Address after: Hertfordshire

Applicant after: Mex Technology Co.,Ltd.

Address before: Hertfordshire

Applicant before: Hai Luo Software Co.,Ltd.

TA01 Transfer of patent application right

Effective date of registration: 20180713

Address after: California, USA

Applicant after: Imagination Technologies Ltd.

Address before: Hertfordshire

Applicant before: Mex Technology Co.,Ltd.

Effective date of registration: 20180713

Address after: Hertfordshire

Applicant after: Hai Luo Software Co.,Ltd.

Address before: Hertfordshire

Applicant before: Imagination Technologies Ltd.

GR01 Patent grant
GR01 Patent grant