CN101160560B - 确保正确预解码的方法和设备 - Google Patents

确保正确预解码的方法和设备 Download PDF

Info

Publication number
CN101160560B
CN101160560B CN2006800129228A CN200680012922A CN101160560B CN 101160560 B CN101160560 B CN 101160560B CN 2006800129228 A CN2006800129228 A CN 2006800129228A CN 200680012922 A CN200680012922 A CN 200680012922A CN 101160560 B CN101160560 B CN 101160560B
Authority
CN
China
Prior art keywords
instruction
filler
embedded data
district
strings
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.)
Expired - Fee Related
Application number
CN2006800129228A
Other languages
English (en)
Other versions
CN101160560A (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.)
Qualcomm Inc
Original Assignee
Qualcomm Inc
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 Qualcomm Inc filed Critical Qualcomm Inc
Publication of CN101160560A publication Critical patent/CN101160560A/zh
Application granted granted Critical
Publication of CN101160560B publication Critical patent/CN101160560B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • 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
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • 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
    • G06F9/382Pipelined decoding, e.g. using predecoding

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Devices For Executing Special Programs (AREA)
  • Executing Machine-Instructions (AREA)
  • Compression, Expansion, Code Conversion, And Decoders (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Advance Control (AREA)

Abstract

本发明揭示用于确保指令的同步预解码的技术。指令串含有来自可变长度指令集的指令和内嵌数据。一种技术包含将一区组界定为等于所述指令集中的最小长度指令,和将组成所述指令集中最长长度指令的区组的数目界定为MAX。所述技术进一步包含当将程序编译或汇编为所述指令串时,确定内嵌数据段的末端,以及将长度为MAX-1的填充符插入所述指令串中所述内嵌数据的末端。当对所述填充的指令串进行预解码时,即使内嵌数据恰好经编码而类似于所述可变长度指令集中的现有指令,预解码器也维持与所述填充的指令串中的指令同步。

Description

确保正确预解码的方法和设备
技术领域
本发明大体上涉及消除处理具有多种长度的指令的处理器管线中的预解码同步错误,且更明确地说,涉及用于填充程序代码以使得预解码引擎将可变长度指令正确地辨识为在预解码包含内嵌数据的指令串时的指令的有利技术。
背景技术
如今处理器通常支持具有可变长度指令的指令集。举例来说,
Figure GSB00000670965800011
指令集由具有32位长度的指令和具有16位长度的指令组成。支持可变长度指令的管线处理器可含有预解码管线级,其用于对指令进行部分解码,以便简化后续的解码级并因此使管线成流线型。典型的预解码管线级以每个代码行为基础检验程序代码,对代码行进行预解码,并将经预解码的信息连同代码行一起写入到高速缓冲存储器中。依据用于创建程序或目标代码的编译程序,程序代码可含有内嵌数据以及指令。
内嵌数据可能恰好看起来像指令或指令的一部分。在此情况下,预解码引擎通常将误解译内嵌数据。因此,在预解码引擎将16位的数据不正确地预解码为32位指令的第一部分的情况下,后续16位指令接着可能又被解译为32位指令的第二半,使得无效的经预解码的信息将存储在高速缓冲存储器中,且预解码过程可能失去与对下一指令进行预解码的同步。通常直到后续解码级时才辨识出同步错误。这种同步错误导致当试图从预解码错误中恢复时出现处理器延迟和无用的功率消耗。
对上述问题的常规解决方法包含提供恢复机制以使预解码引擎再同步。
发明内容
除了本发明第一实施例的若干方面之外,本发明第一实施例意识到需要一种在内嵌数据恰好被编码为指令流中的指令时阻止预解码引擎必须再同步的技术,其中所述指令流含有来自可变长度指令集的指令和内嵌数据。为此,此实施例包含界定等于所述指令集中的最小长度指令的区组,和将组成所述指令集中的最长长度指令的区组的数目界定为MAX。所述实施例进一步包含当将程序编译或汇编为所述指令串时,确定内嵌数据段的末端,以及将长度为MAX-1的填充符插入所述指令串中,至所述内嵌数据的末端。当对填充的指令流进行后续的预解码时,即使内嵌数据恰好类似可变长度指令集中的现有指令或指令的一部分,预解码器也有利地维持与填充的指令流中的指令同步。本发明还涉及一种确保指令串中的指令的正确预解码的方法,所述指令串含有来自指令集的指令和内嵌数据段,所述指令集具有变化长度的指令,所述指令集中的最小指令的长度界定一区组,组成所述指令集中最长指令的区组的数目界定数目MAX,所述方法包括:当将程序编译或汇编为指令串时,确定所述指令串中的第一内嵌数据段的末端;以及将长度为MAX-1个区组的填充符插入至所述第一内嵌数据段的末端以形成填充指令串;以及存储所述填充指令串。
本发明又涉及一种确保指令串中的指令的正确预解码的方法,所述指令串含有来自指令集的指令和内嵌数据,所述指令集具有变化长度的指令,所述指令集中的最小长度指令界定一区组,所述方法包括:确定指令串中的内嵌数据的区组是否经编码以类似于所述指令集中的指令;以及当所述内嵌数据的区组经编码以类似于所述指令集中的指令时:至少检查用于内嵌数据与下一指令之间的过渡的所述指令串的紧接的X-1个区组,其中X是所述类似指令的区组大小;确定在内嵌数据与下一指令之间的过渡之后的区组的数目Y;如果Y大于0,那么在所述过渡之后插入大小为Y的填充符以形成填充指令串;以及输出所述填充指令串。
本发明又涉及一种用于确保填充指令串的中的指令的正确预解码的设备,所述指令串含有来自指令集的指令和内嵌数据段,所述指令集具有变化长度的指令,所述指令集中的最小指令的长度界定一区组,组成所述指令集中最长长度指令的区组的数目界定数目MAX,所述设备包括:用于当将程序编译或汇编为指令串时确定所述指令串中的第一内嵌数据段的末端的装置;以及用于将长度为MAX-1个区组的填充符插入至所述第一内嵌数据段的末端以形成填充指令串的装置,其中,对所述填充符的内容进行确定,以使得预解码器能够正确标识出所述填充符之后的后续指令;以及用于存储所述填充指令串的装置。
从以下具体实施方式和附图中将更全面地理解本发明以及本发明的其它特征和优点。
附图说明
图1展示可有利地使用本发明实施例的示范性无线通信系统。
图2是可有利地使用本发明实施例的处理器复合体的方框图。
图3展示根据其中利用固定长度填充的本发明第一实施例,含有用于具有16和32位的指令大小的变化长度指令集的填充符的说明性程序段。
图4展示根据本发明第一实施例,含有用于具有8、16、24和32位的指令大小的变化长度指令集的三个填充字节的说明性程序段。
图5展示根据其中利用可变长度填充的本发明第二实施例,含有用于具有8、16、24和32位的指令大小的变化长度指令集的两个填充字节的说明性程序段。
图6展示根据本发明第二实施例,含有用于具有8、16、24和32位的指令大小的变化长度指令集的一个填充字节的说明性程序段。
图7是根据本发明的教示的执行软件的计算机的方框图。
图8是根据本发明实施例进行操作的处理器管线的方框图。
图9说明根据本发明实施例对于恒定大小填充的可伸缩编码方法。
图10是说明根据本发明第一实施例将恒定大小填充符插入程序代码中的方法的流程图。
图11是说明根据本发明第二实施例将可变大小填充符插入程序代码中的方法的流程图。
具体实施方式
现将参看附图更充分地描述本发明,附图中展示本发明的若干实施例。然而,本发明可以各种形式实施,且不应解释为限于本文陈述的实施例。事实上,提供这些实施例以使得本发明将是详尽和全面的,且将把本发明的范围完全传达给所属领域的技术人员。
将了解,本发明可实施为方法、系统或计算机程序产品。因此,本发明可采取硬件实施例、软件实施例或组合软件与硬件方面的实施例的形式。此外,本发明可采取计算机可用存储媒体上的计算机程序产品的形式,所述计算机可用存储媒体具有内嵌在媒体中的计算机可用程序代码。可利用任何合适的计算机可读媒体,包含硬盘、CD-ROM、光学存储装置、快闪存储器或磁性存储装置。
根据本发明教示,可用例如C、C++、原始汇编程序、
Figure GSB00000670965800031
Smalltalk、
Figure GSB00000670965800032
Visual
Figure GSB00000670965800033
TSQL、Perl的编程语言或用各种其它编程语言初始编写可编译、汇编、编译或汇编之后进行预解码等的计算机程序代码。程序代码或计算机可读媒体是指例如目标代码的其格式可由处理器理解的机器语言代码。本发明的软件实施例不依赖于其以特定编程语言进行的实施方案。
图1展示可有利地使用本发明实施例的示范性无线通信系统100。出于说明的目的,图1展示三个远程单元120、130和150以及两个基站140。将了解,典型的无线通信系统可具有更多的远程单元和基站。远程单元120、130和150包含分别执行程序代码125A、125B和125C的硬件组件。如下文进一步论述,根据本发明教示来修改程序代码125A、125B和125C。图1展示从基站140到远程单元12、13和15的前向链路信号180,以及从远程单元12、13和15到基站140的逆向链路信号190。
图1中,在无线本地环路系统中,远程单元120展示为移动电话,远程单元130展示为便携式计算机,且远程单元150展示为固定位置远程单元。举例来说,远程单元可以是手机、手持式个人通信系统(PCS)单元、例如个人数据助理的便携式数据单元,或例如仪表读数设备的固定位置数据单元。尽管图1说明根据本发明教示的远程单元,但本发明不限于这些所说明的示范性单元。本发明可合适地用于任何管线处理环境中,其中利用预解码级或引擎来对包含可变长度指令和内嵌数据的指令串进行预解码。
图2展示可有利地使用本发明实施例的处理器复合体200。处理器复合体200可合适地用于执行并存储根据本发明教示修改的程序代码125A-C。处理器复合体200包含中央处理单元(CPU)240、1级数据高速缓冲存储器230、1级指令高速缓冲存储器220,和2级指令与数据高速缓冲存储器210。CPU 240耦合到1级数据高速缓冲存储器230、1级指令高速缓冲存储器220和2级高速缓冲存储器210。CPU 240在预解码级期间对程序代码进行预解码并将经预解码的信息与程序代码一起写入1级指令高速缓冲存储器220,或者如果1级指令高速缓冲存储器已满,那么写入2级高速缓冲存储器210。CPU 240以层级型式从高速缓冲存储器检索指令和数据。举例来说,当CPU 240需要获取指令时,CPU 240将访问1级指令高速缓冲存储器220以确定匹配。如果1级指令高速缓冲存储器220中不存在匹配,那么CPU 240将访问2级指令与数据高速缓冲存储器210。类似地,当CPU 240需要获取数据时,CPU 240将访问1级数据高速缓冲存储器230以确定匹配。如果1级数据高速缓冲存储器230中不存在匹配,那么CPU 240将访问2级指令与数据高速缓冲存储器210。本发明实施例不限于所说明的处理器复合体200,且可进一步适用于(举例来说)利用预解码引擎的任何处理器复合体,例如任何精简指令集计算机(RISC)处理器。将了解,本发明不限于RISC环境。
图3展示根据其中插入恒定长度填充的本发明第一实施例,含有填充符的说明性程序段300。程序段300可合适地存储为2级高速缓冲存储器(例如,2级高速缓冲存储器210)的(一或多个)高速缓冲存储器线,或存储在程序存储器中。应注意,尽管出于说明的目的,假定从(一或多个)高速缓冲存储器线中检索程序段,但本发明教示适用于与从中检索程序段的存储器装置无关地处理程序段。由于高速缓冲存储器线通常具有固定长度,所以术语“指令串”或“指令流”通常涉及可或可不跨越高速缓冲存储器线的边界的一个或一个以上程序段。此外,程序段300还可说明高速缓冲存储器线的一部分。
说明性程序段300包含指令310、内嵌数据320,和填充符330。指令310来自可变长度指令集。图3中说明来自可变长度指令集的若干示范性指令。在此实例中,可变长度指令集中的指令为16或32位长。出于说明性目的,字节指示符305说明高速缓冲存储器线中指令开始的字节位置,并指示指令的大小。举例来说,LOAD 0A指令开始于字节位置00并结束于字节位置03。因此,LOAD 0A是32位指令。类似地,ADD指令为16位长,且BRANCH指令为32位长。在程序段300中,内嵌数据字节322和324在BRANCH指令之后。根据本发明教示,在数据字节324之后插入填充符330的填充字节332和334。ADD指令336在填充字节334之后。
内嵌数据320不是即时数据,且通常与程序段中的附近指令(例如,LOAD指令312)有关。通常,内嵌数据的局域性对于标准编译程序来说是便利性的问题。许多标准编译程序(例如,编译程序)通常在程序段内产生内嵌数据320。标准编译程序可能内嵌与邻近指令无关的数据的一个原因是允许附近的指令较容易地访问数据空间。举例来说,当寻址数据时,将允许载入指令使用较少的偏移位,参看图3,LOAD 0A指令312载入在偏移0A处开始的数据字节322和324。
为了以举例的方式说明本发明的有利特征,我们首先描述内嵌数据320恰巧与32位LOAD指令的第一两个字节相似且尚未添加填充符330的情形。在此状况下,在管线处理器的预解码操作期间,预解码器通过一次检验16位而检验高速缓冲存储器线的指令,而处理所述高速缓冲存储器线。
预解码器对每一指令进行部分解码,并随后将整个高速缓冲存储器线连同经预解码的信息一起写回到高速缓冲存储器(例如,1级指令高速缓冲存储器220),且如果1级高速缓冲存储器已满,那么写回到2级高速缓冲存储器210。通常,经预解码的信息可包含例如以下信息:指令在高速缓冲存储器线中的哪个位置开始以用于后续的解码操作、指令是载入指令还是存储指令、指令是否为算术、指令是较大指令的第一半还是第二半、指令是否复杂等。由于存在我们已假定为与LOAD指令的第一部分相似的内嵌数据320的缘故,内嵌数据将被预解码器不正确地解译为LOAD指令的一部分。在此实例中,后续的ADD指令336将被不正确地预解码为LOAD指令的第二半。
转向如图3所示添加有填充符330时预解码器的操作,预解码器将以每个区组为基础步进通过高速缓冲存储器线300。区组是等于可变长度指令集中的最短长度指令的大小的量度单位。对于此实例,指令集含有16位和32位的长指令。因此,一个区组等于16位。通常,对于指令集来说,内嵌数据的大小是区组的倍数。关于程序段300,预解码器首先检验第一区组,LOAD 0A指令312的第一16位,随后是第二区组,LOAD 0A指令312的第二16位。其次,预解码器检验下一区组,16位ADD指令的16位。第三,预解码器检验下一区组,BRANCH 0E指令的第一16位,随后是下一区组,BRANCH 0E指令的第二16位。由于内嵌数据320看起来像LOAD指令的第一16位,所以预解码器对内嵌数据320进行预解码,随后对填充符330进行预解码,如同它们一起构成32位LOAD指令。因此,由于根据本发明教示而插入的填充符的缘故,预解码器有利地维持与高速缓冲存储器线中的下一指令同步,使得当其检验下一区组(开始于字节位置0E的ADD指令)时,其正确地辨识出ADD指令。如上文所论述,在没有插入的填充符的情况下,预解码器将对ADD指令336进行预解码,如同其是LOAD指令的其余16位,从而导致预解码器不正确地预解码ADD指令336且还可能不正确地预解码后续指令。
一旦已预解码高速缓冲存储器线,就将高速缓冲存储器线和预解码信息写入高速缓冲存储器并准备用于后续的解码和执行操作。应注意,预解码器可能由于将内嵌数据和填充符330预解码为LOAD指令的其余16位而产生一些无效的预解码信息。此类无效的预解码信息毫无意义,因为当程序实际执行时,由于程序流的缘故,程序计数器将不会被引导以执行内嵌数据或内嵌填充符。举例来说,在执行指令BRANCH 0E之后,程序计数器将指向地址0E并促使接着执行ADD指令336,从而避开内嵌数据320和填充符330以及任何相关联的无效的预解码信息。
图4展示根据本发明第一实施例含有用于具有8、16、24和32位的指令大小的变化长度指令集的三个填充字节的说明性程序段400。程序段400可合适地存储为2级高速缓冲存储器(例如,2级高速缓冲存储器210)的高速缓冲存储器线的一部分、高速缓冲存储器线,或多个高速缓冲存储器线。或者,程序段400可存储在某一其它形式的程序存储器中。程序段包含指令410、内嵌数据420,和填充符430。在此实例中,指令410来自具有8、16、24或32位长的长度的可变长度指令集。可变长度指令集的区组大小为8位或1个字节。出于说明的目的,字节指示符405说明高速缓冲存储器线中的字节位置。在程序段400中,内嵌数据420在16位BRANCH指令414之后。根据本发明教示,在数据字节426之后分别在字节位置09、0A和0B处插入填充符430的填充字节432、434和436。存储(STOR)指令416(8位指令)在填充字节436之后,并开始于字节位置0C。相乘(MULT)指令418(24位指令)开始于下一字节位置0D。
由于在此实例中最小指令是一个字节,所以一区组是一个字节。预解码器在处理程序段400时将一次检验一个区组。对于图4-6的所有程序段400、500和600中的每一者,预解码器以相同方式对相应程序段的第一8个字节进行操作。为了简化论述,我们将参看图4描述对所述8个字节的操作。预解码器将检验LOAD 06指令412的第一区组,辨识出第一区组是LOAD指令,并循序地检验来自高速缓冲存储器线的下一三个区组(字节位置01-03)以对LOAD 06指令412进行预解码。预解码器接着将检验BRANCH 0C指令414的第一区组,辨识出第一区组是BRANCH 0C指令,并循序地检验来自高速缓冲存储器线的下一区组(字节位置05)以对BRANCH 0C指令414进行预解码。以与变化长度指令集中的任何指令不同的方式编码数据字节422和424。因此,预解码器将检验字节位置06处的区组,辨识出其含有数据并继续下一步。其继续检验字节位置07处的下一区组(数据字节424),并正确地辨识出数据字节424也含有数据。
对于图4中所说明的实例,数据字节426恰巧类似于32位指令(例如,LOAD指令)的第一8位。因此,在预解码器将数据字节426预解码为32位LOAD指令的第一部分之后,预解码器将考虑下一3个区组(填充字节432、434和436),如同所述三个字节是此一致的LOAD指令的其余部分。由于填充符430的缘故,下一指令(STOR指令416)将被正确预解码,因此维持预解码器与高速缓冲存储器线中的指令之间的同步。在不插入填充符430的情况下,预解码器将对应于STOR指令416和MULT指令418的字节误解为对应于一致的LOAD指令的最后3个字节的字节,从而导致预解码器将STOR指令416预解码为一致的LOAD指令的第二字节,且将MULT指令418的第一两个字节预解码为一致的LOAD指令的最后两个字节,因此导致预解码器失去与高速缓冲存储器线中的指令的同步。
作为另一实例,如果图4的数据字节426经编码以恰巧类似于24位指令(例如,MULT指令)的第一8位,那么预解码器将检验下一两个区组(填充字节432和434),如同所述两个字节属于一致的MULT指令。预解码器接着将检验下一区组,填充字节436。如果如下文进一步处理,填充字节436被编码为8位指令或编码为与指令集不同的数据,那么预解码器将检验在字节位置0C处存在的下一区组,STOR指令416。此实例说明不管数据字节426如何被误解,填充符430均保持辨识内嵌数据之后的指令的完整性。
图5展示根据其中使用变化的填充符大小的本发明第二实施例,含有用于具有8、16、24和32位的指令大小的变化长度指令集的两个填充字节的说明性程序段500。图5说明依据类似于一指令的内嵌数据会如何被预解码器误解,可如何将另一大小的填充符插入程序代码中。使用变化长度的填充符有利地减小了程序代码大小。程序段500包含指令510、数据520和填充符530。程序段500与程序段400相同,只是程序段500在填充符530中少了一个填充字节,且因此,填充字节534之后的指令在高速缓冲存储器线中上移一个字节位置。由于所述移位,BRANCH OB指令514的目标地址递减一个字节。
图5中所说明的实例涉及数据字节526,其恰巧类似于可变长度指令集中的24位指令的第一8位。因此,当预解码器开始预解码数据字节526时,预解码器将检验下一两个区组(填充字节532和534),如同所述两个字节是一致的24位指令的其余部分。预解码器接着将检验下一区组(STOR指令516)以进行预解码,从而维持预解码器与高速缓冲存储器线中的指令之间的同步。在图5中所说明的实例中,两字节的填充符已足够,而不是图4中所使用的三字节的填充符。
在不插入填充符530的情况下,预解码器将对应于STOR指令516和MULT指令518的区组误解为对应于一致的24位指令的最后两个字节的字节,从而导致预解码器与高速缓冲存储器线不同步。因此,辨识内嵌数据之后的指令的完整性受损。
图6展示根据本发明第二实施例含有用于具有8、16、24和32位的指令大小的变化长度指令集的一个填充字节的说明性程序段600。图6说明依据数据会如何被预解码器误解,可如何仅将一个填充字节插入程序代码中。程序段600包含指令610、数据620和填充符630。程序段600与程序段500相同,只是程序段600在填充符630中少了一个填充字节,且因此,填充字节632之后的指令在高速缓冲存储器线中上移一个字节位置。由于所述移位,BRANCH OA指令614的目标地址递减一个字节。
图6中所说明的实例涉及数据字节626,其恰巧类似于可变长度指令集中的16位指令的第一8位。当预解码器开始预解码数据字节626时,预解码器将检验下一区组(填充字节632),如同填充字节632属于由数据字节626指示的16位指令。预解码器接着将检验下一区组(STOR指令616)以进行预解码,从而维持预解码器与高速缓冲存储器线中的指令之间的同步。在图6中所说明的实例中,由于数据字节632类似于16位指令的第一8位,所以一个字节大小的填充符将已足够。
如结合图5和6描述的实例中所示,在内嵌数据之后插入的填充符的大小可变化。由于在计算机上执行的软件编译程序或汇编程序以较高级的编程语言产生具有如图3-6中所说明的指令和内嵌数据的程序代码,所以内嵌数据无论何时类似于来自变化长度指令集的指令,编译程序或汇编程序均可辨识出,并相应地插入填充符。如下文进一步论述,可应用固定长度或变化长度的填充符。
图7是根据本发明教示执行软件730的计算机710的方框图700。尽管未说明,但计算机710包含例如处理器、存储器、输入/输出装置等内部组件,以及用于在这些内部组件之间通信的总线。软件730可合适地为根据本发明教示而修改的编译程序或汇编程序。软件730驻存在计算机710的存储器中。软件730接收程序720作为输入,并产生具有根据本发明插入的填充符的经编译或汇编的程序代码740作为输出。可用C、C++、原始汇编程序、
Figure GSB00000670965800091
Smalltalk、
Figure GSB00000670965800092
Visual
Figure GSB00000670965800093
TSQL、Perl或用各种其它编程语言编写程序720。写入程序720,以当程序代码740在例如包含在手机、手持式PCS单元、计算机和便携式数据单元中的目标处理器上执行时实现所述目标处理器上的特定功能。目标处理器可不同于执行软件730的计算机710,或可与其相同。
软件730包含解析装置,其解析程序720以确定程序720的结构内容以及程序720在句法上是否有效。所述解析装置还将程序720转换为内部形式。软件730进一步包含代码产生装置。所述代码产生装置将内部形式转译为可由目标处理器执行的目标代码。所述目标代码由具有内嵌数据和来自可变长度指令集的指令的一个或一个以上程序段组成。软件730进一步包含插入装置,其在内嵌数据段的末端处插入填充符。
为了计算待插入在内嵌数据与后续指令之间的填充大小,软件730包含任选的分析装置,其分析内嵌数据段的内容。内嵌数据段是内嵌在指令流中被指令包围的数据。软件730进一步包含任选的辨识装置。在编译程序720期间,辨识装置辨识内嵌数据段内的任何区组是否经编码而类似于指令集中指令的区组。如果是,那么插入装置考虑到内嵌数据的区组所类似的指令长度和内嵌数据的区组相对于后续指令的位置而在内嵌数据之后插入一定数目的填充区组。
或者,软件730视情况可包含插入装置,其插入恒定大小的填充符。此替代方法由于不必分析内嵌数据编码而有利地减小了软件730的复杂性。在此替代实施例中,软件730包含检测装置,其检测内嵌数据段的末端与指令之间的过渡。只要辨识出从内嵌数据段到指令的过渡,插入装置接着就插入具有恒定数目的填充区组的填充符。所插入的填充符的每一填充区组可合适地经编码以含有指令集中已界定的具有一个区组长度的有效指令,或者可仅含有具有不与指令集中的任何指令类似的编码的数据。下文将结合对图9的论述进一步论述替代的填充符编码。
为了确定组成待插入在程序代码740中的恒定大小的填充符的填充区组的数目,软件730利用目标处理器所支持的组成指令集的各种长度的指令。组成恒定大小的填充符的填充区组的数目可写为:
Pz=(Max(instrlen)-Min(instrlen))/Min(instrlen)
(1)
其简化为
Pz=(Max(instrlen)/Min(instrlen))-1,且为了简便,
(2)
MAX=(Max(instrlen)/Min(instrlen)),因此简化,
(3)
Pz=MAX-1                    (4)
其中Pz是填充大小(以区组计),Max(instrlen)是最长指令的长度(以位计),Min(instrlen)是最短指令的长度(以位计),且MAX是最长指令的长度(以区组计)。举例来说,在具有32和16位指令的指令集中,一个区组等于16位(最短长度指令)。以区组计的填充的数目将为(32[位]/16[位/区组])-1,其等于1个区组或16位。因此,只要数据与下一指令之间存在过渡,就可插入含有取自指令集的16位指令的填充符。
举另一实例,在具有32、16和8位指令的指令集中,一个区组等于8位(最短指令)。以区组计的填充的数目将等于(32[位]/8[位/区组])-1,其等于3个区组或24位。因此,只要数据与下一指令之间存在过渡,接着就可插入24位填充符。下文结合对图9的论述进一步描述24位填充符的组成部分的其它可能的变化形式。下文结合图11描述可变长度填充的内容。
图8是根据本发明实施例进行操作的处理器管线800的方框图。处理器管线800包含1级高速缓冲存储器获取级810、2级高速缓冲存储器获取820、预解码器830、写入级840、指令对准级850,和解码并执行级860。
在1级高速缓冲存储器获取级810处,基于地址从1级高速缓冲存储器获取高速缓冲存储器线。高速缓冲存储器线可含有一个或一个以上程序段,其可能类似于图3-6中所说明的示范性程序段。如果存在高速缓存未中,那么如获取级820所示从2级高速缓冲存储器获取高速缓冲存储器线,并将其转发到预解码器830。预解码器830识别组成高速缓冲存储器线中的指令的区组的数目。预解码器830利用所述数目的区组对指令执行适当的预解码。一旦预解码指令完成,就将所得的预解码信息临时存储在缓冲器中,且预解码高速缓冲存储器线中的下一指令。如果高速缓冲存储器线中没有更多区组要处理,那么管线继续行进到写入级840。在写入级840处,将经预解码的信息和高速缓冲存储器线写入1级高速缓冲存储器。预解码器830并行地将高速缓冲存储器线和预解码信息转移到指令对准级850。在指令对准级850处,使高速缓冲存储器线中的指令对准并准备用于后续的解码并执行级860。
应注意,预解码器830不对不与指令类似的内嵌数据进行预解码。然而,如果内嵌数据确实与指令类似,那么可对内嵌数据且可能对填充符进行预解码。如上所述,此类无效的预解码信息毫无意义,因为当程序实际执行时,由于程序流的缘故,程序计数器将不会被引导以执行内嵌数据或内嵌填充符。本发明实施例不限于所说明的管线800,且进一步适用于包含对可变长度指令集进行预解码的预解码操作的任何管线处理器。
对于如图3-6所示的程序段,除非将区组辨识为指令集中的指令,否则预解码器将以每个区组为基础对程序段进行操作。当将区组辨识为指令集中的指令时,检验一个或一个以上额外区组以对整个指令进行预解码。通过编码填充符的内容以类似于指令集中的指令,预解码器可更有效地跟踪到下一指令。
图9说明根据本发明实施例对于用于具有32、24、16和8位指令的指令集的恒定大小填充900的可伸缩编码方法。根据上述公式(2),对于此特定可变长度指令集来说,最大大小填充为3个区组或字节。只要在内嵌数据与后续指令之间发现过渡,就将在内嵌数据的末端处插入填充900。此填充900可由将不会被辨识为指令的区组的数据组成。或者,填充符900可由取自指令集的指令的变化组合组成。举例来说,填充符可含有三个8位指令或可伸缩编码。可伸缩编码可含有经编码以被辨识为24位指令的第一字节的第一字节910、经编码以被辨识为16位指令的第一字节的第二字节920,和经编码以被辨识为8位指令的第三字节930。通过24位填充900的伸缩编码,预解码器830将能够与24位填充符900之后的后续指令同步,而不管预解码操作由于将内嵌数据不正确地解码为指令而在24位填充中何处终止。
图10是说明根据本发明第一实施例将恒定大小填充符插入程序代码(例如,程序代码740)中的方法1000的流程图。如上所述在计算机710上执行的软件730可实施方法1000的步骤。在步骤1010处,所述方法分析管线处理器所支持的可变长度指令集的长度以确定填充符的大小。在步骤1010处,使用上述等式(2)来确定填充符的大小。在步骤1015处,确定填充符的内容。一个实例是使填充符由来自指令集的长度等于填充符大小的已知指令组成。举例来说,在具有16和32位指令两者的可变长度指令集中,填充符大小为16位。因此,从指令集中选择16位指令以作为填充符而插入。在另一实例中,通过从指令集中选择最短指令并将其多次连接直到其达到与填充符相同的大小为止,来构造所述填充符。另一实例将是设计可伸缩编码或从指令集中选择可伸缩指令(如果存在的话),如图9所述。在另一实例中,填充符可含有不同于指令集中的指令的数据。如上文结合图3所述,由于对内嵌数据或填充符进行预解码而产生的预解码信息毫无意义,因为程序流将不会正常地促使执行内嵌数据或填充符。将了解,或者可修改执行级以在执行级试图执行内嵌数据或填充符的不太可能的情形下辨识出填充符。
在步骤1020处,在通过软件编译程序或汇编程序产生程序代码的步骤期间,所述方法确定内嵌数据与下一指令之间是否存在过渡点。如果没有内嵌数据,那么所述方法进行到步骤1040。如果存在内嵌数据,那么所述方法进行到步骤1030。在步骤1030处,将填充符插入程序代码中,位于内嵌数据与下一指令之间的过渡点处。在步骤1040处,所述方法确定程序代码的产生是否完成。如果是,那么方法1000结束,且已产生其中插入有填充符的程序代码。如果不是,那么方法1000进行到步骤1020,其中其继续在内嵌数据与后续指令之间的过渡处插入填充符。当所述方法完成时,所产生的程序代码将含有填充符以便允许预解码器在内嵌数据类似于指令时将可变长度指令正确地辨识为指令。
图11是说明根据本发明第二实施例将可变大小填充符插入程序代码中的方法1100的流程图。如上所述,在计算机710上执行的软件730可实施方法1100的步骤。在步骤1110处,所述方法分析可变长度指令集以确定一区组等于最短指令的大小。或者,所述方法可仅知道或被告知区组的大小。此步骤可实施为在软件730上设定编译程序选项,其通知软件730指令集中的最短长度指令。或者,由于软件730产生包含来自指令集的指令的程序代码,所以软件730可能已知道最短指令的长度,使得此步骤仅涉及在软件730的执行期间读取一变量以确定一个区组的大小。在步骤1120处,在将程序代码编译或汇编为指令流期间,方法1100确定内嵌数据的一区组(例如指令流中的常数)是否经编码以类似于来自变化长度指令集的指令。如果不是,那么方法1100进行到步骤1125。在步骤1125处,所述方法确定编译或汇编是否完成,如果是,那么方法1100结束。否则,方法1100通过进行到步骤1120而继续。
返回步骤1120,如果内嵌数据的一区组经编码使得其类似于一指令,那么方法1100进行到步骤1130。在步骤1130处,方法1100检查指令流的下一X-1个区组,其中X是类似指令的大小(以区组计)。在步骤1135处,方法1100通过检查在经编码以类似于一指令的内嵌数据的区组之后开始的下一X-1个区组,而确定内嵌数据与下一指令之间的过渡之后的区组数目N(如果存在的话)。
换句话说,此确定步骤考虑到后续预解码器为了完成对内嵌数据的区组所类似的指令进行预解码而将要检验的区组的数目。举例来说,如果区组是一个字节且数据的区组类似于32位指令的第一字节,那么方法1100检查来自指令流的下三个字节,以确定是否存在从内嵌数据到下一指令的过渡。
方法1100进行到步骤1138,其中其确定N是否大于零。如果N不大于零,那么类似于指令的内嵌数据的区组将与后续预解码器毫无关系,因为由于潜在的预解码错误引起的位移量仍在具有类似指令的内嵌数据内。因此,所述方法进行到步骤1125。如果N大于零,那么所述方法进行到步骤1140。在步骤1140处,方法1100将填充符插入内嵌数据与下一指令之间的过渡中。所插入的填充符的大小N等于通过步骤1130中发现的内嵌数据与下一指令之间的过渡的区组数目。当所述方法完成时,所产生的程序代码将含有填充符以便允许预解码器在内嵌数据类似于指令时将可变长度指令正确地辨识为指令。
由于图5展示方法1100的说明性结果,所以让我们参看图5例如没有填充符530的情况。回想到数据字节526恰巧类似于24位指令的第一8位且一个区组等于8位,方法1100将检查数据字节526之后的下一X-1个或两个区组。在检查第一区组时,方法1100将辨识8位STOR指令516并确定发生了从内嵌数据到指令的过渡。在检查第二区组时,方法1100将辨识MULT指令518的第一字节。由于MULT指令518的第一字节距离过渡有两个区组,所以N等于两个区组。因此,接着如图6所示将两个区组的填充符530插在过渡处。当编译或汇编完成时,程序代码可含有具有不同长度的插入填充符。
虽然在实施例的情境下揭示了本发明,但将认识到,所属领域的一般技术人员可使用与上文的论述和所附权利要求书相一致的多种实施方案。

Claims (17)

1.一种确保指令串中的指令的正确预解码的方法,所述指令串含有来自指令集的指令和内嵌数据段,所述指令集具有变化长度的指令,所述指令集中的最小指令的长度界定一区组,组成所述指令集中最长指令的区组的数目界定数目MAX,所述方法包括:
当将程序编译或汇编为指令串时,确定所述指令串中的第一内嵌数据段的末端;以及
将长度为MAX-1个区组的填充符插入至所述第一内嵌数据段的末端以形成填充指令串;其中,对所述填充符的内容进行确定,以使得预解码器能够正确标识出所述填充符之后的后续指令;以及存储所述填充指令串。
2.根据权利要求1所述的方法,其中所述填充符经编码以不同于所述指令集中的任何指令。
3.根据权利要求1所述的方法,其中所述填充符经编码以包含来自所述指令集的彼此连接的多个最小长度的指令。
4.根据权利要求1所述的方法,其中可伸缩编码所述填充符以同步所述填充符之后的后续指令的预解码。
5.根据权利要求4所述的方法,其中所述最长指令是32位,所述最小指令是8位,其它指令是24和16位,所述填充符是三个字节,且经可伸缩编码的填充符具有类似于24位指令的第一字节的第一字节、类似于16位指令的第一字节的第二字节和类似于8位指令的第三字节。
6.根据权利要求1所述的方法,其中所述确定所述内嵌数据段的末端的步骤进一步包括:
辨识所述指令串中的后续指令位于所述内嵌数据段之后时的过渡。
7.根据权利要求1所述的方法,其中所述最小指令是8位。
8.根据权利要求1所述的方法,其进一步包括:
确定第二内嵌数据段的末端,以及
将长度为MAX-1个区组的填充符插入至所述第二内嵌数据段的所述末端。
9.根据权利要求1所述的方法,其中所述最小指令是16位。
10.根据权利要求9所述的方法,其中所述最长指令是32位。
11.一种确保指令串中的指令的正确预解码的方法,所述指令串含有来自指令集的指令和内嵌数据,所述指令集具有变化长度的指令,所述指令集中的最小指令界定一区组,所述方法包括:
确定指令串中的内嵌数据的区组是否经编码以类似于所述指令集中的指令;以及当所述内嵌数据的区组经编码以类似于所述指令集中的指令时:
至少检查用于内嵌数据与下一指令之间的过渡的所述指令串的紧接的X-1个区组,其中X是以区组计的类似指令的大小;
确定在所述内嵌数据与所述下一指令之间的所述过渡之后的区组的数目Y;
如果Y大于0,那么在所述过渡之后插入大小为Y的填充符以形成填充指令串;其中,对所述填充符的内容进行确定,以使得预解码器能够正确标识出所述填充符之后的后续指令;以及
输出所述填充指令串。
12.根据权利要求11所述的方法,其中所述填充符经编码以不同于所述指令集中的任何指令。
13.根据权利要求11所述的方法,其中所述填充符经编码以包含来自所述指令集的彼此连接的多个最小长度的指令。
14.根据权利要求11所述的方法,其中可伸缩编码所述填充符。
15.根据权利要求11所述的方法,其中所述最小指令是8位。
16.根据权利要求11所述的方法,其中所述最小指令是16位。
17.一种用于确保填充指令串中的指令的正确预解码的设备,所述指令串含有来自指令集的指令和内嵌数据段,所述指令集具有变化长度的指令,所述指令集中的最小指令的长度界定一区组,组成所述指令集中最长长度指令的区组的数目界定数目MAX,所述设备包括:
用于当将程序编译或汇编为指令串时确定所述指令串中的第一内嵌数据段的末端的装置;以及
用于将长度为MAX-1个区组的填充符插入至所述第一内嵌数据段的末端以形成填充指令串的装置,其中,对所述填充符的内容进行确定,以使得预解码器能够正确标识出所述填充符之后的后续指令;以及用于存储所述填充指令串的装置。
CN2006800129228A 2005-02-25 2006-02-24 确保正确预解码的方法和设备 Expired - Fee Related CN101160560B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US11/066,957 2005-02-25
US11/066,957 US7376815B2 (en) 2005-02-25 2005-02-25 Methods and apparatus to insure correct predecode
PCT/US2006/006677 WO2006091857A1 (en) 2005-02-25 2006-02-24 Methods and apparatus to insure correct predecode

Publications (2)

Publication Number Publication Date
CN101160560A CN101160560A (zh) 2008-04-09
CN101160560B true CN101160560B (zh) 2012-03-28

Family

ID=36570932

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2006800129228A Expired - Fee Related CN101160560B (zh) 2005-02-25 2006-02-24 确保正确预解码的方法和设备

Country Status (9)

Country Link
US (1) US7376815B2 (zh)
EP (1) EP1866745B1 (zh)
JP (2) JP5221153B2 (zh)
KR (1) KR101019393B1 (zh)
CN (1) CN101160560B (zh)
CA (1) CA2598704A1 (zh)
IL (1) IL185427A0 (zh)
RU (1) RU2405188C2 (zh)
WO (1) WO2006091857A1 (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE602005007216D1 (de) * 2004-05-27 2008-07-10 Nxp Bv Mikroprozessor und verfahren zur anweisungsausrichtung
US7376815B2 (en) * 2005-02-25 2008-05-20 Qualcomm Incorporated Methods and apparatus to insure correct predecode
US8214376B1 (en) * 2007-12-31 2012-07-03 Symantec Corporation Techniques for global single instance segment-based indexing for backup data
US9268573B2 (en) * 2012-11-02 2016-02-23 Michael Rolle Methods for decoding and dispatching program instructions
US9495542B2 (en) * 2013-02-28 2016-11-15 Trustees Of Boston University Software inspection system
TWI522102B (zh) * 2013-04-30 2016-02-21 長庚醫療財團法人 組合物於製備治療或預防性治療痤瘡的藥物之用途
US10795681B2 (en) * 2014-12-23 2020-10-06 Intel Corporation Instruction length decoding
US11836035B2 (en) 2021-08-06 2023-12-05 Western Digital Technologies, Inc. Data storage device with data verification circuitry

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5448746A (en) * 1990-05-04 1995-09-05 International Business Machines Corporation System for comounding instructions in a byte stream prior to fetching and identifying the instructions for execution
US6192465B1 (en) * 1998-09-21 2001-02-20 Advanced Micro Devices, Inc. Using multiple decoders and a reorder queue to decode instructions out of order
US6253309B1 (en) * 1998-09-21 2001-06-26 Advanced Micro Devices, Inc. Forcing regularity into a CISC instruction set by padding instructions

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5193180A (en) * 1991-06-21 1993-03-09 Pure Software Inc. System for modifying relocatable object code files to monitor accesses to dynamically allocated memory
US6460116B1 (en) * 1998-09-21 2002-10-01 Advanced Micro Devices, Inc. Using separate caches for variable and generated fixed-length instructions
US6247097B1 (en) * 1999-01-22 2001-06-12 International Business Machines Corporation Aligned instruction cache handling of instruction fetches across multiple predicted branch instructions
DE602005007216D1 (de) 2004-05-27 2008-07-10 Nxp Bv Mikroprozessor und verfahren zur anweisungsausrichtung
US7376815B2 (en) * 2005-02-25 2008-05-20 Qualcomm Incorporated Methods and apparatus to insure correct predecode

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5448746A (en) * 1990-05-04 1995-09-05 International Business Machines Corporation System for comounding instructions in a byte stream prior to fetching and identifying the instructions for execution
US6192465B1 (en) * 1998-09-21 2001-02-20 Advanced Micro Devices, Inc. Using multiple decoders and a reorder queue to decode instructions out of order
US6253309B1 (en) * 1998-09-21 2001-06-26 Advanced Micro Devices, Inc. Forcing regularity into a CISC instruction set by padding instructions

Also Published As

Publication number Publication date
RU2007135359A (ru) 2009-03-27
US20060195830A1 (en) 2006-08-31
CA2598704A1 (en) 2006-08-31
JP2008535043A (ja) 2008-08-28
EP1866745B1 (en) 2014-07-23
US7376815B2 (en) 2008-05-20
RU2405188C2 (ru) 2010-11-27
EP1866745A1 (en) 2007-12-19
IL185427A0 (en) 2008-01-06
JP5221153B2 (ja) 2013-06-26
CN101160560A (zh) 2008-04-09
KR101019393B1 (ko) 2011-03-07
KR20070106789A (ko) 2007-11-05
WO2006091857A1 (en) 2006-08-31
JP2011238251A (ja) 2011-11-24

Similar Documents

Publication Publication Date Title
CN101160560B (zh) 确保正确预解码的方法和设备
CN104317788B (zh) Android多国语言翻译方法和装置
CN101946286B (zh) 用于模拟每单元单个位的nand闪存的每单元多个位的nand闪存的控制器
KR101182903B1 (ko) 명령 캐시 라인을 넘어가는 명령들을 위한 프리디코딩 교정 캐시
CN112036162B (zh) 文本纠错的适配方法、装置、电子设备及存储介质
CN101162449B (zh) Nand flash控制器及其与nand flash芯片的数据交互方法
CN101344840B (zh) 一种微处理器及在微处理器中执行指令的方法
MX2008014048A (es) Predescodificacion de instrucciones de longitud variable.
US7747942B2 (en) System and method for obtaining a markup language template through reversing engineering
CN103748550B (zh) 用于存储熵编码指令序列及将其翻译成可执行形式的方法和设备
JP2008535043A5 (zh)
CN111030702A (zh) 一种文本压缩方法
CN116757184B (zh) 融合发音特征的越南语语音识别文本纠错方法及系统
CN1194302C (zh) 扩展指令字折叠设备
JP2008052740A (ja) マーク付けされたデータ・ブロックを伴う文書に対するスペル・チェックの方法および信号搬送媒体
CN110941450B (zh) 一种risc处理器的指令发射处理电路
CN104049947A (zh) 基于动态重命名的矢量寄存器堆的寄存器重新配置
US7523294B2 (en) Maintaining original per-block number of instructions by inserting NOPs among compressed instructions in compressed block of length compressed by predetermined ratio
CN102270223B (zh) 消息解码库的生成方法、装置及消息解码方法、装置
CN101854231A (zh) 基于协议模型的协议编解码方法
CN117389886A (zh) 一种项目评审软件缺陷预测方法及系统
CN115480871B (zh) 一种通用的tms320c3x处理器指令集虚拟化仿真方法
CN1152301C (zh) 对指令缓冲器进行装入的方法和设备及处理器
CN114462045A (zh) 一种智能合约漏洞检测方法
Calder et al. Huddler: a multi-language compiler for automatically generated format-specific data drivers

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
CF01 Termination of patent right due to non-payment of annual fee
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20120328

Termination date: 20210224