使用3字节转义操作码的指令集扩展的制作方法

文档序号:6418310阅读:209来源:国知局
专利名称:使用3字节转义操作码的指令集扩展的制作方法
技术领域
本发明涉及微处理器系统。具体地说,本发明涉及在操作码(opcode)字段中使用3字节转义操作码(escape opcode)的指令集扩展。
背景技术
微处理器技术近年来一直在以很快的速度发展。计算机体系结构和半导体技术中的进展已经为设计新的处理器创造了很多机会。对设计新处理器来说一般有两种选择(1)定义全新的体系结构,和(2)扩展现有的体系结构以包含新的特征。每种选择都有其优缺点。然而,当一种处理器已经占有了很大的市场份额时,选项(2)就提供了更具吸引力的优点。扩展现有体系结构的主要优点在于与现有和早先的模型之间的兼容性。缺点则包括与摆脱早先设计所造成的限制相关的问题。
新处理器在硬件和软件上都涉及多个新特征。基于现有设计的新处理器一般具有附加的指令集以利用新的硬件设计。然而,由于指令编码中的限制,通过增加新指令集来扩展一个指令集是一个很有挑战性的问题。因此,技术上需要提供一种有效的方法来扩展指令集而不会增加硬件复杂度。

发明内容
本发明的目的在于解决上述问题。
根据本发明的第一方面,本发明提供了一种方法有关指令集处理的方法,包括如下步骤确定可变长度指令集的指令代码是否包括转义操作码值;以及如果所述指令代码包括所述转义操作码值,则在不评估该指令代码中的指令相关的操作码的情况下确定所述指令代码的长度。
根据本发明的第二方面,本发明提供了一种有关指令集处理的装置,包括转义检测器,用于确定指令代码是否包括转义操作码值,还包括指令长度译码器,用于确定所述指令代码的长度,其中,如果所述指令代码包括所述转义操作码值,则所述指令长度译码器在不评估指令相关的操作码的情况下确定所述指令代码的长度。
根据本发明的第三方面,本发明提供了一种有关指令集处理的系统,包括存储器,用于存储具有指令相关的操作码并具有转义操作码的指令代码,所述转义操作码包括相邻接的第一字节和第二字节,所述指令相关的操作码与所述转义操作码相邻接;取得逻辑,用于从所述存储器取得所述指令代码;以及译码器单元,用于响应于所取得的指令代码,生成一个或多个控制信号。
根据本发明的第四方面,本发明提供了一种有关指令集处理的方法,包括从存储器取得具有可变长度指令格式的指令代码,所述指令格式包括转义字段,所述转义字段具有多个字节元素,包括第一字节元素和第二字节元素,所述指令格式还包括寻址形式字段和指令相关的操作码字段,所述指令相关的操作码字段在所述转义字段和所述寻址形式字段之间;以及响应于所述指令相关的操作码字段中的值而启动操作。
根据本发明的第五方面,本发明提供了一种有关指令集处理的装置,包括译码器,用于响应于具有可变长度指令格式的指令代码而生成控制信号,所述指令格式包括转义字段,所述转义字段具有多个字节元素,至少包括第一字节元素和第二字节元素,所述指令格式还包括寻址形式字段和指令相关的操作码字段,所述指令相关的操作码字段在所述转义字段和所述寻址形式字段之间;以及执行单元,用于响应于所述控制信号而执行操作。
根据本发明的第六方面,本发明提供了一种有关指令集处理的装置,包括用于从存储器取得具有可变长度指令格式的指令代码的装置,所述指令格式包括转义字段,所述转义字段具有多个字节元素,包括第一字节元素和第二字节元素,所述指令格式还包括寻址形式字段和指令相关的操作码字段,所述指令相关的操作码字段在所述转义字段和所述寻址形式字段之间;以及用于响应于所述指令相关的操作码中的值而启动操作的装置。
根据本发明的第六方面,本发明提供了一种有关指令集处理的方法,包括生成指令代码以包括转义代码值和指令相关的操作码值;所述转义代码值长至少2字节,并且标识一个扩展操作码图,其中所述指令代码表示将由执行单元响应于所述指令代码而执行的操作。
本发明提供了一种使用3字节转义操作码以及现有的前缀值来对新指令集进行译码的有效机制。所述新指令集在现有指令集的基础上进行了扩展,但并没有将指令译码器过分地复杂化。


