将状态标志的子集从控制和状态寄存器拷贝到标志寄存器的制作方法

文档序号:33701322发布日期:2023-03-31 19:18阅读:28来源:国知局
1.本公开总体涉及将状态标志的子集从控制和状态寄存器拷贝到标志寄存器。
背景技术
::2.在一些处理器中,控制和状态寄存器为对于寄存器的至少真子集执行的操作提供控制和/或状态比特。技术实现要素:3.根据本公开的第一实施例,提供了一种装置,包括:解码器设备,用于对单个指令的实例进行解码,所述单个指令包括用于操作码的字段,所述操作码指示出执行设备要从第一寄存器将饱和标志值、溢出值以及进位值拷贝到第二寄存器;以及所述执行设备,用于根据所述单个指令的实例的所述操作码来执行解码的指令。4.根据本公开的第二实施例,提供了一种方法,包括:对单个指令的实例进行解码,所述单个指令包括用于操作码的字段,所述操作码指示出执行电路要从第一寄存器将饱和标志值、溢出值以及进位值拷贝到第二寄存器;以及根据所述操作码来执行解码的指令。5.根据本公开的第三实施例,提供了一种装置,包括:指令转译器,用于将单个指令的实例转译成不同指令集的一个或多个指令,所述单个指令包括用于操作码的字段,所述操作码指示出执行设备要从第一寄存器将饱和标志值、溢出值以及进位值拷贝到第二寄存器;解码设备,用于对所述不同指令集的一个或多个指令进行解码;以及所述执行设备,用于根据所述操作码来执行解码的不同指令集的一个或多个指令以执行从所述第一寄存器将所述饱和标志值、所述溢出值以及所述进位值拷贝到所述第二寄存器。6.根据本公开的第四实施例,提供了一种非暂态机器可读介质,存储单个指令的实例,其中,所述单个指令的实例将根据一种方法被处理,该方法包括:对所述单个指令的实例进行解码,所述单个指令包括用于操作码的字段,所述操作码指示出执行电路要从第一寄存器将饱和标志值、溢出值以及进位值拷贝到第二寄存器;以及根据所述操作码来执行解码的指令。附图说明7.将参考附图描述根据本公开的各种实施例,在附图中:8.图1图示了将整数状态标志从控制和/或状态寄存器拷贝到标志寄存器的指令的执行的示例。9.图2图示了处理诸如dvptestmxcsrflgs指令之类的指令的硬件的示例。10.图3图示了被执行以处理dvptestmxcsrflgs指令的方法的实施例。11.图4图示了示例性系统的实施例。12.图5图示了处理器的实施例的框图,该处理器可以具有多于一个核心,可以具有集成的存储器控制器,并且可以具有集成的图形。13.图6(a)的框图图示了根据一些示例的示例性有序管线和示例性寄存器重命名、无序发出/执行管线两者。14.图6(b)的框图图示了根据一些示例的要被包括在处理器中的有序体系结构核心的示例性实施例和示例性寄存器重命名、无序发出/执行体系结构核心两者。15.图7图示了(一个或多个)执行单元电路的实施例,例如图6(b)的(一个或多个)执行单元电路。16.图8是根据一些示例的寄存器体系结构的框图。17.图9图示了指令格式的实施例。18.图10图示了寻址字段的实施例。19.图11图示了第一前缀的实施例。20.图12(a)-(d)图示了如何使用第一前缀901(a)的r、x和b字段的实施例。21.图13(a)-(b)图示了第二前缀的实施例。22.图14图示了第三前缀的实施例。23.图15的框图对比了根据一些示例的使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令。具体实施方式24.本公开涉及用于将整数状态标志从控制和/或状态寄存器拷贝到标志寄存器的指令的方法、装置、系统和非暂态计算机可读存储介质。25.一些整数指令在执行之后会在控制和/或状态寄存器中设置标志,例如饱和、溢出和下溢标志。例如,许多传感算法功能在执行向量紧缩操作时,会导致饱和、溢出或下溢。在一些情况下,软件希望检查这些标志是否已被设置,然后分支到特定的指令代码序列。不幸的是,需要多个指令来执行饱和操作和检查状态标志。26.本文详细介绍了单个指令及其支持的实施例,用于将饱和、溢出和下溢标志从控制和/或状态寄存器拷贝到标志寄存器。这个指令对于改善至少传感器算法的性能是有用的。27.图1图示了将整数状态标志从控制和/或状态寄存器拷贝到标志寄存器的指令的执行的示例。如图所示,控制和/或状态寄存器101存储控制和状态信息。在这个示例中,控制和/或状态寄存器101不仅存储用于浮点操作的控制和状态信息,还存储整数状态信息。然而,并非所有的实施例都会有用于浮点和整数两者的控制和/或状态信息。在一些示例中,控制和/或状态寄存器101被称为mxcsr。28.在这个示例中,控制和/或状态寄存器(controland/orstatusregister,csr)101包含用于simd浮点异常的标志和掩码比特,用于单指令、多数据(singleinstruction,multipledata,simd)或向量浮点操作的舍入控制字段,提供对于simd或向量浮点操作控制下溢条件的手段的冲洗到零(flush-to-zero)标志,以及控制simd或向量浮点指令如何处置非正规源操作对象的非正规数为零(denormals-are-zeros)标志。29.比特0至5指示出是否检测到了simd浮点异常。它们是“粘滞(sticky)”标志。也就是说,在标志被设置之后,它将保持被设置,直到被明确清除为止。比特7至12为simd浮点异常提供单独的掩码比特。如果相应的掩码比特被设置,则异常类型被掩蔽,而如果该比特被清除,则异常类型被取消掩蔽。这些掩码比特在加电或复位时被设置。这使得所有的simd浮点异常最初都是被掩蔽的。30.比特13和14(舍入控制[rc]字段)控制simd浮点指令的结果如何被舍入。比特15(ftz)启用了冲洗到零模式,它控制对simd浮点下溢条件的掩蔽响应。当下溢异常被掩蔽,并且冲洗到零模式被启用时,处理器在其检测到浮点下溢条件时执行以下操作。[0031]比特6(daz)启用非正规数为零模式,它控制处理器对simd浮点非正规操作对象条件的响应。当非正规数为零标志被设置时,处理器在对非正规源操作对象执行任何计算之前,将其全都转换为零,带有原始操作对象的符号。[0032]比特26存储了对执行整数指令引起的进位的指示。比特27存储了对执行整数指令引起的饱和的指示。比特28存储了对执行整数指令引起的溢出的指示。[0033]标志寄存器105包含一组状态标志、一控制标志和一组系统标志。eflags寄存器的状态标志(比特0、2、4、6、7和11)指示出算术指令(例如add、sub、mul和div指令)的结果。状态标志功能是:cf(比特0)进位标志(如果算术操作生成从结果的最高有效比特的进位或借位则该标志被设置,并且指示出无符号整数算术的溢出条件。它也被用于多精度算术中);pf(比特2)奇偶校验标志(如果结果的最低有效字节包含偶数个1比特,则该标志被设置);af(比特4)辅助进位标志(如果算术操作生成从结果的比特3的进位或借位则该标志被设置,并且其可以被用于二进制编码的十进制(binary-codeddecimal,bcd)算术中);zf(比特6)零标志(如果结果为零则该标志被设置);sf(比特7)符号标志(被设置为等于结果的最高有效比特,也就是有符号整数的符号比特);以及of(比特11)溢出标志(如果整数结果是太大的正数或者太小的负数(不包括符号比特)以至于无法装入到目的地操作对象中,则该标志被设置,并且指示出用于有符号整数(二进制补码)算术的溢出条件)。[0034]一些条件指令,例如jcc(根据条件代码cc来跳转)、setcc(根据条件代码cc来设置字节)、loopcc和cmovcc(条件性移动)使用一个或多个状态标志作为条件代码,并且测试它们以得到分支、设置字节或者结束循环条件。[0035]比特10是方向标志,它控制字符串指令(要么自动递减,要么自动递增)。[0036]在一些示例中,系统标志和iopl字段控制操作系统或者执行操作。系统标志的功能如下:tf(比特8)陷阱标志(被设置以使能单步模式以进行调试;清除以禁用单步模式);if(比特9)中断使能标志(控制处理器对可掩蔽中断请求的响应。被设置以响应可掩蔽中断;被清除以抑制可掩蔽中断);iopl(比特12和13)i/o权限级别字段(指示出当前运行的程序或任务的i/o权限级别);nt(比特14)嵌套任务标志(控制被中断和调用的任务的链条);rf(比特16)恢复标志(控制处理器对调试异常的响应);vm(比特17)虚拟模式标志(被设置以使能虚拟模式);ac(比特18)对齐检查(或者访问控制)标志(如果am比特在控制寄存器中被设置,则当且仅当此标志为1时,用户模式数据访问的对齐检查被使能);vif(比特19)虚拟中断标志(if标志的虚拟镜像);vip(比特20)虚拟中断待处理标志(被设置以指示出有中断待处理;当没有中断待处理时清除);以及id(比特21)识别标志(程序设置或清除此标志的能力指示出对cpuid指令的支持)。[0037]如图所示,将整数状态标志从控制和/或状态寄存器拷贝到标志寄存器的指令(这里用dvptestmxcsrflgs的操作码助记符示出)的执行,使得控制和/或状态寄存器101的溢出标志、饱和标志和进位标志的数据值被使用执行电路103拷贝到标志寄存器105中。注意,如果在标志寄存器105中没有饱和标志,则要设置一些其他标志。在一些示例中,csr[28]-》flags[11],csr[27]-》flags[2],并且csr[26]-》flags[0]。在一些示例中,零标志、辅助进位标志和符号标志也被设置为零。[0038]图2图示了处理诸如dvptestmxcsrflgs指令之类的指令的硬件的示例。如图所示,存储装置203存储要被执行的dvptestmxcsrflgs指令201。[0039]指令201被解码电路205接收。例如,解码电路205从取得(fetch)逻辑/电路接收这个指令。该指令包括用于操作码、第一和第二源以及目的地的字段。在一些示例中,源和目的地是寄存器,而在其他实施例中,它们中的一个或多个是存储器位置。在一些示例中,操作码详细说明了要执行哪个算术操作。[0040]稍后将详述至少一个指令格式的更详细实施例。解码电路205将指令解码成一个或多个操作。在一些示例中,这种解码包括生成要被执行电路(例如,执行电路209)执行的多个微操作。解码电路205也对指令前缀进行解码。[0041]在一些示例中,寄存器重命名、寄存器分配和/或调度电路207提供用于以下各项中的一项或多项的功能:1)将逻辑操作对象值重命名为物理操作对象值(例如,一些示例中的寄存器别名表);2)向解码的指令分配状态比特和标志;以及3)从指令池调度解码的指令来在执行电路上执行(例如,在一些示例中,使用预留站)。[0042]寄存器(寄存器堆)和/或存储器208存储数据作为要被执行电路209进行操作的指令的操作对象。示例性寄存器类型包括控制和/或状态寄存器、标志寄存器、紧缩数据(packeddata)寄存器、通用寄存器、以及浮点寄存器。[0043]执行电路209执行解码的指令。在图1、图6等等中示出了示例性的详细执行电路。解码的指令的执行使得执行电路将状态标志的第一真子集(propersubset)从第一寄存器拷贝到第二寄存器,并且在一些示例中,将第二寄存器中的状态标志的第二真子集归零。在一些示例中,状态标志的第一真子集是饱和标志、溢出标志以及进位标志。在一些示例中,状态标志的第二真子集是零标志、辅助进位标志以及符号标志。第一寄存器是控制和/或状态寄存器,并且第二寄存器是标志寄存器。[0044]在一些示例中,引退/写回电路211在体系结构上将目的地寄存器提交到寄存器或存储器208中,并引退该指令。[0045]图3图示了被执行以处理dvptestmxcsrflgs指令的方法的实施例。例如,如图6(b)所示的处理器核心、如下文详述的管线等等执行此方法的各方面。[0046]在301,取得单个指令的实例。例如,取得dvptestmxcsrflgs指令。dvptestmxcsrflgs指令包括用于操作码的字段。[0047]在一些示例中,所取得的第一指令集的单个指令的实例在302处被转译成第二指令集的一个或多个指令。这种转译可以在硬件、软件或者其组合中完成,这取决于实现方式。[0048]该单个指令的实例,或者第二指令集的一个或多个转译后的指令,在303处被解码。在一些示例中,转译和解码被合并。[0049]在305处,与解码的(一个或多个)指令的操作对象相关联的数据值被取回。例如,控制和/或状态寄存器的数据值被取回。[0050]在307处,解码的(一个或多个)指令被执行电路(硬件)(例如本文详述的执行电417可以包括多种功率管理逻辑单元(电路)来执行基于硬件的功率管理。这种功率管理可以是完全受处理器控制的(例如,由各种处理器硬件控制,并且可以由工作负载和/或功率约束、热约束或其他处理器约束所触发),和/或功率管理可以响应于外部源(例如,平台或功率管理源或系统软件)而被执行。[0060]pcu417被图示为作为与处理器470和/或处理器480分开的逻辑而存在。在其他情况下,pcu417可以在处理器470或480的核心(未示出)中给定的一个或多个核心上执行。在一些情况下,pcu417可以被实现为微控制器(专用的或通用的)或者其他控制逻辑,其被配置为执行其自己的专用功率管理代码(有时称为p代码)。在另外的其他实施例中,pcu417要执行的功率管理操作可以被实现在处理器外部,例如借由单独的功率管理集成电路(powermanagementintegratedcircuit,pmic)或者在处理器外部的另一组件来实现。在另外的其他实施例中,pcu417要执行的功率管理操作可以被实现在bios或其他系统软件内。[0061]各种i/o设备414可以耦合到第一互连416,以及将第一互连416耦合到第二互连420的互连(总线)桥418。在一些示例中,一个或多个额外的处理器415,例如协处理器、高吞吐量mic处理器、gpgpu、加速器(例如,图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列(fpga)、或者任何其他处理器,耦合到第一互连416。在一些示例中,第二互连420可以是低引脚数(lowpincount,lpc)互连。各种设备可以耦合到第二互连420,包括例如键盘和/或鼠标422、通信设备427、和存储单元电路428。存储单元电路428可以是盘驱动器或其他大容量存储设备,在一些示例中,它可以包括指令/代码和数据430。另外,音频i/o424可以耦合到第二互连420。注意,除了上述的点到点体系结构以外其他体系结构也是可能的。例如,诸如多处理器系统400之类的系统可以实现多点分支互连(multi-dropinterconnect)或者其他这种体系结构,而不是点到点体系结构。[0062]示例性核心体系结构、处理器和计算机体系结构[0063]可以按不同的方式、为了不同的目的、在不同的处理器中实现处理器核心。例如,这些核心的实现方式可以包括:1)通用有序核心,旨在用于通用计算目的;2)高性能通用无序核心,旨在用于通用计算目的;3)专用核心,主要旨在用于图形和/或科学(吞吐量)计算目的。不同处理器的实现方式可以包括:1)cpu,包括旨在用于通用计算目的的一个或多个通用有序核心和/或旨在用于通用计算目的的一个或多个通用无序核心;以及2)协处理器,包括主要旨在用于图形和/或科学(吞吐量)目的的一个或多个专用核心。这样的不同处理器导致不同的计算机系统体系结构,这些体系结构可以包括:1)协处理器与cpu在分开的芯片上;2)协处理器与cpu在同一封装件中分开的管芯上;3)协处理器与cpu在同一管芯上(在此情况下,这种协处理器有时被称为专用逻辑,例如集成图形和/或科学(吞吐量)逻辑,或者被称为专用核心);以及4)片上系统,其可以在与所描述的cpu(有时称为(一个或多个)应用核心或者(一个或多个)应用处理器)相同的管芯上包括上述的协处理器以及额外的功能。接下来描述示例性核心体系结构,然后是对示例性处理器和计算机体系结构的描述。[0064]图5图示了处理器500的实施例的框图,该处理器可以具有多于一个核心,可以具有集成的存储器控制器,并且可以具有集成的图形。实线框图示了具有单个核心502a、系统代理510和一组一个或多个互连控制器单元电路516的处理器500,而可选地添加的虚线框将替代性处理器500图示为具有多个核心502(a)-(n)、系统代理单元电路510中的一组一个或多个集成存储器控制器单元电路514和专用逻辑508以及一组一个或多个互连控制器单元电路516。注意,处理器500可以是图4的处理器470或480或者协处理器438或415之一。[0065]因此,处理器500的不同实现方式可以包括:1)cpu,其中专用逻辑508是集成图形和/或科学(吞吐量)逻辑(可以包括一个或多个核心,未示出),核心502(a)-(n)是一个或多个通用核心(例如,通用有序核心、通用无序核心、或这两者的组合);2)协处理器,其中核心502(a)-(n)是主要旨在用于图形和/或科学(吞吐量)目的的大量专用核心;以及3)协处理器,其中核心502(a)-(n)是大量的通用有序核心。因此,处理器500可以是通用处理器、协处理器或者专用处理器,例如,网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元电路)、高吞吐量集成众核(manyintegratedcore,mic)协处理器(包括30个或更多个核心)、嵌入式处理器,等等。处理器可以被实现在一个或多个芯片上。处理器500可以是一个或多个衬底的一部分和/或可以利用若干个工艺技术中的任何一者被实现在一个或多个衬底上,这些技术例如是bicmos、cmos或nmos。[0066]存储器层次体系包括核心502(a)-(n)内的一级或多级缓存单元电路504(a)-(n)、一组一个或多个共享缓存单元电路506、以及耦合到该组集成存储器控制器单元电路514的外部存储器(未示出)。该组一个或多个共享缓存单元电路506可以包括一个或多个中间级别缓存(例如,第2级(l2)、第3级(l3)、第4级(l4)或者其他级别的缓存),比如最后一级缓存(lastlevelcache,llc),和/或这些的组合。虽然在一些示例中基于环的互连网络电路512互连专用逻辑508(例如,集成图形逻辑)、该组共享缓存单元电路506和系统代理单元电路510,但替代性实施例使用任何数目的公知技术来互连这种单元。在一些示例中,在共享缓存单元电路506中的一个或多个电路与核心502(a)-(n)之间维持一致性。[0067]在一些示例中,核心502(a)-(n)中的一个或多个具有多线程能力。系统代理单元电路510包括对核心502(a)-(n)进行协调和操作的那些组件。系统代理单元电路510可以包括例如功率控制单元(powercontrolunit,pcu)电路和/或显示单元电路(未示出)。pcu可以是(或者可以包括)对核心502(a)-(n)和/或专用逻辑508(例如,集成图形逻辑)的功率状态进行调节所需的逻辑和组件。显示单元电路用于驱动一个或多个在外部连接的显示器。[0068]核心502(a)-(n)就体系结构指令集而言可以是同构的或者异构的;也就是说,核心502(a)-(n)中的两个或更多个可能能够执行同一指令集,而其他核心可能能够只执行该指令集的子集或者不同的指令集。[0069]示例性核心体系结构[0070]有序和无序核心框图[0071]图6(a)的框图图示了根据一些示例的示例性有序管线和示例性寄存器重命名、无序发出/执行管线两者。图6(b)的框图图示了根据一些示例的要被包括在处理器中的有序体系结构核心的示例性实施例和示例性寄存器重命名、无序发出/执行体系结构核心两者。图6(a)-图6(b)中的实线框图示了有序管线和有序核心,而可选地添加的虚线框图示了寄存器重命名、无序发出/执行管线和核心。考虑到有序方面是无序方面的子集,将描述无序方面。[0072]在图6(a)中,处理器管线600包括取得阶段602、可选的长度解码阶段604、解码阶段606、可选的分配阶段608、可选的重命名阶段610、调度(也称为调遣或发出)阶段612、可选的寄存器读取/存储器读取阶段614、执行阶段616、写回/存储器写入阶段618、可选的异常处置阶段622、以及可选的提交阶段624。在这些处理器管线阶段中的每一者中可以执行一个或多个操作。例如,在取得阶段602期间,从指令存储器取得一个或多个指令,在解码阶段606期间,可以对取得的一个或多个指令进行解码,可以生成使用转发寄存器端口的地址(例如,加载存储单元(loadstoreunit,lsu)地址),并且可以执行分支转发(例如,立即数偏移或者链接寄存器(linkregister,lr))。在一个实施例中,解码阶段606和寄存器读取/存储器读取阶段614可以被组合到一个管线阶段中。在一个实施例中,在执行阶段616期间,可以执行解码的指令,可以执行到高级微控制器总线(advancedmicrocontrollerbus,ahb)接口的lsu地址/数据管线化,可以执行乘法和加法操作,可以执行具有分支结果的算术操作,等等。[0073]作为示例,示例性寄存器重命名、无序发出/执行核心体系结构可以实现管线600如下:1)指令取得638执行取得和长度解码阶段602和604;2)解码单元电路640执行解码阶段606;3)重命名/分配器单元电路652执行分配阶段608和重命名阶段610;4)(一个或多个)调度器单元电路656执行调度阶段612;5)(一个或多个)物理寄存器堆单元电路658和存储器单元电路670执行寄存器读取/存储器读取阶段614;执行集群660执行执行阶段616;6)存储器单元电路670和(一个或多个)物理寄存器堆单元电路658执行写回/存储器写入阶段618;7)在异常处置阶段622中可涉及各种单元(单元电路);并且8)引退单元电路654和(一个或多个)物理寄存器堆单元电路658执行提交阶段624。[0074]图6(b)示出了处理器核心690包括耦合到执行引擎单元电路650的前端单元电路630,并且两者都耦合到存储器单元电路670。核心690可以是精简指令集计算(reducedinstructionsetcomputing,risc)核心、复杂指令集计算(complexinstructionsetcomputing,cisc)核心、超长指令字(verylonginstructionword,vliw)核心、或者混合或替代性核心类型。作为另外一个选项,核心690可以是专用核心,例如,网络或通信核心、压缩引擎、协处理器核心、通用计算图形处理单元(generalpurposecomputinggraphicsprocessingunit,gpgpu)核心、图形核心,等等。[0075]前端单元电路630可以包括分支预测单元电路632,其耦合到指令缓存单元电路634,该指令缓存单元电路耦合到指令转译后备缓冲器(translationlookasidebuffer,tlb)636,该指令tlb耦合到指令取得单元电路638,该指令取得单元电路耦合到解码单元电路640。在一个实施例中,指令缓存单元电路634被包括在存储器单元电路670中,而不是前端单元电路630。解码单元电路640(或解码器)可以对指令进行解码,并且生成一个或多个微操作、微代码入口点、微指令、其他指令或者其他控制信号作为输出,这些微操作、微代码入口点、微指令、其他指令或者其他控制信号是从原始指令解码来的,或者以其他方式反映原始指令,或者是从原始指令得出的。解码单元电路640还可以包括地址生成单元电路(agu,未示出)。在一个实施例中,agu使用转发的寄存器端口来生成lsu地址,并且可以进一步执行分支转发(例如,立即数偏移分支转发,lr寄存器分支转发,等等)。可以利用各种不同的机制来实现解码单元电路640。适当机制的示例包括但不限于查找表、硬件实现方式、可编程逻辑阵列(programmablelogicarray,pla)、微代码只读存储器(readonlymemory,rom),等等。在一个实施例中,核心690包括微代码rom(未示出)或其他介质,其为某些宏指令存储微代码(例如,在解码单元电路640中或者以其他方式在前端单元电路630内)。在一个实施例中,解码单元电路640包括微操作(micro-op)或操作缓存(未示出),以保持/缓存在解码或处理器管线600的其他阶段期间生成的解码的操作、微标记或微操作。解码单元电路640可以耦合到执行引擎单元电路650中的重命名/分配器单元电路652。[0076]执行引擎电路650包括重命名/分配器单元电路652,其耦合到引退单元电路654和一组一个或多个调度器电路656。(一个或多个)调度器电路656代表任何数目的不同调度器,包括预留站、中央指令窗口,等等。在一些示例中,(一个或多个)调度器电路656可以包括算术逻辑单元(arithmeticlogicunit,alu)调度器/调度电路、alu队列、算术生成单元(arithmeticgenerationunit,agu)调度器/调度电路、agu队列,等等。(一个或多个)调度器电路656耦合到(一个或多个)物理寄存器堆电路658。(一个或多个)物理寄存器堆电路658中的每一者代表一个或多个物理寄存器堆,这些物理寄存器堆中的不同物理寄存器堆存储一个或多个不同的数据类型,例如标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点、状态(例如,指令指针,即要执行的下一指令的地址),等等。在一个实施例中,(一个或多个)物理寄存器堆单元电路658包括向量寄存器单元电路、写入掩码寄存器单元电路、以及标量寄存器单元电路。这些寄存器单元可以提供体系结构式向量寄存器、向量掩码寄存器、通用寄存器,等等。(一个或多个)物理寄存器堆单元电路658与引退单元电路654(也称为退役队列或引退队列)重叠,以说明可以用来实现寄存器重命名和无序执行的各种方式(例如,利用(一个或多个)重排序缓冲器(reorderbuffer,rob)和(一个或多个)引退寄存器堆;利用(一个或多个)未来堆、(一个或多个)历史缓冲器、以及(一个或多个)引退寄存器堆;利用寄存器图谱和寄存器的池;等等)。引退单元电路654和(一个或多个)物理寄存器堆电路658耦合到(一个或多个)执行集群660。(一个或多个)执行集群660包括一组一个或多个执行单元电路662和一组一个或多个存储器访问电路664。执行单元电路662可以对各种类型的数据(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行各种算术、逻辑、浮点或其他类型的操作(例如,移位、加法、减法、乘法)。虽然一些示例可以包括专用于特定功能或功能集合的若干个执行单元或执行单元电路,但其他实施例可以只包括一个执行单元电路或者全部执行所有功能的多个执行单元/执行单元电路。(一个或多个)调度器电路656、(一个或多个)物理寄存器堆单元电路658、以及(一个或多个)执行集群660被示为可能是多个,因为某些实施例为某些类型的数据/操作创建单独的管线(例如,标量整数管线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点管线和/或存储器访问管线,它们各自具有其自己的调度器电路、(一个或多个)物理寄存器堆单元电路和/或执行集群—并且在单独的存储器访问管线的情况下,实现了某些实施例,其中只有此管线的执行集群具有(一个或多个)存储器访问单元电路664)。还应当理解,在使用分开的管线的情况下,这些管线中的一个或多个可以是无序发出/执行的,而其余的是有序的。[0077]在一些示例中,执行引擎单元电路650可以执行到高级微控制器总线(ahb)接口(未示出)的加载存储单元(lsu)地址/数据管线化,以及地址阶段和写回、数据阶段加载、存储、以及分支。[0078]存储器访问电路664的集合耦合到存储器单元电路670,该存储器单元电路包括数据tlb单元电路672,该数据tlb单元电路耦合到数据缓存电路674,该数据缓存电路耦合到第2级(l2)缓存电路676。在一个示例性实施例中,存储器访问单元电路664可以包括加载单元电路、存储地址单元电路、以及存储数据单元电路,它们中的每一者耦合到存储器单元电路670中的数据tlb电路672。指令缓存电路634进一步耦合到存储器单元电路670中的第2级(l2)缓存单元电路676。在一个实施例中,指令缓存634和数据缓存674在l2缓存单元电路676、第3级(l3)缓存单元电路(未示出)和/或主存储器中被组合成单个指令和数据缓存(未示出)。l2缓存单元电路676耦合到一个或多个其他级别的缓存并且最终耦合到主存储器。[0079]核心690可以支持一个或多个指令集(例如,x86指令集(带有已随着较新版本添加的一些扩展);mips指令集;arm指令集(带有可选的额外扩展,例如neon)),包括本文描述的(一个或多个)指令。在一个实施例中,核心690包括逻辑来支持紧缩数据指令集扩展(例如,avx1、avx2),从而允许了被许多多媒体应用使用的操作被利用紧缩数据来执行。[0080](一个或多个)示例性执行单元电路[0081]图7图示了(一个或多个)执行单元电路的实施例,例如图6(b)的(一个或多个)执行单元电路662。如图所示,(一个或多个)执行单元电路662可以包括一个或多个alu电路701、向量/simd单元电路703、加载/存储单元电路705、和/或分支/跳转单元电路707。alu电路701执行整数算术和/或布尔操作。向量/simd单元电路703对紧缩数据(例如,simd/向量寄存器)执行向量/simd操作。加载/存储单元电路705执行加载和存储指令,以将数据从存储器加载到寄存器中,或者从寄存器存储到存储器。加载/存储单元电路705也可以生成地址。分支/跳转单元电路707取决于指令而引起到某个存储器地址的分支或跳转。浮点单元(floating-pointunit,fpu)电路709执行浮点算术。(一个或多个)执行单元电路662的宽度取决于实施例而有所不同,并且可以在从16比特到1024比特的范围中。在一些示例中,两个或更多个更小的执行单元被逻辑地组合以形成更大的执行单元(例如,两个128比特执行单元被逻辑组合以形成256比特执行单元)。[0082]示例性寄存器体系结构[0083]图8是根据一些示例的寄存器体系结构800的框图。如图所示,存在向量/simd寄存器810,其宽度从128比特到1024比特不等。在一些示例中,向量/simd寄存器810在物理上是512比特的,并且取决于映射,只有一些低位比特被使用。例如,在一些示例中,向量/simd寄存器810是512比特的zmm寄存器:低位256比特被用于ymm寄存器,并且低位128比特被用于xmm寄存器。因此,存在寄存器的覆盖。在一些示例中,向量长度字段在最大长度和一个或多个其他更短的长度之间作出选择,其中每个这种更短的长度是前一长度的一半长度。标量操作是对zmm/ymm/xmm寄存器中的最低阶数据元素位置执行的操作;更高阶数据元素位置或者被保持与其在该指令之前相同,或者被归零,这取决于实施例。[0084]在一些示例中,寄存器体系结构800包括写入掩码/谓词(predicate)寄存器815。例如,在一些示例中,有8个写入掩码/谓词寄存器(有时称为k0至k7),它们各自的大小是16比特、32比特、64比特或128比特。写入掩码/谓词寄存器815可以允许合并(例如,允许目的地中的任何元素集合在任何操作的执行期间被保护免于更新)和/或归零(例如,归零向量掩码允许目的地中的任何元素集合在任何操作的执行期间被归零)。在一些示例中,给定的写入掩码/谓词寄存器815中的每个数据元素位置对应于目的地的数据元素位置。在其他实施例中,写入掩码/谓词寄存器815是可缩放的,并且由针对给定向量元素的设定数目个使能比特组成(例如,给每个64比特向量元素8个使能比特)。[0085]寄存器体系结构800包括多个通用寄存器825。这些寄存器可以是16比特、32比特、64比特等等,并能够被用于标量操作。在一些示例中,这些寄存器用名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8至r15来称呼。[0086]在一些示例中,寄存器体系结构800包括标量浮点寄存器845,它被用于使用x87指令集扩展对32/64/80比特浮点数据进行标量浮点操作,或者作为mmx寄存器,来对64比特紧缩整数数据执行操作,以及针对在mmx和xmm寄存器之间执行的一些操作来保存操作对象。[0087]一个或多个标志寄存器840(例如,eflags,rflags,等等)存储状态和控制信息,用于算术、比较和系统操作。例如,一个或多个标志寄存器840可以存储条件代码信息,例如进位、奇偶校验、辅助进位、零、符号、以及溢出。在一些示例中,一个或多个标志寄存器840被称为程序状态和控制寄存器。[0088]分段寄存器820包含用于访问存储器的分段点。在一些示例中,这些寄存器由名称cs、ds、ss、es、fs和gs来称呼。[0089]机器特定寄存器(machine-specificregister,msr)835对处理器性能进行控制和报告。大多数msr835处置与系统有关的功能,并且是应用程序不可访问的。机器检查寄存器860由用于对硬件错误进行检测和报告的控制、状态和错误报告msr组成。[0090]一个或多个指令指针寄存器830存储指令指针值。(一个或多个)控制寄存器855(例如,cr0-cr4)确定处理器(例如,处理器470、480、438、415和/或500)的操作模式和当前在执行的任务的特性。调试寄存器850控制并允许监视处理器或核心的调试操作。[0091]存储器管理寄存器865指定用于保护模式存储器管理中的数据结构的位置。这些寄存器可以包括gdtr、idrt、任务寄存器、以及ldtr寄存器。[0092]一些替代性示例可以使用更宽或更窄的寄存器。此外,一些替代性示例可以使用更多、更少或不同的寄存器堆和寄存器。[0093]指令集[0094]指令集体系结构(instructionsetarchitecture,isa)可以包括一个或多个指令格式。给定的指令格式可以定义各种字段(例如,比特的数目、比特的位置)来指定要执行的操作(例如,操作码)和要被执行该操作的(一个或多个)操作对象和/或其他(一个或多个)数据字段(例如,掩码),等等。一些指令格式通过指令模板(或子格式)的定义被进一步分解。例如,给定的指令格式的指令模板可以被定义为具有该指令格式的字段的不同子集(包括的字段通常是按相同顺序的,但至少一些具有不同的比特位置,因为包括的字段更少)和/或被定义为具有以不同方式解读的给定字段。因此,isa的每个指令是利用给定的指令格式来表达的(并且如果定义了的话,则以该指令格式的指令模板中的一个给定指令模板来表达),并且包括用于指定操作和操作对象的字段。例如,示例性add指令具有特定的操作码和指令格式,该指令格式包括操作码字段来指定该操作码并且包括操作对象字段来选择操作对象(源1/目的地和源2);并且这个add指令在指令流中的出现将在选择特定操作对象的操作对象字段中具有特定内容。[0095]示例性指令格式[0096]可以按不同的格式来实现本文描述的(一个或多个)指令的实施例。此外,下文详述了示例性系统、体系结构和管线。可以在这种系统、体系结构和管线上执行(一个或多个)指令的实施例,但不限于详述的那些。[0097]图9图示了指令格式的实施例。如图所示,指令可以包括多个成分,包括但不限于一个或多个字段,用于:一个或多个前缀901、操作码903、寻址信息905(例如,寄存器标识符、存储器寻址信息,等等)、位移值907、和/或立即数909。注意,一些指令利用了该格式的一些或所有字段,而其他指令可能只使用用于操作码903的字段。在一些示例中,图示的顺序是这些字段要被编码的顺序,然而应当明白,在其他实施例中,这些字段可以被按不同的顺序来编码、被组合,等等。[0098](一个或多个)前缀字段901在被使用时对指令进行修改。在一些示例中,一个或多个前缀被用于重复字符串指令(例如,0xf0、0xf2、0xf3,等等)、提供节超控(sectionoverride)(例如,0x2e、0x36、0x3e、0x26、0x64、0x65、0x2e、0x3e,等等)、执行总线锁定操作、和/或改变操作对象(例如,0x66)和地址大小(例如,0x67)。某些指令要求强制性的前缀(例如,0x66、0xf2、0xf3,等等)。这些前缀中的某些可以被认为是“传统”前缀。其他前缀(本文详述了其一个或多个示例)指示出和/或提供了进一步的能力,例如指定特定的寄存器等等。这些其他前缀通常跟随在“传统”前缀之后。[0099]操作码字段903被用于至少部分地定义在指令的解码时要执行的操作。在一些示例中,在操作码字段903中编码的主操作码的长度为1、2或3个字节。在其他实施例中,主操作码可以是不同的长度。额外的3比特操作码字段有时被编码在另一个字段中。[0100]寻址字段905被用于寻址指令的一个或多个操作对象,例如存储器或者一个或多个寄存器中的位置。图10图示了寻址字段905的实施例。在这个图示中,示出了可选的modr/m字节1002和可选的缩放、索引、基址(scale,index,base,sib)字节1004。modr/m字节1002和sib字节1004被用于编码一指令的多达两个操作对象,每个操作对象是直接寄存器或有效存储器地址。注意,这些字段中的每一者是可选的,即,不是所有的指令都包括这些字段中的一个或多个。modr/m字节1002包括mod字段1042、寄存器字段1044、和r/m字段1046。[0101]mod字段1042的内容区分存储器访问和非存储器访问模式。在一些示例中,当mod字段1042的值为b11时,就利用了寄存器直接寻址模式,否则就使用寄存器间接寻址。[0102]寄存器字段1044可以编码目的地寄存器操作对象或者源寄存器操作对象,或者可以编码操作码扩展,并且可不被用于编码任何指令操作对象。寄存器索引字段1044的内容直接指定或者通过地址生成来指定源或目的地操作对象的位置(在寄存器中或者在存储器中)。在一些示例中,寄存器字段1044得到来自前缀(例如,前缀901)的额外比特的补充,以允许更大的寻址。[0103]r/m字段1046可以被用于编码引用存储器地址的指令操作对象,或者可以被用于编码目的地寄存器操作对象或源寄存器操作对象。注意,在一些示例中,r/m字段1046可以被与mod字段1042相组合以规定寻址模式。[0104]sib字节1004包括缩放字段1052、索引字段1054、以及基址字段1056,以用于地址的生成。缩放字段1052指示缩放因子。索引字段1054指定要使用的索引寄存器。在一些示例中,索引字段1054得到来自前缀(例如,前缀901)的额外比特的补充,以允许更大的寻址。基址字段1056指定了要使用的基址寄存器。在一些示例中,基址字段1056得到来自前缀(例如,前缀901)的额外比特的补充,以允许更大的寻址。在实践中,缩放字段1052的内容允许缩放索引字段1054的内容以进行存储器地址生成(例如,对于使用2缩放*索引+基址的地址生成)。[0105]一些寻址形式利用位移值来生成存储器地址。例如,可以根据2缩放*索引+基址+位移、索引*缩放+位移、r/m+位移、指令指针(rip/eip)+位移、寄存器+位移等等来生成存储器地址。该位移可以是1字节、2字节、4字节等等的值。在一些示例中,位移字段907提供这个值。此外,在一些示例中,在寻址字段905的mod字段中编码了位移因子用法,其指示出压缩位移方案,对于该方案,位移值是通过将disp8与缩放因子n结合相乘来计算的,该缩放因子n是基于向量长度、b比特的值和指令的输入元素大小而确定的。该位移值被存储在位移字段907中。[0106]在一些示例中,立即数字段909为指令指定立即数。立即数可以被编码为1字节值、2字节值、4字节值,等等。[0107]图11图示了第一前缀901(a)的实施例。在一些示例中,第一前缀901(a)是rex前缀的实施例。使用这个前缀的指令可以指定通用寄存器、64比特紧缩数据寄存器(例如,单指令多数据(simd)寄存器或向量寄存器)、和/或控制寄存器和调试寄存器(例如,cr8-cr15和dr8-dr15)。[0108]使用第一前缀901(a)的指令可以使用3比特字段来指定最多三个寄存器,这取决于格式:1)使用reg字段1044和modr/m字节1002的r/m字段1046;2)使用modr/m字节1002与sib字节1004,包括使用reg字段1044和基址字段1056和索引字段1054;或者3)使用操作码的寄存器字段。[0109]在第一前缀901(a)中,比特位置7:4被设置为0100。比特位置3(w)可以被用于确定操作对象大小,但可能不会单独确定操作对象宽度。因此,当w=0时,操作对象大小由代码段描述符(codesegmentdescriptor,cs.d)决定,而当w=1时,操作对象大小为64比特。[0110]注意,添加另一个比特则允许了寻址16(24)个寄存器,而单独的modr/mreg字段1044和modr/mr/m字段1046各自只能寻址8个寄存器。[0111]在第一前缀901(a)中,比特位置2(r)可以是modr/mreg字段1044的扩展,并且当该字段编码通用寄存器、64比特紧缩数据寄存器(例如,sse寄存器)或者控制或调试寄存器时,可被用来修改modr/mreg字段1044。当modr/m字节1002指定其他寄存器或定义扩展操作码时,r被忽略。[0112]比特位置1(x)x比特可以修改sib字节索引字段1054。[0113]比特位置b(b)b可以修改modr/mr/m字段1046或sib字节基址字段1056中的基址;或者它可以修改用于访问通用寄存器(例如,通用寄存器825)的操作码寄存器字段。[0114]图12(a)-(d)图示了如何使用第一前缀901(a)的r、x和b字段的实施例。图12(a)图示了当sib字节1004不被用于存储器寻址时,来自第一前缀901(a)的r和b被用来扩展modr/m字节1002的reg字段1044和r/m字段1046。图12(b)图示了当不使用sib字节1004时,来自第一前缀901(a)的r和b被用来扩展modr/m字节1002的reg字段1044和r/m字段1046(寄存器-寄存器寻址)。图12(c)图示了当sib字节1004被用于存储器寻址时,来自第一前缀901(a)的r、x和b被用于扩展modr/m字节1002的reg字段1044以及索引字段1054和基址字段1056。图12(d)图示了当寄存器被编码在操作码903中时,来自第一前缀901(a)的b被用来扩展modr/m字节1002的reg字段1044。[0115]图13(a)-(b)图示了第二前缀901(b)的实施例。在一些示例中,第二前缀901(b)是vex前缀的实施例。第二前缀901(b)编码允许指令具有多于两个操作对象,并且允许simd向量寄存器(例如,向量/simd寄存器810)长于64比特(例如,128比特和256比特)。第二前缀901(b)的使用提供了三操作对象(或更多)的语法。例如,先前的两操作对象指令执行诸如a=a+b之类的操作,这覆写了源操作对象。对第二前缀901(b)的使用使得操作对象能够执行非破坏性操作,比如a=b+c。[0116]在一些示例中,第二前缀901(b)有两种形式——两字节形式和三字节形式。两字节的第二前缀901(b)主要被用于128比特、标量和一些256比特指令;而三字节的第二前缀901(b)提供了第一前缀901(a)和3字节操作码指令的紧凑替换。[0117]图13(a)图示了第二前缀901(b)的两字节形式的实施例。在一个示例中,格式字段1301(字节01303)包含值c5h。在一个示例中,字节11305在比特[7]中包括“r”值。这个值是第一前缀901(a)的相同值的补码。比特[2]被用来规定向量的长度(l)(其中,值0是标量或者128比特向量,而值1是256比特向量)。比特[1:0]提供等同于一些传统前缀的操作码扩展性(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。被示为vvvv的比特[6:3]可以被用于:1)编码第一源寄存器操作对象,该操作对象以反转(反码)形式指定,对于具有2个或更多个源操作对象的指令有效;2)编码目的地寄存器操作对象,该操作对象以反码形式指定,用于某些向量移位;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。[0118]使用这个前缀的指令可以使用modr/mr/m字段1046来编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。[0119]使用这个前缀的指令可以使用modr/mreg字段1044来编码目的地寄存器操作对象或者源寄存器操作对象,被作为操作码扩展来对待,而不被用于编码任何指令操作对象。[0120]对于支持四个操作对象的指令语法,vvvv,modr/mr/m字段1046和modr/mreg字段1044编码了四个操作对象中的三个。然后立即数909的比特[7:4]被用来编码第三源寄存器操作对象。[0121]图13(b)图示了第二前缀901(b)的三字节形式的实施例。在一个示例中,格式字段1311(字节01313)包含值c4h。字节11315在比特[7:5]中包括“r”、“x”和“b”,它们是第一前缀901(a)的相同值的补码。字节11315的比特[4:0](示为mmmmm)包括根据需要来对一个或多个隐含的前导操作码字节进行编码的内容。例如,00001意味着0fh前导操作码,00010意味着0f38h前导操作码,00011意味着前导0f3ah操作码,等等。[0122]字节21317的比特[7]与第一前缀901(a)的w被类似地使用,包括帮助确定可提升的操作对象大小。比特[2]被用来规定向量的长度(l)(其中,值0是标量或者128比特向量,而值1是256比特向量)。比特[1:0]提供等同于一些传统前缀的操作码扩展性(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。被示为vvvv的比特[6:3]可以被用于:1)编码第一源寄存器操作对象,该操作对象以反转(反码)形式指定,并且对于具有2个或更多个源操作对象的指令有效;2)编码目的地寄存器操作对象,该操作对象以反码形式指定,用于某些向量移位;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。[0123]使用这个前缀的指令可以使用modr/mr/m字段1046来编码引用存储器地址的指令操作对象,或者编码目的地寄存器操作对象或源寄存器操作对象。[0124]使用这个前缀的指令可以使用modr/mreg字段1044来编码目的地寄存器操作对象或者源寄存器操作对象,被作为操作码扩展来对待,而不被用于编码任何指令操作对象。[0125]对于支持四个操作对象的指令语法,vvvv,modr/mr/m字段1046和modr/mreg字段1044编码了四个操作对象中的三个。然后立即数909的比特[7:4]被用来编码第三源寄存器操作对象。[0126]图14图示了第三前缀901(c)的实施例。在一些示例中,第一前缀901(a)是evex前缀的实施例。第三前缀901(c)是四字节前缀。[0127]第三前缀901(c)能够在64比特模式中编码32个向量寄存器(例如,128比特、256比特和512比特寄存器)。在一些示例中,利用写入掩码/操作掩码(参见对于先前图中的寄存器的论述,例如图8)或谓词的指令利用这个前缀。操作掩码寄存器允许条件处理或选择控制。操作掩码指令——其源/目的地操作对象是操作掩码寄存器并且将操作掩码寄存器的内容视为单个值——是使用第二前缀901(b)而被编码的。[0128]第三前缀901(c)可以编码特定于指令类别的功能(例如,具有“加载+操作”语义的紧缩指令可以支持嵌入式广播功能,具有舍入语义的浮点指令可以支持静态舍入功能,具有非舍入算术语义的浮点指令可以支持“抑制所有异常”功能,等等)。[0129]第三前缀901(c)的第一字节是格式字段1411,它在一种示例中具有62h的值。随后的字节被称为有效载荷字节1415-1419,并且共同形成p[23:0]的24比特值,从而以(本文中详述的)一个或多个字段的形式来提供特定的能力。[0130]在一些示例中,有效载荷字节1419的p[1:0]与低位的两个mm比特相同。在一些示例中,p[3:2]被保留。比特p[4](r’)在与p[7]和modr/mreg字段1044相组合时允许对高16向量寄存器集合的访问。当不需要sib类型寻址时,p[6]也可以提供对高16向量寄存器的访问。p[7:5]由r、x和b构成,它们是向量寄存器、通用寄存器、存储器寻址的操作对象指定符修饰符比特,并且当与modr/m寄存器字段1044和modr/mr/m字段1046相组合时,允许对低8个寄存器之外的下一组8个寄存器的访问。p[9:8]提供等同于一些传统前缀的操作码外延性(例如,00=无前缀,01=66h,10=f3h,并且11=f2h)。p[10]在一些示例中是固定值1。被示为vvvv的p[14:11]可以被用于:1)编码第一源寄存器操作对象,该操作对象以反转(反码)形式指定,并且对于具有2个或更多个源操作对象的指令有效;2)编码目的地寄存器操作对象,该操作对象以反码形式指定,用于某些向量移位;或者3)不编码任何操作对象,该字段被保留并且应当包含某个值,例如1111b。[0131]p[15]类似于第一前缀901(a)和第二前缀911(b)的w,并且可以作为操作码扩展比特或操作对象大小提升。[0132]p[18:16]指定操作掩码(写入掩码)寄存器(例如,写入掩码/谓词寄存器815)中的寄存器的索引。在本发明的一个实施例中,特定值aaa=000具有特殊行为,暗示着没有操作掩码被用于特定指令(这可以按多种方式来实现,包括使用硬连线到全一的操作掩码或者绕过掩蔽硬件的硬件)。当合并时,向量掩码允许了目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被保护免于更新;在其他的一个实施例中,保留目的地的相应的掩码比特具有0的每个元素的旧值。与之不同,当归零向量掩码允许了目的地中的任何元素集合在(由基本操作和增强操作指定的)任何操作的执行期间被归零时;在一个实施例中,目的地的元素在相应的掩码比特具有0值时被设置到0。这个功能的子集是控制被执行的操作的向量长度(即,被修改的元素的跨度,从第一个到最后一个)的能力;然而,被修改的元素不一定要连续。因此,操作掩码字段允许了部分向量操作,包括加载、存储、算术、逻辑,等等。虽然在描述的一些示例中,操作掩码字段的内容选择若干个操作掩码寄存器中包含要使用的操作掩码的那一个(从而操作掩码字段的内容间接标识了要执行的掩蔽),但替代地或附加地,替代性实施例允许掩码写入字段的内容直接指定要执行的掩蔽。[0133]p[19]可以与p[14:11]相组合,来以非破坏性源语法编码第二源向量寄存器,该语法可以利用p[19]来访问高16个向量寄存器。p[20]编码多种功能,这些功能在不同类别的指令中有所不同,并且可以影响向量长度/舍入控制指定符字段(p[22:21])的含义。p[23]指示出对合并-写入掩蔽的支持(例如,当被设置为0时)或者对归零和合并-写入掩蔽的支持(例如,当被设置为1时)。[0134]在下面的表格中详述了在使用第三前缀901(c)的指令中对寄存器的编码的示例性实施例。[0135][0136]表格1:64比特模式中的32寄存器支持[0137][0138]表格2:在32比特模式中编码寄存器指定符[0139][0140]表格3:操作掩码寄存器指定符编码[0141]程序代码可以被应用到输入指令以执行本文描述的功能并且生成输出信息。输出信息可以按已知的方式被应用到一个或多个输出设备。对于本技术而言,处理系统包括任何具有处理器的系统,例如数字信号处理器(digitalsignalprocessor,dsp)、微控制器、专用集成电路(applicationspecificintegratedcircuit,asic)、或者微处理器。[0142]可以用高级别过程式或面向对象的编程语言来实现程序代码以与处理系统进行通信。如果希望,也可以用汇编或机器语言来实现程序代码。实际上,本文描述的机制在范围上不限于任何特定的编程语言。在任何情况下,该语言可以是编译语言或者解释语言。[0143]可以用硬件、软件、固件或者这种实现方案的组合来实现本文公开的机制的实施例。一些示例可以被实现为计算机程序或程序代码,在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行。[0144]至少一个实施例的一个或多个方面可以由被存储在机器可读介质上的表示处理器内的各种逻辑的代表性指令来实现,这些指令当被机器读取时,使得该机器制作逻辑来执行本文描述的技术。这种被称为“ip核心”的表现形式可以被存储在有形机器可读介质上并且被提供到各种客户或制造设施以加载到实际制作该逻辑或处理器的制作机器中。[0145]这种机器可读存储介质可以包括——但不限于——由机器或设备制造或形成的物品的非暂态有形布置,包括诸如以下各项之类的存储介质:硬盘,任何其他类型的盘(包括软盘、光盘、致密盘只读存储器(compactdiskread-onlymemory,cd-rom)、可改写致密盘(compactdiskrewritable,cd-rw)、和磁光盘),半导体设备(例如,只读存储器(read-onlymemory,rom),诸如动态随机存取存储器(dynamicrandomaccessmemory,dram)、静态随机存取存储器(staticrandomaccessmemory,sram)之类的随机存取存储器(randomaccessmemory,ram),可擦除可编程只读存储器(erasableprogrammableread-onlymemory,eprom),闪速存储器,电可擦除可编程只读存储器(electricallyerasableprogrammableread-onlymemory,eeprom),相变存储器(phasechangememory,pcm)),磁卡或光卡,或者适合用于存储电子指令的任何其他类型的介质。[0146]因此,一些示例还包括非暂态有形机器可读介质,其包含指令或者包含定义本文描述的结构、电路、装置、处理器和/或系统特征的设计数据,例如硬件描述语言(hardwaredescriptionlanguage,hdl)。这种实施例也可以被称为程序产品。[0147]仿真(包括二进制转译、代码变形,等等)[0148]在一些情况下,指令转换器可以被用于将指令从源指令集转换到目标指令集。例如,指令转换器可以将指令转译(例如,利用静态二进制转译、包括动态编译的动态二进制转译)、变形、仿真或者以其他方式转换到要被核心处理的一个或多个其他指令。可以用软件、硬件、固件或者其组合来实现指令转换器。指令转换器可以在处理器上、在处理器外、或者一部分在处理器上而一部分在处理器外。[0149]图15的框图对比了根据一些示例的使用软件指令转换器来将源指令集中的二进制指令转换成目标指令集中的二进制指令。在图示的实施例中,指令转换器是软件指令转换器,但是可替代地,可以用软件、固件、硬件或者其各种组合来实现指令转换器。图15示出了高级别语言1502的程序可以被利用第一isa编译器1504来编译以生成第一isa二进制代码1506,该代码可以由具有至少一个第一指令集核心的处理器1516原生执行。具有至少一个第一isa指令集核心的处理器1516表示任何这样的处理器:这种处理器可以通过兼容地执行或以其他方式处理(1)第一isa指令集核心的指令集的实质部分或者(2)目标为在具有至少一个第一isa指令集核心的英特尔处理器上运行的应用或其他软件的目标代码版本,来执行与具有至少一个第一isa指令集核心的处理器基本上相同的功能,以便实现与具有至少一个第一isa指令集核心的处理器基本上相同的结果。第一isa编译器1504代表可操作来生成第一isa二进制代码1506(例如,目标代码)的编译器,该第一isa二进制代码在进行或不进行额外的链接处理的情况下可以在具有至少一个第一isa指令集核心的处理器1516上被执行。类似地,图15示出了高级别语言1502的程序可以被利用替代性指令集编译器1508来编译以生成替代性指令集二进制代码1510,该代码可以由没有第一isa指令集核心的处理器1514原生执行。指令转换器1512用于将第一isa二进制代码1506转换成可由没有第一isa指令集核心的处理器1514原生执行的代码。这个转换后的代码不太可能与替代性指令集二进制代码1510相同,因为能够做到这一点的指令转换器是难以制作的;然而,转换后的代码将实现一般操作并且由来自替代性指令集的指令构成。因此,指令转换器1512代表软件、固件、硬件或者其组合,其通过仿真、模拟或任何其他过程,允许不具有第一isa指令集处理器或核心的处理器或其他电子设备执行第一isa二进制代码1506。[0150]提及“一个实施例”、“一实施例”、“一示例实施例”等等表明描述的实施例可以包括特定的特征、结构或特性,但可能不一定每个实施例都包括该特定特征、结构或特性。此外,这种短语不一定指的是同一实施例。另外,当联系一实施例来描述特定的特征、结构或特性时,认为联系其他实施例(无论是否明确描述)来实现这种特征、结构或特性,是在本领域技术人员的知识范围内的。[0151]示例包括但不限于:[0152]1.一种装置,包括:[0153]解码器电路,用于对单个指令的实例进行解码,所述单个指令包括用于操作码的字段,所述操作码指示出执行电路要从第一寄存器将饱和标志值、溢出值以及进位值拷贝到第二寄存器;以及[0154]执行电路,用于根据所述单个指令的实例的所述操作码来执行解码的指令。[0155]2.如示例1所述的装置,其中,所述第二寄存器是标志寄存器。[0156]3.如示例2所述的装置,其中,所述饱和标志值将被拷贝到奇偶校验标志中,所述溢出值将被拷贝到溢出标志中,并且所述进位值将被拷贝到进位标志中。[0157]4.如示例3所述的装置,其中,所述操作码还指示出执行电路要将符号标志、辅助进位标志以及零标志设置为0。[0158]5.如示例1-4中的任一项所述的装置,其中,所述第一寄存器是控制和/或状态寄存器。[0159]6.一种方法,包括:[0160]对单个指令的实例进行解码,所述单个指令包括用于操作码的字段,所述操作码指示出执行电路要从第一寄存器将饱和标志值、溢出值以及进位值拷贝到第二寄存器;以及[0161]根据所述操作码来执行解码的指令。[0162]7.如示例6所述的方法,其中,所述第二寄存器是标志寄存器。[0163]8.如示例7所述的方法,其中,所述饱和标志值将被拷贝到奇偶校验标志中,所述溢出值将被拷贝到溢出标志中,并且所述进位值将被拷贝到进位标志中。[0164]9.如示例8所述的方法,其中,所述操作码还指示出执行电路要将符号标志、辅助进位标志以及零标志设置为0。[0165]10.如示例6-9中的任一项所述的方法,其中,所述第一寄存器是控制和/或状态寄存器。[0166]11.一种装置,包括:[0167]指令转译器,用于将单个指令的实例转译成不同指令集的一个或多个指令,所述单个指令包括用于操作码的字段,所述操作码指示出执行电路要从第一寄存器将饱和标志值、溢出值以及进位值拷贝到第二寄存器;[0168]解码电路,用于对所述不同指令集的一个或多个指令进行解码;以及[0169]执行电路,用于根据所述操作码来执行解码的不同指令集的一个或多个指令以执行从所述第一寄存器将饱和标志值、溢出值以及进位值拷贝到所述第二寄存器。[0170]12.如示例11所述的装置,其中,所述第二寄存器是标志寄存器。[0171]13.如示例12所述的装置,其中,所述饱和标志值将被拷贝到奇偶校验标志中,所述溢出值将被拷贝到溢出标志中,并且所述进位值将被拷贝到进位标志中。[0172]14.如示例13所述的装置,其中,所述操作码还指示出执行电路要将符号标志、辅助进位标志以及零标志设置为0。[0173]15.如示例11-14中的任一项所述的装置,其中,所述第一寄存器是控制和/或状态寄存器。[0174]16.如示例11-15中的任一项所述的装置,其中,所述指令转译器包括二进制转译软件。[0175]17.如示例11-16中的任一项所述的装置,其中,所述指令转译器包括二进制转译电路。[0176]18.一种非暂态机器可读介质,存储单个指令的实例,其中,所述单个指令的实例将根据一种方法被处理,该方法包括:[0177]对所述单个指令的实例进行解码,所述单个指令包括用于操作码的字段,所述操作码指示出执行电路要从第一寄存器将饱和标志值、溢出值以及进位值拷贝到第二寄存器;以及[0178]根据所述操作码来执行解码的指令。[0179]19.如示例18所述的非暂态机器可读介质,其中,所述第二寄存器是标志寄存器。[0180]20.如示例19所述的非暂态机器可读介质,其中,所述饱和标志值将被拷贝到奇偶校验标志中,所述溢出值将被拷贝到溢出标志中,并且所述进位值将被拷贝到进位标志中。[0181]21.如示例20所述的非暂态机器可读介质,其中,所述操作码还指示出执行电路要将符号标志、辅助进位标志以及零标志设置为0。[0182]22.如示例18-21中的任一项所述的非暂态机器可读介质,其中,所述第一寄存器是控制和/或状态寄存器。[0183]此外,在上文描述的各种示例中,除非另有特别注明,否则诸如短语“a、b或c中的至少一者”之类的析取语言旨在被理解为意指a、b或c,或者其任意组合(例如,a、b和/或c)。因此,析取语言并不旨在也不应当被理解为暗示给定的实施例要求至少一个a、至少一个b或者至少一个c各自都存在。[0184]因此,说明书和附图应当被认为是示例性的,而不是限制性的。然而,显然可能对其作出各种修改和变更,而不脱离如权利要求中阐述的本公开的更宽精神和范围。当前第1页12当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1