从下面的描述中本发明的特征和优点将变得很清楚,其中图1是一个框图,示出了可利用所公开技术的处理系统的至少一个实施例;图2是一个框图,示出了指令格式的至少一个实施例;图3是一个框图,示出了用于译码指令的逻辑的至少一个实施例;图4示出了对新的类型1指令进行译码的电路的至少一个实施例;图5示出了根据本发明至少一个实施例的前缀与转义检测器、译码器使能电路和操作码译码器;图6是一个流程图,示出了根据本发明至少一个实施例,使用前缀来执行指令译码的过程;并且图7是一个流程图,示出了用于对指令长度进行译码的方法的至少一个实施例。
具体实施例方式
在此公开了用于使用3字节转义操作码来扩展指令集的方法、装置和系统。所公开的实施例还提供了一种方法,用于通过使用前缀来修饰包含3字节转义操作码的指令,从而扩展使用3字节转义操作码的指令集。所公开的方法使用一组现有的指令字段来定义一组新的指令,并提供了对该新的指令集进行译码的有效机制。
在此所使用的术语“3字节转义操作码”指一种2字节值,该值向译码器逻辑表明,用于所感兴趣的指令的操作码包括3个字节所述3字节转义操作码中的所述2个字节,再加上1字节的指令相关的操作码。对于至少一个实施例,3字节转义操作码字段中的2字节值是下述值之一0x0F38、0x0F39、0x0F3A或0x0F3B。
在下面的描述中,为了进行说明,提供了大量的具体细节,例如处理器类型、指令格式、逻辑门类型、转义操作码值,以提供对本发明的透彻的理解。然而,对本领域内的技术人员来说这些具体细节对实施本发明来说并不是必需的。在其它情形下,一些公知的电气结构和电路以框图的形式示出以免模糊本发明。在下面的描述中,符号0x表示所跟的数字具有16进制的格式。
图1示出了可利用所公开的技术的处理器系统100的至少一个实施例。系统100例如可用来译码并执行新的类型0指令和新的类型1指令。为了公开的需要,处理系统包括具有处理器110的任何系统,处理器110例如是数字信号处理器(DSP)、微控制器、专用集成电路或微处理器。处理器110可具有任何类型的体系结构,例如复杂指令集计算机(CISC)、精简指令集计算机(RISC)、超长指令字(VLIW)、多线程或混杂式体系结构。系统100可表示基于Itanium和ItaniumII微处理器以及Pentium、PentiumPro、PentiumII、PentiumIII、Pentium4微处理器的处理系统,上述处理器都可从英特尔公司获得。也可使用其它系统(包括具有其它微处理器的个人计算机(PC)、工程工作站、个人数字助理和其它手持设备、机顶盒等等)。在一个实施例中,系统100可能正在运行可从微软公司获得的WindowsTM操作系统的一个版本,尽管例如也可使用其它操作系统和图形用户界面。
图1示出了处理器110包括译码单元116、一组寄存器114、至少一个执行单元112和至少一条内部总线111,以用于执行指令。当然,处理器110还包含其它电路,这些电路对理解本发明来说不是必需的。译码单元116、寄存器114和执行单元112通过一条或多条内部总线111而耦合在一起。译码单元116用来将处理器110接收的指令译码成控制信号和/或微代码(microcode)入口点。所述指令可以是由指令缓冲区(例如图3中的310)发射到译码单元116的。响应于这些控制信号和/或微代码入口点,执行单元112执行适当的操作。译码单元116可以使用任意数量的不同机制(例如查找表、硬件实现、可编程逻辑阵列(PLA)等等)来实现。
译码单元116被示出为能够对遵循由扩展指令集118所定义的格式的指令进行译码。指令集118包括现有指令集118a和新指令集118b。指令集118包括用于对标量数据和组合型数据进行操作的指令。这些操作的数字格式可以是任何方便的格式,包括单精度、双精度和扩展浮点数、有符号和无符号整数、以及非数字数据。对于至少一个实施例,指令集118中定义的指令可在长度上彼此不同。
遵循由指令集118提出的格式的指令106可存储在存储器系统102中。存储器系统102可以是存储器或存储器层次结构的一般表示,并可包括多种存储器形式,例如硬盘驱动器、CD-ROM、随机访问存储器(RAM)、动态随机访问存储器(DRAM)、静态随机访问存储器(SRAM)、闪存以及相关电路。除指令106之外,存储器系统102还可存储用可被处理器110执行的数据信号来表示的数据。
指令格式图2示出了根据本发明一个实施例的指令格式200。指令格式200包括前缀字段210、操作码字段220和操作数说明符字段(例如modR/M、缩放基址变址(scale-index-base,SIB)、偏移量、立即数等等)。操作数说明符是可选的,包括modR/M字段230、SIB字段240、偏移量字段250和立即数字段260。
modR/M字段230的内容表示寻址形式。modR/M字段可指定寄存器和寻址模式。
modR/M字段230中的信息的某些编码可表示在SIB(缩放/变址/基址)字段240中给出第二字节的寻址信息,以充分地指定指令代码的寻址形式。例如,基址加变址寻址形式和缩放加变址寻址形式中的每一个寻址形式都可在SIB字段240中包括例如缩放因子、用于变址的寄存器号和/或基址寄存器的寄存器号等信息。
本领域内的技术人员将会认识到,图2所示的格式200是说明性的,所公开的实施例可在指令代码内使用其它数据组织形式。例如,字段210、220、230、240、250、260不需要以示出的顺序来组织,而是相互之间可重新组织到其它位置,而且不需要是邻接的。而且,在此讨论的字段长度不应理解成限制性的。讨论中具有特定数量的字节的字段在其它实施例中可实现为更大或更小的字段。而且,术语“字节”尽管在此使用时指的是8位组,但在其它实施例中可实现为任意大小的组,包括4位、16位和32位。
在此所使用的指令(例如图1所示的指令106之一)在图2所示的指令格式200的字段中包括特定的值。这种指令有时称为“实际指令”。实际指令的位值(bit value)在此有时统称为“指令代码”。
指令集118(图1)中指定了实际指令的可接受的字节值。指令格式200的每一个字段的可接受的字节值是译码逻辑(例如指令长度译码器306(图3)和译码单元116(图1))所能识别并对之进行操作以生成译码指令代码的那些值。对于每个指令代码,对应的译码指令代码唯一地表示将由执行单元112(图1)响应于所述指令代码而执行的操作。译码指令代码可包括一个或多个微操作。
图2所示的前缀字段210可包括多个前缀。在一个实施例中,前缀字段210包括多达4个前缀,每个前缀是一个字节。前缀字段210是可选的。对于在此讨论的扩展后的新指令集,前缀字段用来扩展所述3字节转义操作码指令空间。
操作码字段220的内容指定了操作。对于至少一个实施例来说,如上所述,在此所讨论的新指令集118b的操作码字段长3个字节。对于至少一个实施例,用于扩展后的新指令集118的操作码字段220因此可包括1、2或3字节的信息。对于在此所讨论的扩展后的新指令集中的一些指令(类型0指令),操作码字段220的2字节字段118c中的3字节转义操作码值与操作码字段220的第三字节225的内容相结合,以指定操作。这一第三字节225在此称为指令相关的操作码。对于在此所讨论的扩展后的新指令集中的其它新指令(类型1指令),操作码字段220的2字节字段118c中的3字节转义操作码值与前缀字段210的内容和操作码字段220的指令相关的操作码字段225的内容相结合,以指定操作。
一般地,前缀字段210和操作码字段220的结合创建了多种不同类型的指令。为了进行说明,图2仅示出了7类指令常规1字节指令212、带有前缀作为修饰符的常规指令214、常规转义指令216、第一扩展指令类型222、第二扩展指令类型224、第一新指令类型226和第二新指令类型228。如本领域内的技术人员所公知的,可类似地定义其它类型的指令。
常规1字节指令212包括下述常规指令,其在操作码字段220中具有1字节的指令相关的操作码。带有前缀作为修饰符的常规指令214包括使用前缀作为对操作码的修饰符的常规指令。例如,串指令可使用REPEAT(重复)前缀值来将串指令重复计数寄存器中所指定的次数,或者直到某个条件被满足。指令214中所使用的前缀值不会对操作码字段220中后跟的操作码值增加全新的意义。相反地,前缀值只是用作为修饰符,以用附加条件来修饰操作码。如下面将说明地,指令214中对前缀的使用与在第二扩展指令类型224和第二新指令类型228中对前缀的使用截然不同。
常规转义指令216是这样一种常规指令,其利用操作码字段220中的第一字段215中的转义操作码来向译码器硬件表明,操作码字段220的第二字段217中的指令相关的操作码是用于定义该指令的。例如,在一个实施例中,操作码字段220的第一字节215中的浮点协处理器转义操作码值0xD8到0xDF表示操作码字段220的第二字节217中后跟的操作码值应被解释为协处理器指令,因此应被引导到协处理器硬件处执行。
第一扩展指令类型222是特定类型的转义指令,该类指令被定义为在操作码字段220的第一字段221中包含预定义的转义操作码值0x0F。转义操作码0x0F向译码器硬件表明,操作码字段220的第二字段223中的指令相关的操作码值是用来定义该指令的。第一扩展指令类型222的指令根据第二操作码字节的值(以及在某些情形下还根据modR/M字段230中3个位的值)可具有不同的长度。例如,扩展指令类型222的2个指令(组合型逻辑左移)可分别包括下述指令字段值PSLLW(寄存器中的移位值)0F:F1:1b”11xxxyyy”,其中xxx定义第一寄存器而yyy定义第二寄存器PSLLW(按立即数移位)0F:71:1b”11110xxx”立即数数据(8位),其中xxx定义一个寄存器在所提出的每一个PSSLW指令中,操作码字段220的第一个字都包括转义值0x0F。第一指令长3字节,但是第二指令是4字节,因为它包括1字节的立即数数据。相应地,对于扩展指令类型222,译码器硬件(例如图3中的指令长度译码器306)利用了操作码字段220的第一字段221中的转义操作码值0x0F以及2字节操作码字段220的第二字节223中的值和modR/M字段230的值,以对指令长度进行译码。
第一新指令类型226(也称为“新指令类型0”)是作为将添加到现有常规指令集118a(图1)中的新指令集118b(图1)的一部分的新指令类型。新指令集118b的指令格式包括3字节转义操作码字段118c和指令相关的操作码字段225。对于至少一个实施例,3字节转义操作码字段118c长2字节。新指令类型0使用四种称为3字节转义操作码的专用转义操作码中之一。3字节转义操作码长2字节,并它们向译码器硬件表明,所述指令利用了操作码字段220中的第三字节来定义该指令。3字节转义操作码字段118c可位于指令操作码中的任何位置,而不必位于指令内最高端或最低端字段。
对于至少一个实施例,所述四种新的3字节转义操作码值定义为0x0F3y,其中y是0x8、0x9、0xA或0xB。对于指令226,操作码字段220的指令相关的操作码字段225中的值应被译码为新的指令。
指令前缀和转义操作码的示例第二扩展指令类型224和第二新指令类型228(在此有时称为“新指令类型1”)都使用前缀字段210中的值作为操作码的一部分。与其中的前缀只修饰后跟的操作码的带有前缀修饰符的常规指令214不同,第二扩展指令类型224和新指令类型1228都使用前缀来定义全新的指令。
指令前缀本来是被开发来增强一组指令的。例如,重复前缀被开发用来重复串指令。重复前缀代码是0xF3(REP、REPE)和0xF2(REPNE)。为此而使用的前缀没有为后跟的操作码定义新的含义。它只是为该操作码定义了附加的操作条件。
转义操作码提供了指令集的扩展。例如,转义操作码0xD8到0xDF用来表示第二操作码字节217包含一个值,该值定义了用于浮点单元的指令。译码器将该操作码传递给浮点译码器。
对于在此讨论的扩展指令集的至少一个实施例,所述3字节转义操作码是一个具有值0x0F3y的2字节实体,,其中y是0x8、0x9、0xA或0xB。在3字节转义操作码字段118c中的3字节转义操作码值向译码器表明,在操作码字段220的第三字节225中的指令相关的操作码值表示新指令集中的指令。
与上述结合第一扩展指令类型222而讨论的2字节转义操作码相比,3字节转义操作码字段118c中的值向译码器表明了用来确定所定义的类型0指令的长度的方法。即,用于3字节转义操作码的每一个值都和一个特定的方法相关联,该方法用来在对应于特定3字节转义操作码的图中确定每个指令的指令长度。例如,3字节转义操作码字段118c中的值0x0F38与一个关联操作码图相关联。0x0F38操作码图中的每个指令的长度都可使用与用来确定0x0F38操作码图中其它指令的长度的方法相同的方法来计算。
类似地,与其余3字节转义操作码值(0x0F39、0x0F3A、0x0F3B)相关联的各操作码图的每个指令的长度都可使用与用来确定所述各操作码图中其它指令的长度的逻辑相同的长度确定逻辑来计算。
对于用来确定所述多个新操作码图中之一中的每个指令的指令长度的长度确定逻辑来说,由于评估了相同的输入项集合来确定该操作码图中每个指令的长度,所述长度确定逻辑就被简化了。这种长度确定逻辑在此称为“固定输入”逻辑或方法。即,每个被评估来确定图中一个指令的长度的输入项都还与确定该图中所有其它指令的长度相关。所述将被评估的固定项集合可由于不同的操作码图而不同。尽管在不同操作码图之间将被评估的输入项集合可能不同,但是在一个给定的3字节操作码图中,对所有指令来说,将被评估来确定指令长度的输入项是相同的。
前缀与转义操作码的结合大大扩大了处理器的操作码表,从而可实现其它新的指令集。在由转义操作码创建的指令集之外,这一结合使用现有的前缀代码来定义新的指令集。通过使用现有的前缀代码,用于现有指令集的译码电路基本上可不用修改,就可支持对新指令118b(图1)的译码。
新指令的全部或其中一些的(操作码字段220的第三字节225中的)指令相关的操作码值可与现有指令的操作码相同。通过使用与前缀和转义操作码相同的操作码来定义新的指令集,与对新指令集使用全新的操作码集相比,译码电路可较为简单。
在一个实施例中,前缀值0x66用来定义新指令。类似地也可使用其它前缀。而且,仍可使用前缀来用于其传统的功能,即在某些操作条件下改进操作码或修饰操作码。
下面的表1提供了新指令集的若干示例,其使用了前缀和3字节转义操作码。
表1



表2


在上述示例中,具有前缀0x66的指令与利用一个或多个扩展大小寄存器(例如128位寄存器大小)的指令相关,而没有前缀0x66的指令与利用一个或多个较小的寄存器(例如64位寄存器大小)的指令相关。较小的寄存器在此称为“常规长度”寄存器。如本领域内的技术人员所公知的,用于前缀的准确代码是与实现相关的,上述前缀值0x66只是用于说明。
使用3字节转义操作码的指令译码图3示出了用于对可变长度指令进行译码的逻辑300。译码逻辑300可包括指令长度译码器306、指令轮转器(rotator)308、指令缓冲区3 10、前缀与转义检测器320、译码器使能电路330以及操作码译码器340。前缀与转义检测器320、译码器使能电路330和操作码译码器340形成了图1所示的译码单元116的所有部分。尽管示出为单个实体,但是前缀与转义代码检测器320可被实现为分离的转义检测器模块和前缀检测器模块。
指令长度译码器306确定已从外部存储器(例如图2的存储器102)取得的实际指令的长度。为了进行说明,假设指令代码包括多至5个字节第一字节对应于IN到IN+7,第二字节对应于IK到IK+7,第三字节对应于IL到IL+7,第四字节对应于IM到IM+7,而第五字节对应于IP到IP+7,其中IN到IN+7、IK到IK+7、IL到IL+7、IM到IM+7和IP到IP+7指的是指令代码的比特位置。然而,在实践中,实际指令在其指令代码中可包括多于5个字节。类似地,实际的指令在其指令代码中可包括少于5个字节。
对于至少一个实施例,指令代码所示出的5个字节是邻接的,使得K=N+8,L=K+8,L=N+16,M=L+8,M=K+16,M=K+24等等。然而,如上结合图2所讨论的,图2所示的格式200的字段不需要占据所示出的位置。相应地,在此所讨论的指令代码的5个示例性字节可以具有任意的顺序而不必是邻接的。
本领域内的技术人员将会认识到,指令长度译码器306的逻辑在支持可变长度指令的系统中可实现相当复杂的长度译码方法。这在需要不同方法的系统中尤其如此,所述不同方法评估不同的输入项以为同一操作码图中的多个指令确定指令长度。如下所述,本发明的实施例通过由单个固定输入长度确定逻辑来确定操作码图中的每个指令的长度,可提供简化的长度译码处理。
轮转器308轮转原始指令字节,以使得第一个被译码的字节处于其初始位置。轮转器308由此来识别将被译码的指令字节的开始位置。应该注意,虽然轮转器308可识别指令的第一个字节例如前缀字节,但是第一个字节不一定需要被识别。对于至少一个实施例,轮转器308例如识别操作码的最低有效位字节,并将它轮转到指令的初始位置。对于至少一个实施例,轮转器308识别操作码的最高有效位字节并将它轮转到指令的初始位置。
指令缓冲区310接收并存储已从外部存储器取得的指令。对于至少一个实施例,所述指令在被指令缓冲区310接收之前已经被长度译码和轮转。对于至少一个实施例,指令缓冲区310实现为指令缓存。
前缀与转义检测器320接收指令位IN到IN+7、IK到IK+7、IL到IL+7,并检测用作为新指令集的一部分的一组预定前缀和/或转义操作码的存在。所可选择所述前缀的值,以使得它与用于常规指令集的前缀相同。译码器使能电路330利用前缀与转义检测器320的结果来生成到各操作码译码器的使能或选择信号。操作码译码器340接收IN到IN+7、IK到IK+7、IL到IL+7、IM到IM+7和IP到IP+7,并将各指令代码翻译成所希望的操作的译码指令代码。
图4是一个框图,示出了用于对新类型0指令进行译码的译码器电路440的至少一个实施例。译码器电路440可实现为前缀和转义检测器例如图3所示的前缀与转义检测器320的一部分。为了在图4中进行讨论,假设轮转器(图3的308)已指示出指令操作码的第一字节。
图4示出的译码器440包括与门450,与门450确定指令的第一字节即IN到IN+7是否与2字节转义操作码值0x0F相匹配。如果指令位IN到IN+7表示2字节转义操作码0x0F,则断言(assert)信号ESC2。
译码器440还包括与门402、404、406、408。与门402将指令位IK到IK+7与3字节转义操作码0x38相匹配,并生成信号ES38。如果指令位IK到IK+7表示3字节转义操作码0x38,则断言信号ES38。
如果指令位IN到IN+7表示2字节转义操作码0x0F并且指令位IK到IK+7表示3字节转义操作码0x38,则该指令是新类型0指令226。如果同时断言了ESC2和ES38,则与门403输出为真,启用逻辑412。为了对指令相关的操作码字段225(图2)中的值进行译码,逻辑412选择用于具有3字节转义操作码0x38的指令的3字节操作码图。
与门404将指令位IK到IK+7与3字节转义操作码0x39相匹配,并生成信号ES39。如果指令位IK到IK+7表示3字节转义操作码0x39,则断言信号ES39。如果指令位IN到IN+7表示2字节转义操作码0x0F并且指令位IK到IK+7表示3字节转义操作码0x39,则该指令是新类型0指令226。如果同时断言了ESC2和ES39,则与门405输出为真,启用逻辑414。为了对指令相关的操作码字段225(图2)中的值进行译码,逻辑414选择用于具有3字节转义操作码0x39的指令的3字节操作码图。
与门406将指令位IK到IK+7与3字节转义操作码0x3A相匹配,并生成信号ES3A。如果指令位IK到IK+7表示3字节转义操作码0x3A,则断言信号ES3A。如果指令位IN到IN+7表示2字节转义操作码0x0F并且指令位IK到IK+7表示3字节转义操作码0x3A,则该指令是新类型0指令226。如果同时断言了ESC2和ES3A,则与门407输出为真,启用逻辑416。为了对指令相关的操作码字段225(图2)中的值进行译码,逻辑416选择用于具有3字节转义操作码0x3A的指令的3字节操作码图。
与门408将指令位IK到IK+7与3字节转义操作码0x3B相匹配,并生成信号ES3B。如果指令位IK到IK+7表示3字节转义操作码0x3B,则断言信号ES3B。如果指令位IN到IN+7表示2字节转义操作码0x0F并且指令位IK到IK+7表示3字节转义操作码0x3B,则该指令是新类型0指令226。如果同时断言了ESC2和ES3B,则与门409输出为真,启用逻辑418。为了对指令相关的操作码字段225(图2)中的值进行译码,逻辑418选择用于具有3字节转义操作码0x3B的指令的3字节操作码图。
图5示出了译码器例如图3所示的操作码译码器340的进一步细节,还示出了前缀与转义检测器320和译码器使能电路330的其它细节。
为了进行说明,假设对于一个示例性指令集,存在一个0x66前缀和3种转义操作码常规转义操作码0xD8-0xDF,2字节转义操作码0x0F以及3字节转义操作码0x0F38-0x0F3B。
为了进行说明,还假设轮转器(图3的308)已指示出指令代码的第一字节,该字节可以是前缀。然而,本领域内的技术人员将会认识到在实践中,指令可被轮转到其它字节例如操作码的最低有效位字节,并且图5所示的功能可相应地进行修改。
图5示出了在图3所示的字节之外,指令的其它字节也可被路由到各个特定的译码器530、532、534、536、538、440、542。例如,图5示出了指令字IM到IM+7和IP到IP+7可被路由到用于新指令类型1的译码器542。图5所示的电路的某些特征被故意地排除了以简化该附图并避免模糊所选择的实施例的特征。然而,本领域内的技术人员将会认识到在图5所示的字节之外,指令字的其它字节也可被路由到其它译码器530、532、534、536、538、440。
前缀与转义检测器320包括5个与门510、512、514、516、518和520。一般地,与门510、512和514将指令位IN到IN+7与对应的前缀代码和转义操作码相匹配(match)。
与门510将指令位IN到IN+7与前缀代码0x66相匹配并生成信号PRFX。如果指令位IN到IN+7表示前缀0x66,则断言信号PRFX。
与门512将指令位IN到IN+7与转义操作码0xD8-0xDF相匹配并生成信号ESC1。如果指令位IN到IN+7表示转义操作码0xD8-0xDF,则断言信号ESC1。
与门514将指令位IN到IN+7与2字节转义操作码0x0F相匹配并生成信号ESC2A。如果指令位IN到IN+7表示2字节转义操作码0x0F,则断言信号ESC2A。如果指令位IN到IN+7表示2字节转义操作码0x0F,则该指令可能是扩展类型0指令222或者新类型0指令226。因此,如下所述,附加的与门518评估第三位组IL到IL+7以确定3字节操作码的另一半是否存在。
按照前述方式,前缀与转义检测器320确定指令操作码的第一位组IN到IN+7是否包括前缀值0x66或所述转义操作码值之一。如果第一位组包括该前缀值,则该指令可能是扩展类型1指令224或新类型1指令228。因此,评估第二位组IK到IK+7以确定它是否包含值0x0F。(如果它不包含值0x0F,则该前缀被认定为传统的前缀而不是指令的操作码的一部分。)相应地,与门516将指令位IK到IK+7与2字节转义操作码0x0F相匹配并生成信号ESC2B。如果指令位IK到IK+7表示2字节转义操作码0x0F,则断言信号ESC2B。
另外,与门518评估指令位IK到IK+7以确定3字节操作码的另一半是否出现在所述位中。如果第一位组IN到IN+7包含值0x0F,则这一评估是有用的。与门518将指令位IK到IK+7与3字节转义操作码的另一半相匹配并生成信号ESC3A。如果指令位IK到IK+7包含值0x38、0x39、0x3A或0x3B,则断言信号ESC3A。
按照上述方式,前缀与转义检测器320确定指令操作码的第二位组IK到IK+7是否包括所述转义操作码值之一。如果第二位组IK到IK+7包括3字节操作码值的另一半,则该指令可能是新类型0指令226。然而,如果第二位组IK到IK+7包括值0x0F,则该指令可能是扩展类型1指令224或新指令类型1指令228。因此,评估第三位组IL到IL+7以确定它是否包含所述3字节转义操作码之一的另一半。即评估第三位组IL到IL+7以确定它是否包含值0x38、0x39、0x3A或0x3B。
相应地,图5示出了与门519将位组IK到IK+7与3字节转义操作码的第二字节0x38-0x3B相匹配,并生成信号ESC3B。如果位组IK到IK+7表示3字节转义操作码0x0F38-0x0F3B中的任意之一的第二字节,则断言信号ESC3B。
如本领域内的技术人员所公知的,其它逻辑门也可用来执行指令位IN到IN+7、IK到IK+7和IL到IL+7的匹配或译码。
译码器使能电路330接收信号PRFX、ESC1、ESC2A、ESC2B、ESC3A和ESC3B,以生成到各个译码器的使能信号。译码器使能电路330包括或非门520以及与门522、526、527、528和529。本领域内的技术人员将会认识到各译码器的全部或其中一部分可实现在单个器件例如可编程逻辑阵列中。
当PRFX、ESC1和ESC2A中的所有信号都被无效(negate)时,或非门520断言EN1信号。这一条件对应于指令位IN到IN+7与前缀、浮点转义操作码、2字节转义操作码都不匹配的条件。因此,指令位IN到IN+7对应于1字节常规指令的操作码。
当PRFX信号被断言而ESC2B被无效时,与门522断言EN2信号。EN2信号的断言对应于指令位IN到IN+7与前缀代码相匹配但是指令位IK到IK+7与2字节转义操作码不匹配的条件。因此,这一条件对应于常规指令将前缀用作为修饰符的操作码。
ESC1信号用作为EN3信号。当指令位IN到IN+7与浮点转义操作码相匹配时断言这一信号。因此,这一条件对应于常规指令的浮点操作码。
当ESC2A信号被断言而ESC3B被无效时,与门528断言EN4信号。EN4信号的断言对应于指令位IN到IN+7与2字节转义操作码相匹配并且指令位IL到IL+7与所述3字节转义操作码中任意之一的后半部分不匹配的条件。因此,这一条件对应于扩展指令类型0的操作码。
当PRFX和ESC2B信号被断言而ESC3B被无效时,与门526断言EN5信号。这一条件对应于指令位IN到IN+7与前缀代码相匹配并且指令位IK到IK+7与2字节转义操作码相匹配,但是指令位IL到IL+7与所述3字节转义操作码中任意之一的后半部分不匹配的条件。因此,这一条件对应于扩展指令类型1的操作码。
当ESC2A信号和ESC2B信号都被断言时,与门527断言EN6信号。EN6信号的断言对应于指令位IN到IN+7与2字节转义操作码相匹配,并且指令位IL到IL+7与所述3字节转义操作码中之一的后半部分相匹配的条件。因此,这一条件对应于新指令类型0的操作码。
当PRFX、ESC2B和ESC3B信号被断言时,与门529断言EN7信号。EN7信号的断言对应于指令位IN到IN+7与前缀代码相匹配,指令位IK到IK+7与2字节转义操作码相匹配,并且指令位IL到IL+7与所述3字节转义操作码中之一的后半部分相匹配的条件。因此,这一条件对应于新指令类型1的操作码。
操作码译码器340包括常规1字节译码器530、常规前缀译码器532、常规转义码译码器534、扩展指令类型0译码器536、扩展指令类型1译码器538、新指令类型0译码器440和新指令类型1译码器542。尽管这些译码器530、532、534、536、538、440、542被示出为分离的模块,但是在实践中这些指令的译码可被结合起来。
图6是一个流程图,示出了方法600,用于对具有在一个指令集中定义的格式的指令进行译码,其中该指令集包括使用3字节转义操作码来编码的指令。本领域内的技术人员将会认识到图6所示的处理框602-636不必以示出的顺序来执行。这些处理框602-636可以不同的顺序执行。例如,合法前缀确定602可在2字节转义操作码确定604、610之后执行。或者,图6所示的处理框的全部或一些可与其它处理框并发地执行。
图6所示的方法600始于“开始”,处理前进到方框602。在方框602,方法600确定第一字节即指令位IN到IN+7是否与前缀代码0x66相匹配。如果不匹配,则处理前进到方框604。否则,处理前进到方框610。
在方框610,方法600确定指令的第二字节即指令位IK到IK+7是否与2字节转义操作码值相匹配。对于至少一个实施例,所述2字节转义操作码值是0x0F。如果转义操作码检查510输出为“假”,则处理前进到方框624。在方框624,已经确定第一字节即指令位IN到IN+7与前缀代码0x66相匹配(见方框602)并且第二字节即指令位IK到IK+7不与2字节转义操作码值相匹配(见方框610)。因此,在方框624,将指令的第二字节即指令位IK到IK+7译码为带有前缀修饰符的常规指令的操作码。
如果转义操作码检查610输出为“真”,则处理前进到方框628,确定指令是否是新类型1指令。在方框628,所述方法确定指令的第三字节即指令位IL到IL+7是否与3字节转义操作码值的后半部分相匹配。对于至少一个实施例,所述3字节转义操作码值是0x0F38、0x0F39、0x0F3A和0x0F3B。相应地,在方框628,确定指令的第三字节即指令位IL到IL+7是否与值0x38、0x39、0x3A和0x3B相匹配。如果不匹配,则处理前进到方框632。然而,如果3字节转义操作码检查628输出为真,则处理前进到方框634。在方框634,将指令的第四字节即指令字节IM到IM+7译码为新类型1指令的操作码。处理然后结束。
在处理框632,将指令的第三字节即指令字节IL到IL+7译码为扩展类型1指令的操作码,指令的第一字节中具有值0x66,而指令的第二字节中具有2字节转义操作码值0x0F。处理然后终结。
在方框604,当已在方框602确定指令的第一字节即指令位IN到IN+7不与前缀值0x66相匹配时,处理继续。在方框604,确定指令的第一字节即指令位IN到IN+7是否与2字节转义操作码相匹配。如果不匹配,则处理前进到方框606。然而,如果2字节转义操作码评估605输出为“真”,则处理在方框620处继续,确定指令是否是新类型0指令。
在方框620,所述方法确定指令的第二字节即指令位IK到IK+7是否与3字节转义操作码的后半部分相匹配。对于至少一个实施例,所述3字节转义操作码值是0x0F38、0x0F39、0x0F3A和0x0F3B。相应地,在方框620,确定指令的第二字节即指令位IK到IK+7是否与值0x38、0x39、0x3A和0x3B相匹配。如果不匹配,则处理前进到方框622。然而,如果3字节转义操作码检查628输出为真,则处理前进到方框630。在方框630,将指令的第三字节即指令字节IL到IL+7译码为新类型0指令的操作码。处理然后结束。
如果3字节转义操作码检查620输出为“假”,则处理前进到方框622。在方框622,将指令的第三字节即指令字节IL到IL+7译码为扩展类型0指令的操作码,指令的第一字节中具有前缀值0x66,而指令的第二字节中具有2字节转义操作码值0x0F。
在方框606,当已在方框604确定指令的第一字节即指令位IN到IN+7不与所述2字节转义操作码相匹配时,处理继续。在方框606,方法600确定指令的第一字节是否与另一个转义操作码(例如浮点转义操作码-0xD到0xDF)相匹配。如果不匹配,则处理前进到方框636,将第一字节译码为1字节常规指令。处理然后终结。
然而,如果其它转义操作码评估606输出为“真”,则处理前进到方框626,其中将第二字节译码为其它常规指令(例如浮点指令)的操作码。处理然后终结。
图7示出了一个方法700,用于确定已从存储器获取的指令的长度。对于至少一个实施例,方法700由指令长度译码器(例如图3中的306)执行。
图7示出的处理开始于“开始”并前进到方框702。在方框702,确定当前指令字节是否是前缀字节。在方法700的第一趟中,当前字节是指令的第一字节。如果在方框702确定当前字节包含指令集中定义的前缀值,则在方框712处理该前缀,并获取下一字节以进行处理。
处理然后返回到方框702,确定在方框712获取的新的当前字节是否包含前缀值。按照这种方式,方法700提供了一种方法,用于对包括多个前缀字节的指令的长度进行译码。对于至少一个实施例,如上所述,一个指令可包括多至4个前缀字节。
如果在方框702确定指令的当前字节不包括前缀值,则处理前进到方框704。在方框704,确定指令的当前字节是否包括2字节转义代码值,例如0x0F。如果不包含,则处理前进到方框714,下面将更详细地讨论。
如果在方框704确定指令的当前字节包括所述2字节转义代码值,则该指令可能是新类型0或新类型1指令。因此,在方框705,获得该指令的下一字节,在方框706,确定所新获得的字节是否包含3字节转义代码值之一。如果是,则已确定该指令是新类型0指令或类型1指令。
为了确定所述新类型0或新类型1指令的长度,评估modR/M字段230的内容。因此,在方框707,获取当前指令代码的modR/M字节的内容。在方框708,确定modR/M值是否表示应从当前指令代码获取SIB值。如果是,则获取SIB字段240(图2)的内容的全部或一部分,并且处理前进到方框710。如果否,则处理前进到方框710。重要的是,由于在此所公开的简化的长度译码方法(见方框710),当对新类型0或新类型1指令的长度进行译码时,不必评估标指令相关的操作码字段225(图2)的内容。因此在方框707不获取这一字节并因此而“跳过”该字节。
在方框710,确定新类型1和新类型0指令的长度,以确定指令在何处开始以及在何处结束。为了确定指令的长度,方框710评估指令至少3个字节的内容。当然,本领域内的技术人员将会认识到,可以评估更多或更少的字节来确定新类型1和新类型0指令之外的指令的长度在方框710,评估第一、二、和四指令字节,以确定新类型0指令的长度。另外,如果存在SIB值,则评估第五指令字节的至少一些位。即,对于新类型0指令,如果存在SIB字段的值,则方框710评估3字节转义操作码字段118c(图2)、modR/M字段(图2的230)和SIB字段(图2的240)的3个位。所述长度如下来确定如果(字节1==0x0F)并且(字节2==0x38或0x39或0x3A或0x3B)并且(字节4==modR/M,且没有偏移量也不需要SIB),则指令长度=4否则,如果(字节1==0x0F)并且(字节2==0x38或0x39或0x3A或0x3B)并且(字节4==modR/M,且具有偏移量或需要SIB),则基于modR/M字段(图2的230)和SIB字段(图2的240)中的3个位的值来计算指令长度。
因此,对于新类型0指令,长度译码框710不需要评估第三操作码字节来确定指令长度。而且,对于每个操作码图,对应的长度确定逻辑接收相同的固定输入组来评估各图中每个指令的长度。例如,对于0x0F38操作码图,长度确定逻辑在方框708评估modR/M字节。如果modR/M字节中的值表明在当前指令代码中不存在SIB字节,则对指令长度进行译码710而无需评估SIB字节。
另一方面,如果存在SIB值,则评估SIB字段240(图2)中的一个或多个位,以确定710指令代码的长度。不评估指令相关的操作码字段225(图2)中的值来确定0x0F38操作码图中的指令的长度。除了modR/M和SIB值(如果被指示出)之外,不评估操作码图中的任何指令的任何输入项。因此,评估了输入项的固定集合来确定给定操作码图中的指令的长度,其中每个输入对于确定该操作码图中的每个指令的程度来说都是相关的。
给定一个或多个其它输入项的值,如果一个特定的输入项被用来确定指令代码的长度,则该特定输入项对确定该指令代码的长度来说是“相关”的。例如,SIB值对0x0F38操作码图中的每个指令都是相关的,因为对于该图中的每个指令,根据modR/M的值,将评估SIB值来确定长度。与此相对比,指令相关的操作码225(图2)的值对确定0x0F38操作码图中的任何指令的长度来说都不是相关的,因为无论其它输入项的值是多少它都未被评估来确定长度。类似地,如果其它输入项例如偏移量字段250(图2)的值未在其它相关输入项的值的任何组合下被用来评估指令长度的话,则它们对确定指令长度来说不是相关的。
按照这种方式,用于新类型0的译码逻辑就较为简单。对于至少一个实施例,为确定对于扩展类型0指令应使用哪个长度译码逻辑,评估了一定数量的字节,与这一数量相比,为确定对于新类型0指令将使用哪个长度译码逻辑,并未评估其它字节。对新操作码图中的所有指令都保持了这一简单性,因为使用了相同的方法来确定给定操作码图中的每个指令的长度。
如在此所使用的,操作码图指的是由指令字节中的多个值的特定组合所指定的指令组。例如,由0F:38:1b”xxxxxxxx”和66:0F:38:1b”xxxxxxxx”指定的所有指令被认为是用于0F:38 3字节转义代码值的操作码图的一部分。类似地,0F:39操作码图指的是由0F:39:1b”xxxxxxxx”和66:0F:39:1b”xxxxxxxx”所指定的指令组,0F:3A操作码图指的是由0F:3A:1b”xxxxxxxx”和66:0F:3A:1b”xxxxxxxx”所指定的指令组,而0F:3B操作码图指的是由0F:3B:1b”xxxxxxxx”和66:0F:3B:1b”xxxxxxxx”所指定的指令组,其中1b”xxxxxxxx”是所指定的操作码图的已定义的操作码。
在方框710,评估第二、三和五指令字节来确定新类型1指令的长度。另外,如果存在SIB值,则评估第六指令字节的至少一些位。与用于新类型0指令的处理类似,如果存在用于SIB字段的值,则方框710评估持有下述内容的2个字节3字节转义操作码字段值(118c,图2)、modR/M字段(230,图2)和SIB字段(240,图2)的3个位。如下确定所述长度如果(字节2==0x0F)并且(字节3==0x38或0x39或0x3A或0x3B)并且(字节5==modR/M,且没有偏移量也不需要SIB),则指令长度=4否则,如果(字节1==0x0F)并且(字节2==0x38或0x39或0x3A或0x3B)并且(字节4==modR/M,且具有偏移量或需要SIB),则基于modR/M字段(图2的230)和SIB字段(图2的240)中的3个位的值来计算指令长度。
因此,对于新类型1指令,长度译码框710不需要评估第三操作码字节来确定指令长度。按照这种方式,用于新类型1的译码逻辑就较为简单。对于至少一个实施例,为确定对于扩展类型1指令应使用哪个长度译码逻辑,评估了一定数量的字节,与这一数量相比,为确定对于新类型1指令将使用哪个长度译码逻辑,并未评估其它字节。
如上所述,通过定义操作码图以及它们对应的长度确定逻辑,以使得使用单个固定输入长度确定逻辑来确定各操作码图中的每个指令的长度,因而保持了用于新类型0和新类型1指令的长度译码处理710的简单性。因此,对于特定3字节操作码图中的每个指令的长度的确定,使用了与具有该3字节操作码值的所有其它指令相同的方法。即,所述3字节操作码值——0x0F38、0x0F39、0x0F3A、0x0F3B——中的每一个操作码值都与一个操作码图相关联,其中通过相同的固定输入方法来确定该操作码图中的每一个指令的长度。
例如,对于至少一个实施例,与3字节转义操作码值0x0F38(见上表1)相关联的所有指令都通过评价指令相同的4个字节来确定。这4个字节包括包含所述3字节转义操作码值(0x0F38)的2个字节、持有操作码值(见上表1所示)的1字节操作码字段、以及1字节modR/M字段。取决于modR/M字段中的值,还可能评估SIB字段的另外3个位以确定0x0F38操作码图中的指令的指令长度。0x0F38操作码图中的任何指令中都不包含立即数数据。
类似地,对于至少一个实施例,与3字节转义操作码值0x0F3A(见上表1)相关联的所有指令都由相同的方法来确定。所述方法评估包含所述3字节转义操作码值(0x0F3A)的2个字节、持有操作码值(见上表1所示)的1字节操作码字段、1字节modR/M字段、以及持有立即数数据的1字节字段。取决于modR/M字段中的值,还可能评估SIB字段的另外3个位以确定0x0F3A操作码图中的指令的指令长度。
图7示出了如果在方框706确定指令跟在包含2字节转义操作码值0x0F的字节之后的字节不包含所述3字节转义操作码值中之一,则处理前进到方框722。
方框714、716、718、719、720和方框722、724、726、727及728分别执行类似的处理。如果方框704确定指令不包含2字节转义操作码值0x0F,则执行前一组方框。另一方面,如果在方框706确定尽管前一字节包含2字节转义操作码值0x0F,当前字节也不包含3字节转义操作码,则执行方框722、724、726、727及728。
对于每一种情形,分别在方框714和722确定当前指令是否包含modR/M值。如果是,则处理分别前进到方框718和726,其中获得modR/M值。如果modR/M值表示应该获取SIB值,则分别在方框719和727获取SIB值。分别在方框720和728处利用modR/M值以及来自SIB字段(如果被指示出的话)的一个或多个位来确定指令的长度。处理然后结束。
如果当前指令包括modR/M值,则处理分别前进到方框716和724,其中对指令长度进行译码而不考虑modR/M值。处理然后结束。
如前述讨论所描述的,在此描述的装置和方法的实施例提供了一种使用3字节转义操作码以及现有的前缀值来对新指令集进行译码的有效机制。所述新指令集在现有指令集的基础上进行了扩展,但并没有将指令译码器过分地复杂化。
对于具有可变长度指令集的处理器,前述讨论描述了操作码图的定义,所述操作码图中的每一个指令都可使用固定输入长度确定逻辑来进行长度译码。前述描述是按照用于确定3字节转义操作码图中的指令的长度的单一方法来讨论的。然而,在另一个实施例中,可将1字节转义操作码图定义成使得可将单个固定输入长度确定逻辑应用于对该操作码图中的每一个指令进行译码。对于这些指令,在包含特定值例如0xD6或0xF1的转义字节之后跟随一个指令相关的操作码。这种1字节转义操作码图中的每个指令的长度可使用相同的固定输入长度确定逻辑来译码。
类似地,在另一个实施例中,也可如前述地那样来定义2字节转义操作码图的全部或一部分。在这种实施例中,相同的固定输入长度确定逻辑可应用于对该新的2字节转义操作码图中的每一个指令的长度进行译码。例如,可如下定义2字节转义操作码图内的指令块,以使得单个固定输入长度确定逻辑可用来确定该操作码图中的每一个指令的长度。对于至少一个实施例,所述新转义代码图被定义成使得指令相关的操作码跟在转义代码之后。例如,所述转义代码可以是下述值中任意之一或全部0x0F3C到0x0F3F。
尽管已经示出并描述了本发明的特定实施例,然而对本领域内的技术人员来说很明显可进行多种改变和修改而不会离开本发明更广泛的方面。所附的权利要求将落在本发明的真正范围之内的这些改变和修改包括在其范围之内。
权利要求
1.一种方法,包括确定可变长度指令集的指令代码是否包括转义操作码值;如果所述指令代码包括所述转义操作码值,则在不评估该指令代码中的指令相关的操作码的情况下确定所述指令代码的长度。
2.如权利要求1所述的方法,还包括响应于所述指令相关的操作码字段中的值来执行操作。
3.如权利要求1所述的方法,还包括确定所述指令代码是否包括前缀代码;以及如果所述指令代码包括所述前缀代码并且所述指令代码包括所述转义操作码,则响应于所述指令代码而生成第一译码指令代码。
4.如权利要求3所述的方法,还包括如果所述指令代码不包括所述前缀代码并且所述指令代码包括所述转义操作码,则响应于所述指令代码而生成第二译码指令代码。
5.如权利要求3所述的方法,其中,所述前缀代码是0x66。
6.如权利要求1所述的方法,其中,所述转义操作码值是为指令集而定义的多个转义操作码值中的一个。
7.如权利要求6所述的方法,其中,所述多个转义操作码值包括0x0F38、0x0F39、0x0F3A和0x0F3B。
8.如权利要求3所述的方法,其中,所述第一译码指令代码表明了至少一个扩展长度寄存器。
9.如权利要求4所述的方法,其中,所述第二译码指令代码表明了至少一个常规长度寄存器。
10.一种装置,包括转义检测器,用于确定指令代码是否包括转义操作码值;以及指令长度译码器,用于确定所述指令代码的长度;其中,如果所述指令代码包括所述转义操作码值,则所述指令长度译码器在不评估指令相关的操作码的情况下确定所述指令代码的长度。
11.如权利要求10所述的装置,还包括操作码译码器,用于响应于所述指令相关的操作码字段的内容,生成表示指令的控制信号。
12.如权利要求10所述的装置,还包括前缀检测器,用于确定所述指令代码是否包括前缀代码。
13.如权利要求12所述的装置,还包括操作码译码器,用于如果所述指令代码包括所述前缀代码并且所述指令代码包括所述转义操作码,则响应于所述指令相关的操作码字段的内容而生成第一译码指令代码。
14.如权利要求13所述的装置,其中如果所述指令代码不包括所述前缀代码并且所述指令代码包括所述转义操作码,则所述操作码译码器还响应于所述指令相关的操作码字段的内容而生成第二译码指令代码。
15.如权利要求12所述的装置,其中所述前缀代码是0x66。
16.如权利要求10所述的装置,其中所述转义操作码是为指令集而定义的多个转义操作码值中的一个。
17.如权利要求16所述的装置,其中所述多个转义操作码值包括0x0F38、0x0F39、0x0F3A和0x0F3B。
18.如权利要求13所述的装置,其中所述第一译码指令代码表明了至少一个扩展长度寄存器。
19.如权利要求14所述的装置,其中所述第二译码指令代码表明了至少一个常规长度寄存器。
20.一种系统,包括存储器,用于存储具有指令相关的操作码以及转义操作码的指令代码,所述转义操作码包括相邻接的第一字节和第二字节,所述指令相关的操作码与所述转义操作码相邻接;取得逻辑,用于从所述存储器取得所述指令代码;以及译码器单元,用于响应于所取得的指令代码,生成一个或多个控制信号。
21.如权利要求20所述的系统,其中所述译码器单元还包括用于接收固定输入组的长度确定逻辑;其中,所述固定输入组中的每一个输入都与确定多个指令代码中的每一个指令代码的长度相关;其中,所述多个指令代码中的每一个指令代码都包括所述转义操作码值。
22.如权利要求20所述的系统,还包括转义检测器,用于确定转义代码是否是多个预定的转义代码值中的一个。
23.如权利要求22所述的系统,其中所述多个预定的转义代码值包括0x0F38、0x0F39、0x0F3A和0x0F3B。
24.如权利要求20所述的系统,还包括前缀检测器,用于确定所述第一指令代码是否包括前缀值。
25.如权利要求21所述的系统,其中所述固定输入组包括modR/M字段的内容。
26.如权利要求21所述的系统,其中所述固定输入组包括缩放/变址/基址字段的内容的至少一部分。
27.如权利要求20所述的系统,其中所述译码器单元还包括长度译码器,用于基于所述指令代码的子集来确定所述指令的长度,其中,所述子集不包括所述指令相关的操作码。
28.如权利要求27所述的系统,其中所述子集包括所述转义代码的第一和第二字节,并包括寻址形式值。
29.如权利要求28所述的系统,其中所述子集还包括可选基址字段的内容的至少一部分。
30.如权利要求20所述的系统,其中所述译码器单元还包括操作码译码器,用于响应于所述指令相关的操作码而生成所述一个或多个控制信号,其中,所述指令相关的操作码的内容指定了一项操作。
31.如权利要求20所述的系统,还包括执行逻辑,用于响应于所述控制信号而执行操作。
32.如权利要求20所述的系统,其中所述指令代码还包括前缀值。
33.一种方法,包括从存储器取得具有可变长度指令格式的指令代码,所述指令格式包括转义字段,所述转义字段具有多个字节元素,包括第一字节元素和第二字节元素,所述指令格式还包括寻址形式字段和指令相关的操作码字段,所述指令相关的操作码字段位于所述转义字段和所述寻址形式字段之间;以及响应于所述指令相关的操作码字段中的值而启动操作。
34.如权利要求33所述的方法,其中启动操作还包括至少部分地基于所述指令相关的操作码的值,生成控制信号。
35.如权利要求33所述的方法,其中启动操作还包括启动对组合型数据的操作。
36.如权利要求33所述的方法,还包括确定所述指令代码的长度,这一步骤还包括使得所述长度确定完全取决于所述指令代码中的所述转义字段、所述寻址形式字段和前缀字段的内容。
37.如权利要求33所述的方法,还包括确定所述指令代码的长度,其中,所述长度确定完全取决于所述转义字段和所述寻址形式字段的内容。
38.如权利要求33所述的方法,还包括确定所述指令代码的长度,其中,所述长度确定完全取决于所述转义字段、所述寻址形式字段和所述可选基址字段的内容的一部分的内容。
39.一种装置,包括译码器,用于响应于具有可变长度指令格式的指令代码而生成控制信号,所述指令代码包括转义字段,所述转义字段具有多个字节元素,至少包括第一字节元素和第二字节元素,所述指令代码还包括寻址形式字段和指令相关的操作码字段,所述指令相关的操作码字段位于所述转义字段和所述寻址形式字段之间;以及执行单元,用于响应于所述控制信号而执行操作。
40.如权利要求39所述的装置,其中所述转义字段的内容表示对所述指令代码的长度的限制。
41.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“00”,则所述执行单元对组合型字节进行洗牌。
42.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“01”,则所述执行单元相应地对水平组合型按字计算长度的数执行加法。
43.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“02”,则所述执行单元对水平组合型按双字计算长度的数执行加法。
44.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“03”,则所述执行单元对水平组合型数执行带饱和的加法。
45.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“04”,则所述执行单元还对组合型有符号和无符号数执行乘法和加法。
46.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“05”,则所述执行单元对水平组合型有符号字执行减法。
47.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“06”,则所述执行单元对水平组合型有符号双字执行减法。
48.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“07”,则所述执行单元对水平组合型有符号字执行减法。
49.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“08”,则所述执行单元将确定组合型有符号字节的符号。
50.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“09”,则所述执行单元将确定组合型有符号字的符号。
51.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“0A”,则所述执行单元将确定组合型有符号双字的符号。
52.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“0B”,则所述执行单元将执行带有取整和缩放的组合型高位乘。
53.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“1C”,则所述执行单元将确定组合型字节操作数的绝对值。
54.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“1D”,则所述执行单元将确定组合型字操作数的绝对值。
55.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F38”,并且所述指令相关的操作码字段的内容是十六进制值“1E”,则所述执行单元将确定组合型双字操作数的绝对值。
56.如权利要求39所述的装置,其中如果所述转义字段的内容是十六进制值“0F3A”,并且所述指令相关的操作码字段的内容是十六进制值“0F”,则所述执行单元将对组合型操作数执行右移及合并。
57.一种存储处理器设计的机器可访问介质,所述处理器包括取得逻辑,用于取得可变长度指令集中的指令代码,所述指令代码包括多字节的转义代码值,所述转义代码值与指令相关的操作码值相邻;以及译码单元,用于响应于所取得的指令代码,生成一个或多个控制信号。
58.如权利要求57所述的机器可访问介质,其中所述处理器还包括长度译码器,用于完全基于对所述指令代码中的位的一个子集的评估来确定所述指令代码的长度,其中所述位子集不包括所述指令相关的操作码值。
59.如权利要求57所述的机器可访问介质,其中所述处理器还包括执行逻辑,用于响应于所述控制信号来执行操作。
60.如权利要求59所述的机器可访问介质,其中所述执行逻辑还对组合型数据执行操作。
61.如权利要求59所述的机器可访问介质,其中如果所述指令代码的前缀字段具有预定值,则所述译码单元进一步生成第一控制信号。
62.如权利要求61所述的机器可访问介质,其中所述预定值是0x66。
63.如权利要求61所述的机器可访问介质,其中如果所述指令代码的前缀字段不具有所述预定值,则所述译码单元进一步生成第二控制信号。
64.一种装置,包括用于从存储器取得具有可变长度指令格式的指令代码的装置,所述指令格式包括转义字段,所述转义字段具有多个字节元素,包括第一字节元素和第二字节元素,所述指令格式还包括寻址形式字段和指令相关的操作码字段,所述指令相关的操作码字段位于所述转义字段和所述寻址形式字段之间;以及用于响应于所述指令相关的操作码中的值而启动操作的装置。
65.如权利要求64所述的装置,其中所述用于启动操作的装置还包括用于至少部分地基于所述指令相关的操作码的值而生成控制信号的装置。
66.如权利要求64所述的装置,其中所述用于启动操作的装置还包括用于启动对组合型数据进行操作的装置。
67.如权利要求64所述的装置,其中所述用于启动操作的装置还包括用于启动对组合型数据进行加法运算的装置。
68.如权利要求64所述的装置,其中所述用于启动操作的装置还包括用于启动对组合型数据进行减法运算的装置。
69.如权利要求64所述的装置,其中所述用于启动操作的装置还包括用于启动对组合型数据进行洗牌操作的装置。
70.如权利要求64所述的装置,其中所述用于启动操作的装置还包括用于启动对组合型数据进行乘法运算的装置。
71.如权利要求64所述的装置,其中所述用于启动操作的装置还包括用于启动对组合型数据进行移位操作的装置。
72.如权利要求64所述的装置,其中所述用于启动操作的装置还包括用于启动对组合型数据进行绝对值运算的装置。
73.如权利要求64所述的装置,其中所述用于启动操作的装置还包括用于启动对组合型数据进行符号确定操作的装置。
74.如权利要求64所述的装置,还包括用于确定所述指令代码的长度的装置,其中,所述长度确定完全取决于所述转义字段、所述寻址形式字段和可选前缀字段的内容;其中,所述指令代码还可选地包括前缀字段。
75.如权利要求64所述的装置,还包括用于确定所述指令代码的长度的装置,其中所述长度确定完全取决于所述转义字段和所述寻址形式字段的内容。
76.如权利要求64所述的装置,还包括用于确定所述指令代码的长度的装置,其中所述长度确定完全取决于所述转义字段、所述寻址形式字段和所述可选基址字段的内容的一部分的内容;其中所述指令格式还包括所述可选基址字段。
77.一种方法,包括生成指令代码,其包括转义代码值和指令相关的操作码值;所述转义代码值长至少2字节,并且标识一个扩展操作码图;所述指令代码表示将由执行单元响应于所述指令代码而执行的操作。
78.如权利要求77所述的方法,其中生成指令代码还包括生成还包括前缀值的指令代码。
79.如权利要求78所述的方法,其中所述指令代码表示第二操作。
80.如权利要求77所述的方法,其中生成指令代码还包括从用于可变长度指令集的预定义的转义代码值集合中选择所述转义代码值。
81.如权利要求80所述的方法,其中所述预定义的转义代码值集合包括0x0F38、0x0F39、0x0F3A和0x0F3B。
82.如权利要求80所述的方法,其中所述预定义的转义代码值中的每一个都表示一组特定的指令。
83.如权利要求78所述的方法,其中所述前缀值是0x66。
全文摘要
本发明公开了一种方法、装置和系统,用于对可变长度指令集中的指令进行译码。所述指令是一组新类型的指令中的一个指令,其使用长为2字节的新的转义代码值,以表明第三操作码字节包括用于新指令的指令相关的操作码。所述新指令被定义成使得用于所述新转义操作码值之一的操作码图中的每一个指令的长度都可使用相同的输入组来确定,其中所述输入中的每一个输入都与确定所述新操作码图中的每一个指令的长度相关。对于至少一个实施例,所述新指令之一的长度在无需评估所述指令相关的操作码的情况下得到了确定。
文档编号G06F9/00GK1624653SQ200410062548
公开日2005年6月8日 申请日期2004年6月30日 优先权日2003年6月30日
发明者詹姆斯·S·科克, 彼得·J·鲁希托, 马苏德·塔希尔, 戴维·B·杰克逊, 维斯·A·奈德奥, 斯科特·D·罗杰斯, 布雷特·L·托尔, 弗兰克·比尔斯 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1