执行矢量饱和双字/四倍字长加法的指令和逻辑的制作方法

文档序号:11530605阅读:280来源:国知局
执行矢量饱和双字/四倍字长加法的指令和逻辑的制造方法与工艺
本公开针对处理逻辑、微处理器和相关联的指令集架构的
技术领域
,该处理逻辑、微处理器和相关联的指令集架构在由处理器或其它处理逻辑执行时执行逻辑、数学或其它函数操作。
背景技术
:某些类型的应用通常要求在大量数据项上执行相同操作(称为“数据并行性”)。单指令多数据(simd)是指使处理器在多个数据项上执行操作的指令类型。simd技术典型地适于处理器,该处理器可以将寄存器中的位逻辑划分成数个固定大小的数据元素,每一个数据元素表示分离的值。例如,可以将256位寄存器中的位指定为要作为四个分离的64位封装数据元素(四倍字长(q)大小数据元素)、八个分离的32位封装数据元素(双字(d)大小数据元素)、十六个分离的16位封装数据元素(字(w)大小数据元素)或者三十二个分离的8位数据元素(字节(b)大小数据元素)在其上进行操作的源操作数。这种类型的数据称为“封装”数据类型或“矢量”数据类型,并且这种数据类型的操作数称为封装数据操作数或矢量操作数。换言之,封装数据项或矢量是指封装数据元素的序列,并且封装数据操作数或矢量操作数是simd指令的源或目的地操作数(还作为封装数据指令或矢量指令而已知)。附图说明作为示例而非限制在随附各图的绘图中图示了实施例,其中图1a是图示了根据实施例的示例性有序获取、解码、引退流水线和示例性寄存器重命名、无序发布/执行流水线二者的框图;图1b是图示了根据实施例的要包括在处理器中的有序获取、解码、引退核的示例性实施例和示例性寄存器重命名、无序发布/执行架构核二者的框图;图2a-b是更加具体的示例性有序核架构的框图;图3是具有集成的存储器控制器和专用逻辑的多核处理器和单核处理器的框图;图4图示了依照实施例的系统的框图;图5图示了依照实施例的第二系统的框图;图6图示了依照实施例的第三系统的框图;图7图示了依照实施例的片上系统(soc)的框图;图8图示了根据实施例的对照使用软件指令转换器以将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图;图9是图示了根据实施例的写入掩蔽的矢量加法的框图;图10是根据本文描述的实施例的执行指令的示例性处理器逻辑的框图;图11是根据实施例的包括执行矢量饱和加法的指令的处理系统的框图;图12是根据本文描述的实施例的执行指令的逻辑的流程图;图13a-13b是图示了根据实施例的通用矢量友好指令格式及其指令模板的框图;图14a-b是图示了根据实施例的示例性特定矢量友好指令格式的框图;图14c是图示了根据一个实施例的构成寄存器索引字段的特定矢量友好指令格式的字段的框图;图14d是图示了根据一个实施例的构成扩增操作字段的特定矢量友好指令格式的字段的框图;图15是根据一个实施例的寄存器架构1500的框图。具体实施方式simd技术,诸如由具有指令集的intel®coretm处理器采用的simd技术已经使得能够在应用性能方面实现明显改进,该指令集包括x86、mmxtm、流传送simd扩展(sse)、sse2、sse3、sse4.1和sse4.2指令。已经发行了simd扩展的附加集合,其称为高级矢量扩展(avx)(avx1和avx2)并且使用矢量扩展(vex)编码方案(参见例如参见2014年9月的intel®64和ia-32架构软件开发者手册;以及参见2014年9月的intel®架构指令集扩展编程参考)。描述了扩展intel架构(ia)的架构扩展。然而,底层原理不限于任何特定isa。在一个实施例中,处理设备实现指令集来执行饱和双字或四倍字长加法操作。在一个实施例中,矢量饱和加法指令在由第一和第二操作数指示的两个矢量寄存器的对应元素上执行并行加法,并且将结果写入到由第三操作数指示的第三矢量寄存器。在一个实施例中,可以将标量双字或四倍字长数据元素加到矢量寄存器的每一个元素。在一个实施例中,当单独结果超出目标数据元素的范围时,将饱和值写入到用于目标数据元素之外的目的地操作数。以下描述了处理器核架构,接着是根据本文描述的实施例的示例性处理器和计算机架构的描述。阐述众多具体细节以便提供对下文描述的本发明的实施例的全面理解。然而,本领域技术人员将显而易见的是,实施例可以在没有这些具体细节中的一些的情况下实践。在其它实例中,以框图形式示出公知的结构和设备以便避免使各种实施例的底层原理不清楚。处理器核可以以不同方式、出于不同目的以及在不同处理器中实现。例如,这样的核的实现可以包括:1)意图用于通用计算的通用有序核;2)意图用于通用计算的高性能通用无序核;3)意图主要用于图形和/或科学(吞吐量)计算的专用核。处理器可以使用单个处理器核来实现,或者可以包括多个处理器核。处理器内的处理器核可以在架构指令集方面是同质或异质的。不同处理器的实现包括:1)中央处理器,包括用于通用计算的一个或多个通用有序核和/或意图用于通用计算的一个或多个通用无序核;以及2)协处理器,包括意图主要用于图形和/或科学的一个或多个专用核(例如,许多集成的核处理器)。这样的不同处理器引起不同的计算机系统架构,包括:1)与中央系统处理器分离的芯片上的协处理器;2)在分离的管芯上,但是在与中央系统处理器相同的封装中的协处理器;3)在与其它处理器核相同的管芯上的协处理器(在该情况下,这样的协处理器有时候称为专用逻辑,诸如集成的图形和/或科学(吞吐量)逻辑,或者专用核);以及4)片上系统,其可以在相同管芯上包括所描述的处理器(有时候称为(多个)应用核或者(多个)应用处理器、以上描述的协处理器和附加功能性)。示例性核架构有序和无序核框图图1a是图示了根据实施例的示例性有序流水线和示例性寄存器重命名、无序发布/执行流水线的框图。图1b是图示了根据实施例的要包括在处理器中的有序获取、解码、引退核的示例性实施例和示例性寄存器重命名、无序发布/执行架构核二者的框图。图1a-b中的实线框图示了有序流水线和有序核,而虚线框的可选添加图示了寄存器重命名、无序发布/执行流水线和核。在给定有序方面是无序方面的子集的情况下,将描述无序方面。在图1a中,处理器流水线100包括获取级102、长度解码级104、解码级106、分配级108、重命名级110、调度(还作为分派或发布已知)级112、寄存器读取/存储器读取级114、执行级116、回写/存储器写入级118、异常处置级122和提交级124。图1b示出了包括耦合到执行引擎单元150的前端单元130的处理器核190,并且前端单元130和执行引擎单元150二者耦合到存储器单元170。核190可以是简约指令集计算(risc)核、复杂指令集计算(cisc)核、非常长指令字(vliw)核、或者混合式或可替换核类型。作为又一选项,核190可以是专用核,诸如例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(gpgpu)核、图形核等。前端单元130包括耦合到指令缓存单元134的分支预测单元132,指令缓存单元134耦合到指令转化侧视缓冲器(tlb)136,指令转化侧视缓冲器(tlb)136耦合到指令获取单元138,指令获取单元138耦合到解码单元140。解码单元140(或解码器)可以解码指令,并且作为输出而生成一个或多个微操作、微代码录入点、微指令、其它指令或者其它控制信号,其从原始指令解码或者以其它方式反映原始指令或者从原始指令导出。解码单元140可以使用各种不同机制来实现。适合的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(pla)、微代码只读存储器(rom)等。在一个实施例中,核190包括微代码rom或者存储用于某些宏指令的微代码的其它介质(例如,在解码单元140中或者以其它方式在前端单元130内)。解码单元140耦合到执行引擎单元150中的重命名/分配器单元152。执行引擎单元150包括耦合到引退单元154和一个或多个调度器单元156的集合的重命名/分配器单元152。(多个)调度器单元156表示任何数目的不同调度器,包括预留站、中央指令窗口等。(多个)调度器单元156耦合到(多个)物理寄存器文件的(多个)单元158。(多个)物理寄存器文件的单元158中的每一个表示一个或多个物理寄存器文件,其中不同的物理寄存器文件存储一个或多个不同的数据类型,诸如标量整数、标量浮点数、封装整数、封装浮点数、矢量整数、矢量浮点数、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,(多个)物理寄存器文件的单元158包括矢量寄存器单元、写入掩蔽寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构矢量寄存器、矢量掩蔽寄存器和通用寄存器。(多个)物理寄存器文件的(多个)单元158由引退单元154重叠以说明其中可以实现寄存器重命名和无序执行的各种方式(例如,使用(多个)重新排序缓冲器和(多个)引退寄存器文件;使用(多个)未来文件、(多个)历史缓冲器和(多个)引退寄存器文件;使用寄存器图和寄存器池;等)。引退单元154和(多个)物理寄存器文件的(多个)单元158耦合到(多个)执行群簇160。(多个)执行群簇160包括一个或多个执行单元162的集合以及一个或多个存储器访问单元164的集合。执行单元162可以在各种类型数据(例如,标量浮点数、封装整数、封装浮点数、矢量整数、矢量浮点数)上执行各种操作(例如,偏移、添加、减除、乘积)。尽管一些实施例可以包括专用于特定功能或功能集合的数个执行单元,但是其它实施例可以包括仅一个执行单元或者全部执行所有功能的多个执行单元。将(多个)调度器单元156、(多个)物理寄存器文件的(多个)单元158和(多个)执行群簇160示为可能地多个,因为某些实施例创建用于某些类型的数据/操作的分离流水线(例如,标量整数流水线、标量浮点数/封装整数/封装浮点数/矢量整数/矢量浮点数流水线、和/或存储器访问流水线,每一个流水线具有其自身的调度器单元、(多个)物理寄存器文件的单元和/或执行群簇——并且在分离的存储器访问流水线的情况下,实现其中仅该流水线的执行群簇具有(多个)存储器访问单元164的某些实施例)。还应当理解到,在使用分离的流水线的情况下,这些流水线中的一个或多个可以无序发布/执行并且其余部分有序。存储器访问单元164的集合耦合到存储器单元170,存储器单元170包括耦合到数据缓存单元174的数据tlb单元172,数据缓存单元174耦合到等级2(l2)缓存单元176。在一个示例性实施例中,存储器访问单元164可以包括负载单元、存储地址单元和存储数据单元,其中每一个耦合到存储器单元170中的数据tlb单元172。指令缓存单元134进一步耦合到存储器单元170中的等级2(l2)缓存单元176。l2缓存单元176耦合到一个或多个其它等级的缓存并且最终耦合到主存储器。作为示例,示例性寄存器重命名、无序发布/执行核架构可以实现如下流水线100:1)指令获取138执行获取和长度解码级102和104;2)解码单元140执行解码级106;3)重命名/分配器单元152执行分配级108和重命名级110;4)(多个)调度器单元156执行调度级112;5)(多个)物理寄存器文件的(多个)单元158和存储器单元170执行寄存器读取/存储器读取级114;执行群簇160执行执行级116;6)存储器单元170和(多个)物理寄存器文件的(多个)单元158执行回写/存储器写入级118;7)各种单元可以牵涉在异常处置级122中;以及8)引退单元154和(多个)物理寄存器文件的(多个)单元158执行提交级124。核190可以支持一个或多个指令集(例如,x86指令集(具有已经利用较新版本而添加的一些扩展);sunnyvale,ca的mipstechnologies的mips指令集;以及cambridge,england的armholdings的arm®指令集(具有可选的附加扩展,诸如neon),包括本文描述的(多个)指令。在一个实施例中,核190包括支持封装数据指令集扩展(例如,avx1、avx2等)的逻辑,允许使用封装数据来执行由多个多媒体应用使用的操作。应当理解到,核可以支持多线程处理(执行操作或线程的两个或更多并行集合),并且还可以以各种方式这样做,包括时隙多线程处理、同时多线程处理(其中单个物理核提供用于物理核同时多线程处理的每一个线程的逻辑核)或其组合(例如,时序获取和解码以及此后的同时多线程处理,诸如intel®超线程处理技术)。尽管在无序执行的上下文中描述了寄存器重命名,但是应当理解到,寄存器重命名可以使用在有序架构中。尽管所图示的处理器的实施例还包括分离的指令和数据缓存单元134/174和共享的l2缓存单元176,但是可替换实施例可以具有用于指令和数据二者的单个内部缓存,诸如例如等级1(l1)内部缓存或者多个等级的内部缓存。在一些实施例中,系统可以包括内部缓存和核和/或处理器外部的外部缓存的组合。可替换地,所有缓存可以在核和/或处理器外部。特定示例性有序核架构图2a-b是更加具体的示例有序核架构的框图,该核将是芯片中的若干逻辑块之一(包括相同类型和/或不同类型的其它核)。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与某种固定功能逻辑、存储器i/o接口和其它必要的i/o逻辑进行通信。图2a是根据实施例的单个处理器核连同其向管芯上的互连网络202机器等级2(l2)缓存204的本地子集的框图。在一个实施例中,指令解码器200供应具有封装数据指令集扩展的x86指令集。l1缓存206允许低潜伏期访问以便将存储器缓存到标量和矢量单元中。尽管在一个实施例中(为了简化设计),标量单元208和矢量单元210使用分离的寄存器集合(分别地,标量寄存器212和矢量寄存器214)并且将在它们之间转移的数据写入到存储器并且然后从等级1(l1)缓存206读取回来,但是可替换实施例可以使用不同的方案(例如,使用单个寄存器集合,或者包括通信路径,该通信路径允许在两个寄存器文件之间转移数据而没有进行写入和读取回来)。l2缓存204的本地子集是划分成分离的本地子集的全局l2缓存的部分,每一个处理器核一个分离的本地子集。每一个处理器核具有向其自身的l2缓存204的本地子集的直接访问路径。由处理器核读取的数据存储在其l2缓存子集204中并且可以与其它处理器核访问其自身的本地l2缓存子集并行地且快速地进行访问。由处理器核写入的数据存储在其自身的l2缓存子集204中并且在必要的情况下从其它子集除掉。唤醒网络确保用于共享数据的一致性。唤醒网络是双向的,以便允许代理,诸如协处理器、l2缓存和其它逻辑块,在芯片内彼此通信。每一个环形数据路径在每一方向上为1012位宽。图2b是根据实施例的图2a中的处理器核的部分的放大视图。图2b包括l1缓存204的l1数据缓存206a部分,以及关于矢量单元210和矢量寄存器214的更多细节。具体地,矢量单元210是16宽矢量处理单元(vpu)(参见16宽alu228),其执行整数、单精度浮点数和双精度浮点数指令中的一个或多个。vpu支持将寄存器输入与搅和单元220进行搅和、利用众多转换单元222a-b的众多转换、以及利用复制单元224在存储器输入上的复制。写入掩蔽寄存器226允许预测所得矢量写入。具有集成的存储器控制器和专用逻辑的处理器图3是根据实施例的处理器300的框图,处理器300可以具有多个一个核,可以具有集成的存储器控制器,以及可以具有集成的图形。图3中的实线框图示了具有单个核302a、系统代理310、一个或多个总线控制器单元316的集合的处理器300,而虚线框的可选添加图示了具有多个核302a-n、系统代理单元310中的一个或多个集成的存储器控制器单元314的集合以及专用逻辑308的可替换处理器300。因而,处理器300的不同实现可以包括:1)cpu,具有作为集成图形和/或科学(吞吐量)逻辑的专用逻辑308(其可以包括一个或多个核),以及作为一个或多个通用核的核302a-n(例如,通用有序核、通用无序核、两者的组合);2)协处理器,具有作为意图主要用于图形和/或科学(吞吐量)的大量专用核的核302a-n;以及3)协处理器,具有大量通用有序核的核302a-n。因而,处理器300可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、gpgpu(通用图形处理单元)、高吞吐量许多集成核(mic)协处理器(包括30个或更多核)、嵌入式处理器等。处理器可以实现在一个或多个芯片上。处理器300可以是一个或多个衬底的部分和/或可以使用数个工艺技术中的任一个实现在一个或多个衬底上,所述技术诸如例如bicmos、cmos或nmos。存储器分层结构包括核内的一个或多个等级的缓存、一个或多个共享的缓存单元306的集合、以及耦合到集成的存储器控制器单元314的集合的外部存储器(未示出)。共享缓存单元306的集合可以包括一个或多个中间等级缓存,诸如等级2(l2)、等级3(l3)、等级4(l4)或者其它等级的缓存、最后等级缓存(llc)和/或其组合。尽管在一个实施例中,基于环形的互连单元312互连集成的图形逻辑308、共享缓存单元306的集合以及系统代理单元310/(多个)集成的存储器控制器单元314,但是可替换实施例可以使用任何数目的公知技术以用于互连这样的单元。在一个实施例中,在一个或多个缓存单元306和核302a-n之间维持一致性。在一些实施例中,核302a-n中的一个或多个能够进行多线程处理。系统代理310包括协调和操作核302a-n的那些组件。系统代理单元310可以包括例如功率控制单元(pcu)和显示单元。pcu可以是或者包括用于调控核302a-n和集成图形逻辑308的功率状态所需要的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。核302a-n可以在架构指令集方面是同质或异质的;也就是说,核302a-n中的两个或更多可以能够执行相同指令集,而其它者可以能够仅执行该指令集的子集或者不同的指令集。示例性计算机架构图4-7是示例性计算机架构的框图。本领域中已知的用于膝上型电脑、桌上型电脑、手持式pc、个人数字助手、工程化工作站、服务器、网络设备、网络集线器、开关、嵌入式处理器、数字信号处理器(dsp)、图形设备、视频游戏设备、机顶盒、微控制器、手机、便携式媒体播放器、手持式设备和各种其它电子设备的其它系统设计和配置也是适合的。一般地,能够并入如本文中公开的处理器和/或其它执行逻辑的各种各样的系统或电子设备一般是适合的。图4示出了依照实施例的系统400的框图。系统400可以包括耦合到控制器中心420的一个或多个处理器410,415。在一个实施例中,控制器中心420包括图形存储器控制器中心(gmch)490和输入/输出中心(ioh)450(其可以处于分离的芯片上);gmch490包括存储器440和协处理器445耦合到的存储器和图形控制器;ioh450将输入/输出(i/o)设备460耦合到gmch490。可替换地,存储器和图形控制器中的一个或二者集成在处理器内(如本文中所述),存储器440和协处理器445直接耦合到处理器410,以及具有ioh450的单个芯片中的控制器中心420。在图4中利用折线标示附加处理器415的可选本性。每一个处理器410,415可以包括本文描述的处理器核中的一个或多个并且可以是处理器300的某种版本。存储器440可以例如是动态随机存取存储器(dram)、相变存储器(pcm)或二者的组合。对于至少一个实施例,控制器中心420经由多点总线与(多个)处理器410,415通信,多点总线诸如前侧总线(fsb)、点对点接口,诸如quickpath互连(qpi)或类似连接495。在一个实施例中,协处理器445是专用处理器,诸如例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等。在一个实施例中,控制器中心420可以包括集成图形加速器。在指标度量谱方面,可以存在物理资源410,415之间的各种差异,指标包括架构、微架构、热学、功耗特性等。在一个实施例中,处理器410执行控制一般类型的数据处理操作的指令。嵌入在指令内的可以是协处理器指令。处理器410将这些协处理器识别为具有应当由所附连的协处理器445执行的类型。相应地,处理器410在协处理器总线或其它互连上向协处理器445发布这些协处理器指令(或者表示协处理器指令的控制信号)。(多个)协处理器445接受和执行所接收的协处理器指令。图5示出了依照本发明的实施例的更加具体的第一示例性系统500的框图。如图5中所示,微处理器500是点对点互连系统,并且包括经由点对点互连550耦合的第一处理器570和第二处理器580。处理器570和580中的每一个可以是处理器300的某一版本。在本发明的一个实施例中,处理器570和580分别是处理器410和415,而协处理器538是协处理器445。在另一个实施例中,处理器570和580分别是处理器410和协处理器445。将处理器570和580示为分别包括集成的存储器控制器(imc)单元572和582。处理器570还包括作为其总线控制器单元的部分的点对点(p-p)接口576和578;类似地,第二处理器580包括p-p接口586和588。处理器570,580可以使用p-p接口电路578,588经由点对点(p-p)接口550而交换信息。如图5中所示,imc572和582将处理器耦合到相应的存储器,也就是存储器532和534,其可以是本地附连到相应处理器的主存储器的部分。处理器570,580可以各自使用点对点接口电路576,594,586,598而经由单独的p-p接口552,554来与芯片组590交换信息。芯片组590可以可选地经由高性能接口539与协处理器538交换信息。在一个实施例中,协处理器538是专用处理器,诸如例如高吞吐量mic处理器、网络或通信处理器、压缩引擎、图形处理器、gpgpu、嵌入式处理器等。共享缓存(未示出)可以包括在处理器中或者在两个处理器的外部,而又经由p-p互连与处理器连接,使得任一个或者两个处理器的本地缓存信息可以存储在共享缓存中,如果将处理器置于低功率模式中的话。芯片组590可以经由接口596耦合到第一总线516。在一个实施例中,第一总线516可以是外围组件互连(pci)总线,或者诸如pciexpress总线或另一个第三代i/o互连总线之类的总线,尽管本发明的范围不如此受限。如图5中所示,各种i/o设备514可以耦合到第一总线516,连同将第一总线516耦合到第二总线520的总线桥518。在一个实施例中,一个或多个附加的处理器515,诸如协处理器、高吞吐量mic处理器、gpgpu、加速器(诸如例如图形加速器或数字信号处理(dsp)单元)、现场可编程门阵列或者任何其它处理器,耦合到第一总线516。在一个实施例中,第二总线520可以是低引脚计数(lpc)总线。在一个实施例中,各种设备可以耦合到第二总线520,包括例如键盘和/或鼠标522、通信设备527和存储单元528,诸如盘驱动或其它大容量存储设备,其可以包括指令/代码和数据530。另外,音频i/o524可以耦合到第二总线520。要指出,其它架构是可能的。例如,代替于图5的点对点架构,系统可以实现多点总线或其它这样的架构。图6示出了依照本发明的实施例的更加具体的第二示例性系统600的框图。图5和6中的相同元件具有相同参考标记,并且图5的某些方面已经从图6省略以便避免使图6的其它方面不清楚。图6图示了处理器570,580可以分别包括集成的存储器和i/o控制逻辑(“cl”)572和582。因而,cl572,582包括集成的存储器控制器单元并且包括i/o控制逻辑。图6图示了不仅存储器532,534耦合到cl572,582,而且i/o设备614还耦合到控制逻辑572,582。传统i/o设备615耦合到芯片组590。图7示出了依照实施例的soc700的框图。图3中的类似元件具有相同参考标记。而且,虚线框是更加高级的soc上的可选特征。在图7中,(多个)互连单元702耦合到:应用处理器710,其包括一个或多个核202a-n的集合和(多个)共享缓存单元306;系统代理单元310;(多个)总线控制器单元316;(多个)集成的存储器控制器单元314;一个或多个协处理器720的集合,其可以包括集成的图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(sram)单元730;直接存储器访问(dma)单元732;以及用于耦合到一个或多个外部显示器的显示单元740。在一个实施例中,(多个)协处理器720包括专用处理器,诸如例如网络或通信处理器、压缩引擎、gpgpu、高吞吐量mic处理器、嵌入式处理器等。本文公开的机制的实施例实现在硬件、软件、固件、或者这样的实现方案的组合中。实施例实现为计算机程序或者程序代码,其在包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备和至少一个输出设备的可编程系统上执行。可以应用程序代码,诸如在图5中图示的代码530,以输入指令来执行本文描述的功能并且生成输出信息。输出信息可以以已知方式应用于一个或多个输出设备。出于本申请的目的,处理系统包括具有处理器的任何系统,所述处理器诸如例如:数字信号处理器(dsp)、微控制器、专用集成电路(asic)或微处理器。程序代码可以实现在高级程序性或面向对象的编程语言中以便与处理系统进行通信。程序代码还可以实现在汇编或机器语言中,如果期望的话。事实上,本文描述的机制在范围方面不限于任何特定编程语言。在任何情况下,语言可以是编译或解译语言。至少一个实施例的一个或多个方面可以通过存储在机器可读介质上的代表性数据来实现,机器可读介质表示处理器内的各种逻辑,其在由机器读取时使机器制定逻辑来执行本文描述的技术。作为“ip核”已知的这样的表示可以存储在有形、机器可读介质(“带”)上并且供应给各种顾客或制造设施以便加载到实际制得逻辑或处理器的制造机器中。例如,ip核,诸如由armholdings公司和中国科学院的计算技术协会(ict)研发的处理器,可以许可或销售给各种顾客或受许可人,并且实现在由这些顾客或受许可人产生的处理器中。这样的机器可读存储介质可以包括但不限于由机器或设备形成或制造的物品的非暂时性、有形布置,包括存储介质,诸如硬盘、任何其它类型的盘,包括软盘、光盘、压缩盘只读存储器(cd-rom)、可再写压缩盘(cd-rw)和磁光盘,半导体设备,诸如只读存储器(rom)、随机存取存储器(ram),诸如动态随机存取存储器(dram)、静态随机存取存储器(sram)、可擦除可编程只读存储器(eprom)、闪速存储器、电气可擦除可编程只读存储器(eeprom)、相变存储器(pcm)、磁卡或光学卡、或者适于存储电子指令的任何其它类型的介质。相应地,实施例还包括非暂时性、有形机器可读介质,其包含指令或者包含设计数据,诸如硬件描述语言(hdl),其限定本文描述的结构、电路、装置、处理器和/或系统特征。这样的实施例还可以称为程序产品。仿真(包括二进制转化、代码变体等)在一些情况下,指令转换器可以用于将指令从源指令集转换到目标指令集。例如,指令转换器可以使指令转化(例如,使用静态二进制转化、动态二进制转化,包括动态编译)、变体、仿真或以其它方式转换成要由核处理的一个或多个其它指令。指令转换器可以实现在软件、硬件、固件或其组合中。指令转换器可以在处理器上、处理器外或者部分地在处理器上且部分地在处理器外。图8是根据实施例的对照使用软件指令转换器以将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,尽管可替换地,指令转换器可以实现在软件、固件、硬件或其各种组合中。图8示出了可以使用x86编译器804对高级语言802中的程序进行编译以生成x86二进制代码806,其可以由具有至少一个x86指令集核的处理器816本机执行。具有至少一个x86指令集核的处理器816表示任何处理器,其可以通过兼容地执行或以其它方式处理(1)intel®x86指令集核的指令集的大部分或者(2)目标是在具有至少一个x86指令集核的intel®处理器上运行的应用或其它软件的对象代码版本来执行与具有至少一个x86指令集核的intel®处理器基本上相同的功能,以便实现与具有至少一个x86指令集核的intel®处理器基本上相同的结果。x86编译器804表示可操作为生成x86二进制代码806(例如,对象代码)的编译器,x86二进制代码706可以在具有或者没有附加联动处理的情况下在具有至少一个x86指令集核的处理器816上执行。类似地,图8示出了高级语言802中的程序可以使用可替换的指令集编译器808来编译以便生成可替换的指令集二进制代码810,其可以由没有至少一个x86指令集核的处理器814(例如,具有核的处理器,该核执行sunnyvale,ca的mipstechnologies的mips指令集和/或执行cambridge,england的armholdings的arm指令集)本机执行。指令转换器812用于将x86二进制代码806转换成可以由没有x86指令集核的处理器814本机执行的代码。这种经转换的代码不大可能与可替换的指令集二进制代码810相同,因为能够如此的指令转换器难以制得;然而,经转换的代码将达成一般操作并且由来自可替换指令集的指令构成。因而,指令转换器812表示软件、固件、硬件或其组合,其通过仿效、模拟或任何其它过程而允许没有x86指令集处理器或核的处理器或其它电子设备执行x86二进制代码806。矢量饱和双字/四倍字长加法指令饱和算术增强了许多数据处理算法的效率,特别是在数字信号处理应用中。饱和加法在许多算法中是常见的。然而,要求昂贵的指令序列以使用现有指令来实现饱和算术。在若干实施例中,对指令集架构的矢量扩展包括执行饱和有符号和无符号整数加法的指令。在一个实施例中,提供了利用有符号饱和的矢量有符号整数加法。在一个实施例中,提供了利用无符号饱和的矢量无符号整数加法。在一个实施例中,对于有符号和无符号指令二者,支持封装双字和四倍字长整数。例如,矢量封装加法有符号双字(例如,vpaddsd)指令使处理器执行封装有符号双字整数与来自第一源操作数和第二源操作数的饱和的simd加法。处理器然后将封装整数结果存储在目的地操作数中。当单独的双字结果超出有符号双字整数的范围(也就是说,大于0x7fffffff或小于0x80000000)时,分别将0x7fffffff或0x80000000的饱和值写入到目的地操作数。四倍字长有符号指令(例如,vpaddsq)和无符号版本(用于双字和四倍字长,例如,分别地vpaddusd、vpaddusq)以与无符号和/或四倍字长饱和值类似的方式进行工作。在一个实施例中,支持128位、256位和512位的矢量寄存器,其中对于双字指令而言支持4、8或16个矢量元素,并且对于四倍字长指令而言支持2、4或8个矢量元素。图9是图示了根据实施例的写入掩蔽矢量加法的框图。在一个实施例中,写入掩蔽寄存器k1910在每一数据元素定位的基础上控制目的地矢量操作数中的该数据元素定位是否反映指令操作的结果。基于写入掩蔽配置,目的地操作数(例如,dest操作数907)中的每一个元素定位包含由第一源操作数(例如,src1操作数901)和第二源操作数(例如,src2操作数902)标识的矢量寄存器的对应数据元素的总和的输出。例如,目的地元素零910a具有相关的写入掩蔽值一,并且接收src1操作数901(例如,0x9)的元素零和src2操作数902(例如,0x8)的元素零的总和的结果。目的地元素一910b具有相关的写入掩蔽值零,并且基于写入掩蔽配置,是如所图示的零掩蔽,或者元素的原始值不改变。尽管将src1操作数901和src2操作数902二者图示为矢量,但是在一个实施例中,指令的src2可以是存储标量整数值的存储器地址,要将该标量整数值加到由src1操作数901指定的矢量寄存器的每一个元素。图10是根据本文描述的实施例的执行指令的示例性处理器逻辑的框图。根据实施例,矢量加法逻辑1006包括第一源寄存器(例如,src1寄存器1001)、第二源寄存器(例如,src2寄存器1002)和目的地寄存器(例如,dest寄存器1007)。在一个实施例中,src1寄存器1002包含示例性源矢量a,而src寄存器1002包含示例性源矢量b。计算对应矢量元素的总和,并且可以使用那些元素中的至少一些来产生示例性矢量c,其在一个实施例中是向dest寄存器1007的输出。在一个实施例中,第一源寄存器包含源矢量a,而第二源寄存器包含从指定存储器位置(例如,由指令的src2指定的地址)获取的标量值b。根据实施例,标量值可以存储在通用寄存器中或者广播至矢量寄存器的多个元素。饱和逻辑1008包括在矢量加法逻辑1008中以便减除具有适当饱和值的范围之外结果(例如,最小或最大值,有符号或者无符号)。在图10中示出的具体示例中,src寄存器1001、src2寄存器1002和dest寄存器1007各自是128位。然而,本文描述的实施例的底层原理不限于此,并且可以在变化的实施例中使用附加的寄存器大小,包括256和512位。在一个实施例中,还可以在掩蔽数据结构1010内针对每一个目的地寄存器数据元素指定掩蔽位。如果与目的地寄存器中的特定数据元素相关联的掩蔽位设定成真(例如,一),则矢量加法逻辑1006输出相关联的数据元素的总和。如果掩蔽位设定成假(例如,零),则在一个实施例中,矢量加法逻辑1006将零写入到相关联的目的地寄存器条目。响应于掩蔽值而将零写入到目的地数据元素的前述技术在本文中称为“调零掩蔽”。可替换地,一个实施例使用“合并掩蔽”,其中维持存储在目的地寄存器中的之前数据元素值。因而,如果使用合并掩蔽,则目的地矢量c的位将维持其先前值。本领域普通技术人员理解到,以上描述的掩蔽位可以颠倒,而同时仍然符合实施例的底层原理(例如,真=掩蔽,假=没有掩蔽)。在操作中,如果任何所得元素超出最大或最小数据元素值,则饱和逻辑1008(使用有符号或无符号饱和)替换用于该元素的最大或最小值。如所图示的,在一个实施例中,转换逻辑1006访问寄存器1001,1002和1007以便通过控制乘法器1010,1011和1012来执行以上操作。用于实现乘法器所要求的逻辑是本领域普通技术人员所很好理解的,并且不在本文中详细描述。图11是根据实施例的包括执行矢量饱和加法的指令的处理系统的框图。示例性处理系统包括耦合到主存储器1100的处理器1155。处理器1155包括解码单元1130,其具有解码逻辑1131以用于解码矢量饱和加法指令。附加地,处理器执行引擎单元1140包括执行逻辑1141以用于执行矢量饱和加法指令。当执行单元1140执行指令流时,寄存器1105提供用于操作数、控制数据和其它类型数据的寄存器存储。在一个实施例中,寄存器1105还包括在实现本文描述的矢量饱和加法指令中使用的物理寄存器。单个处理器核(“核0”)的细节在图11中出于简单性而图示。然而将理解到,在图11中示出的核可以具有与核0相同的逻辑集合。如所图示的,每一个核还可以包括专用的等级1(l1)缓存1112和等级2(l2)缓存1111以用于根据指定缓存管理策略来缓存指令和数据。l1缓存1111包括用于存储指令的分离指令缓存1320和用于存储数据的分离数据缓存1121。存储在各种处理器缓存内的指令和数据在缓存行的粒度下进行管理,缓存行的粒度可以是固定的大小(例如,64、128、512字节长度)。该示例性实施例的每一个核具有用于从主存储器1100和/或共享等级3(l3)缓存1116获取指令的指令获取单元1110;用于解码指令的解码单元1130;用于执行指令的执行单元1140;以及用于引退指令并且将结果写入回到寄存器1105的回写/引退单元1150。指令获取单元1110包括各种公知的组件,包括用于存储下一指令的地址以便从存储器1100(或缓存之一)获取的下一指令指针1103;用于存储最近使用的虚拟向物理指令地址的映射的指令转化侧视缓冲器(itlb)1104以便改进地址转化的速度;用于思索性地预测指令分支地址的分支预测单元1102;以及用于存储分支地址和目标地址的分支目标缓冲器(btb)1101。一旦获取,然后就将指令流传送给指令流水线的其余各级,包括解码单元1130、执行单元1140和回写/引退单元1150。图12是根据本文描述的实施例的执行指令的逻辑的流程图。在一个实施例中,处理器包括执行指令操作的逻辑,指令操作包括获取指令以便执行矢量饱和加法指令,如在1202处所示。如在1204处所示,解码逻辑配置为将所获取的指令解码成经解码指令。如在1206处所示,处理器执行逻辑执行经解码指令以便执行矢量加法操作。在1208处,饱和逻辑利用适当的饱和值替换任何所计算的数据元素内的任何范围之外结果(例如,有符号或无符号,双字或四倍字长)。在12010处,基于处理器写入掩蔽配置以及用于每一个数据元素的写入掩蔽值,执行逻辑将经执行的指令的一个或多个结果写入到处理器寄存器文件。在一个实施例中,写入经执行的指令的结果包括将饱和加法操作的结果提交到由矢量饱和加法操作的目的地操作数指示的位置,诸如架构寄存器。结果可以包括一个或多个矢量数据元素,其包括存储在源矢量中的相关联的数据元素的总和,以及基于与数据元素相关联的写入掩蔽和写入掩蔽配置而存储零值的一个或多个数据元素。在一个实施例中,结果包括未经修改的一个或多个矢量数据元素,并且包含之前值或者之前操作结果。在以下表格1中阐述了描述一个实施例的实现的伪代码。表格1-示例性vpaddsd指令逻辑00(kl,vl)=(4,128),(8,256),(16,512)01forj←0tokl-102i←j*3203ifk1[j]or*nowritemask*then04if(evex.b==1)and(src2*ismemory*)then05dest[i+31:i]←saturatetosigneddword(src1[i+31:i]+src2[31:0])
06else07dest[i+31:i]←saturatetosigneddword(src1[i+31:i]+src2[i+31:i])08fi;09else10if*merging-masking*;merging-maskingthen11*dest[i+31:i]remainsunchanged*12else*zeroing-masking*;zeroing-masking13dest[i+31:i]=014fi15fi;16endfor;17dest[max_vl-1:vl]←0在表格1中示出的示例性伪代码提供用于矢量处理器加法饱和有符号双字指令。在示例性伪代码中,分别利用4,8或16个双字矢量元素而支持128,256和512位的矢量长度(vl)。然而将理解到,实施例的底层原理不限于在表格1的伪代码中描述的具体实现,因为实施例提供附加指令,包括有符号四倍字长以及无符号双字和四倍字长指令。附加地,尽管要执行的是矢量加法操作,但是在一个实施例中,src2操作数可以是存储双字或四倍字长数据元素的存储器地址,其要加到src1矢量的每一个元素。在这样的实施例中,从所指定的存储器地址执行隐含负载操作。在一个实施例中,在处理器执行单元执行加法操作之前,负载操作将数据元素从存储器广播给src2矢量寄存器的所有元素。在一个实施例中,可以执行无写入掩蔽操作,或者可以执行写入掩蔽操作。如果使用无写入掩蔽,则将相关联的源数据元素的总和写入到目的地数据元素,或者针对用于目的地数据元素的数据类型范围之外的结果而写入饱和值(例如,双字或四倍字长)。如果使用写入掩蔽,则每一个目的地元素将接收结果、饱和值、零值,或者将基于与数据元素相关联的写入掩蔽值以及用于指令的写入掩蔽配置而保持不修改。示例性指令格式本文描述的(多个)指令的实施例可以以不同格式体现。矢量友好指令格式是适于矢量指令的指令格式(例如,存在特定于矢量操作的某些字段)。尽管描述了其中通过矢量友好指令格式支持矢量和标量操作二者的实施例,但是可替换实施例仅使用矢量友好指令格式的矢量操作。图13a-13b是图示了根据实施例的通用矢量友好指令格式及其指令模板的框图。图13a是图示了根据实施例的通用矢量友好指令格式及其分类a指令模板的框图;而图13b是图示了根据实施例的通用矢量友好指令格式及其分类b指令模板的框图。具体地,针对通用矢量友好指令格式1300限定分类a和b指令模板,它们二者包括无存储器访问1305指令模板和存储器访问1320指令模板。在矢量友好指令格式的上下文中,术语通用是指不束缚于任何特定指令集合的指令格式。将描述其中矢量友好指令格式支持以下内容的实施例:具有36位(4字节)或64位(8字节)数据元素宽度(或大小)的64字节矢量操作数长度(或大小)(并且因而,64字节矢量包括16个双字大小的元素或者可替换地8个四倍字长大小的元素);具有16位(2字节)或8位(1字节)数据元素宽度(或大小)的64字节矢量操作数长度(或大小);具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的32字节矢量操作数长度(或大小);以及具有32位(4字节)、64位(8字节)、16位(2字节)或8位(1字节)数据元素宽度(或大小)的16字节矢量操作数长度(或大小)。然而,可替换实施例支持具有更多、更少或不同数据元素宽度(例如,128位(16字节)数据元素宽度)的更多、更少或不同矢量操作数大小(例如,256字节矢量操作数)。图13a中的分类a指令模板包括:1)在无存储器访问1305指令模板内,示出了无存储器访问、完全取整(round)控制类型操作1310指令模板以及无存储器访问、数据变换类型操作1315指令模板;以及2)在存储器访问1320指令模板内,示出了存储器访问、临时1325指令模板和存储器访问、非临时1330指令模板。图13b中的分类b指令模板包括:1)在无存储器访问1305指令模板内,示出了无存储器访问、写入掩蔽控制、部分取整控制类型操作1312指令模板以及无存储器访问、写入掩蔽控制、vsize类型操作1317指令模板;以及2)在存储器访问1320指令模板内,示出了存储器访问、写入掩蔽控制1327指令模板。通用矢量友好指令格式1300包括在下文以图13a-13b中所图示的次序列出的以下字段。格式字段1340——该字段中的特定值(指令格式标识符值)唯一地标识矢量友好指令格式,以及因而指令流中的矢量友好指令格式中的指令的出现。因此,该字段在以下意义上是可选的:对于仅具有通用矢量友好指令格式的指令集而言,不需要它。基础操作字段1342——其内容辨别不同基础操作。寄存器索引字段1344——其内容直接地或者通过地址生成而指定源和目的地操作数的位置,它们在寄存器中或者在存储器中。这些包括充足数目的位以便从pxq(例如,32x512、16x128、32x1024、64x1024)寄存器文件选择n个寄存器。尽管在一个实施例中n可以高达三个源和一个目的地寄存器,但是可替换实施例可以支持更多或更少的源和目的地寄存器(例如,可以支持高达两个源,其中这些源中的一个还充当目的地;可以支持高达三个源,其中这些源中的一个还充当目的地;可以支持高达两个源和一个目的地)。修饰符字段1346——其内容辨别指定存储器访问的通用矢量指令格式中的指令的出现以及不这样做的那些出现;也就是说,在无存储器访问1305指令模板和存储器访问1320指令模板之间进行辨别。存储器访问操作向存储器分层结构写入和/或读取(在一些情况下,使用寄存器中的值来指定源和/或目的地地址),而非存储器访问操作不会这样做(例如,源和目的地是寄存器)。尽管在一个实施例中该字段还在执行存储器地址计算的三个不同方式之间进行选择,但是可替换实施例可以支持执行存储器地址计算的更多、更少或不同方式。扩增操作字段1350——其内容辨别除基础操作之外要执行各种不同操作中的哪一个。该字段是上下文特定的。在一个实施例中,该字段划分成分类字段1368、阿尔法字段1352和贝塔字段1354。扩增操作字段1350允许在单个指令中而不是在2、3或4个指令中执行操作的公共群组。缩放字段1360——其内容允许索引字段的内容的缩放以用于存储器地址生成(例如,对于使用2缩放*索引+基础的地址生成)。移位字段1362a——其内容用作存储器地址生成的部分(例如,对于使用2缩放*索引+基础+移位的地址生成)。移位因子字段1362b(要指出,移位字段1362a直接在移位因子字段1362b之上的并置指示使用一个或另一个)——其内容用作地址生成的部分;其指定要通过存储器访问的大小(n)进行缩放的移位因子——其中n是存储器访问中的字节数目(例如,对于使用2缩放*索引+基础+经缩放的移位的地址生成)。忽略冗余的低阶位,并且因而,将移位因子字段的内容乘以存储器操作数总大小(n)以便生成要在计算有效地址时使用的最终移位。n的值由处理器硬件在运行时基于完整操作码字段1374(随后在本文中描述)和数据操控字段1354c来确定。移位字段1362a和移位因子字段1362b在以下意义上是可选的:它们不用于无存储器访问1305指令模板和/或不同实施例可以仅实现这两个中的一个或一个都不实现。数据元素宽度字段1364——其内容辨别要使用数个数据元素宽度中的哪一个(在一些实施例中,对于所有指令;在其它实施例中,对于指令中的仅一些)。该字段在以下意义上是可选的:如果仅支持一个数据元素宽度和/或使用操作码的一些方面支持数据元素宽度,则不需要它。写入掩蔽字段1370——其内容在每一数据元素位置的基础上控制目的地矢量操作数中的该数据元素位置是否反映基础操作和扩增操作的结果。分类a指令模板支持合并写入掩蔽,而分类b指令模板支持合并和归零写入掩蔽二者。当合并时,矢量掩蔽允许目的地中的任何元素集合受保护以防在(由基础操作和扩增操作指定的)任何操作的执行期间更新;在另一个实施例中,在对应掩蔽位具有0的情况下,预留目的地的每一个元素的旧值。相比而言,当归零时,矢量掩蔽允许目的地中的任何元素集合在(由基础操作和扩增操作指定的)任何操作的执行期间归零;在一个实施例中,当对应掩蔽位具有0值时,目的地的元素设置成0。该功能性的子集是控制所执行的操作的矢量长度(也就是说,所修改的元素从第一个向最后一个的跨度)的能力;然而,不必要的是,所修改的元素是连贯的。因而,写入掩蔽字段1370允许部分矢量操作,包括加载、存储、算术、逻辑等。尽管描述了其中写入掩蔽字段1370的内容选择包含要使用的写入掩蔽的数个写入掩蔽寄存器之一(并且因而写入掩蔽字段1370的内容简介地标识要执行的掩蔽)的本发明的实施例,但是可替换实施例替代地或者附加地允许掩蔽写入字段1370的内容直接地指定要执行的掩蔽。即时字段1372——其内容允许即时值指定。该字段在以下意义上是可选的:其不存在于不支持即时值的通用矢量友好格式的实现中,以及其不存在于不使用即时值的指令中。分类字段1368——其内容在不同指令分类之间进行辨别。参照图13a-b,该字段的内容在分类a和分类b指令之间进行选择。在图13a-b中,使用圆角方形来指示特定值存在于字段中(例如,分类a1368a和分类b1368b分别用于图13a-b中的分类字段1368)。分类a的指令模板在分类a的非存储器访问1305指令模板的情况下,阿尔法字段1352解译为rs字段1352a,其内容辨别要执行不同扩增操作类型中的哪一个(例如,分别指定取整1352a.1和数据变换1352a.2用于无存储器访问、取整类型操作1310和无存储器访问、数据变换类型操作1315指令模板),而贝塔字段1354辨别要执行所指定的类型的操作中的哪个。在无存储器访问1305指令模板中,缩放字段1360、移位字段1362a和移位缩放字段1362b不存在。无存储器访问指令模板——完全取整控制类型操作在无存储器访问完全取整控制类型操作1310指令模板中,贝塔字段1354解译为取整控制字段1354a,其(多个)内容提供静态取整。尽管在本发明的所述实施例中,取整控制字段1354a包括抑制全部浮点数异常(sae)字段1356和取整操作控制字段1358,但是可替换实施例可以支持的是,可以将这两个概念编码到相同字段中,或者仅具有这些概念/字段中的一个或另一个(例如,可以仅具有取整操作控制字段1358)。sa字段1356——其内容辨别是否禁用异常事件报告;当sae字段1356的内容指示启用抑制时,给定指令不报告任何类型的浮点数异常标志并且不会唤起任何浮点数异常处置器。取整操作控制字段1358——其内容辨别要执行取整操作的群组中的哪一个(例如,向上取整、向下取整、朝零取整以及向最近处取整)。因而,取整操作控制字段1358允许在每一指令的基础上取整模式的改变。在一个实施例中,处理器包括用于指定取整模式的控制寄存器,并且取整操作控制字段1350的内容覆写该寄存器值。无存储器访问指令模板——数据变换类型操作在无存储器访问数据变换类型操作1315指令模板中,贝塔字段1354解译为数据变换字段1354b,其内容辨别要执行数个数据变换中的哪一个(例如,无数据变换、拌和、广播)。在分类a的存储器访问1320指令模板的情况下,阿尔法字段1352解译为逐出提示字段1352b,其内容辨别要使用逐出提示中的哪一个(在图13a中,分别指定临时1352b.1和非临时1352b.2用于存储器访问、临时1325指令模板和存储器访问、非临时1330指令模板),而贝塔字段1354解译为数据操控字段1354c,其内容辨别要执行数个数据操控操作(还称为基元)中的哪一个(例如,无操控;广播、源的上转换;以及目的地的下转换)。存储器访问1320指令模板包括缩放字段1360,以及可选地移位字段1362a或移位缩放字段1362b。矢量存储器指令执行来自存储器的矢量加载以及向存储器的矢量存储,其中支持转换。如与常规矢量指令那样,矢量存储器指令以逐数据元素方式自/向存储器转移数据,其中实际转移的元素由选择为写入掩蔽的矢量掩蔽的内容指示。存储器访问指令模板——临时临时数据是很可能足够快地再使用以获益于缓存的数据。然而,这是提示,并且不同的处理器可以以不同方式实现它,包括完全忽略提示。存储器访问指令模板——非临时非临时数据是不可能足够快地再使用以获益于第一级缓存中的缓存并且应当给予逐出优先级的数据。然而,这是提示,并且不同的处理器可以以不同方式实现它,包括完全忽略提示。分类b的指令模板在分类b的指令模板的情况下,阿尔法字段1352解译为写入掩蔽控制(z)字段1352c,其内容辨别由写入掩蔽字段1370控制的写入掩蔽是应当合并还是归零。在分类b的非存储器访问1305指令模板的情况下,贝塔字段1354的部分解译为rl字段1357a,其内容辨别要执行不同扩增操作类型中的哪一个(例如,分别指定取整1357a.1和矢量长度(vsize)1357a.2用于无存储器访问、写入掩蔽控制、部分取整控制类型操作1312指令模板和无存储器访问、写入掩蔽控制、vsize类型操作1317指令模板),而贝塔字段1354的其余部分辨别要执行所指定的类型的操作中的哪个。在无存储器访问1305指令模板中,缩放字段1360、移位字段1362a和移位缩放字段1362b不存在。在无存储器访问、写入掩蔽控制、部分取整控制类型操作1310指令模板中,贝塔字段1354的其余部分解译为取整操作字段1359a,并且禁用异常事件报告(给定指令不报告任何类型的浮点数异常标志并且不会唤起任何浮点数异常处置器)。取整操作控制字段1359a——正如取整操作控制字段1358,其内容辨别要执行取整操作的群组中的哪一个(例如,向上取整、向下取整、朝零取整以及向最近处取整)。因而,取整操作控制字段1359a允许在每一指令的基础上取整模式的改变。在一个实施例中,处理器包括用于指定取整模式的控制寄存器,并且取整操作控制字段1350的内容覆写该寄存器值。在无存储器访问、写入掩蔽控制、vsize类型操作1317指令模板中,贝塔字段1354的其余部分解译为矢量长度字段1359b,其内容辨别要在其上执行的数个数据矢量长度中的哪一个(例如,128、256或512字节)。在分类b的存储器访问1320指令模板的情况下,贝塔字段1354的部分解译为广播字段1357b,其内容辨别是否要执行广播类型数据操控操作,而贝塔字段1354的其余部分解译为矢量长度字段1359b。存储器访问1320指令模板包括缩放字段1360,以及可选地移位字段1362a或移位缩放字段1362b。关于通用矢量友好指令格式1300,示出了完整操作码字段1374,其包括格式字段1340、基础操作字段1342和数据元素宽度字段1364。尽管示出了其中完整操作码字段1374包括所有这些字段的一个实施例,但是在不支持它们全部的实施例中,完整操作码字段1374包括少于这些字段的全部。完整操作码字段1374提供操作代码(操作码)。扩增操作字段1350、数据元素宽度字段1364和写入掩蔽字段1370允许在通用矢量友好指令格式中在每一指令的基础上指定这些特征。写入掩蔽字段和数据元素宽度字段的组合创建类型化指令,因为它们允许基于不同数据元素宽度来应用掩蔽。在分类a和分类b内发现的各种指令模板在不同情况下是有益的。在一些实施例中,不同处理器或者处理器内的不同核可以仅支持分类a,仅支持分类b,或者支持两个分类。例如,意图用于通用计算的高性能通用无序核可以仅支持分类b,意图主要用于图形和/或科学(吞吐量)计算的核可以仅支持分类a,并且意图用于二者的核可以支持二者(当然,具有来自两个分类的模板和指令的某种混合但是并非来自两个分类的所有模板和指令的核处于本发明的权限内)。而且,单个处理器可以包括多个核,所有核支持相同分类或者其中不同核支持不同分类。例如,在具有分离的图形和通用核的处理器中,意图主要用于图形和/或科学计算的图形核之一可以仅支持分类a,而通用核中的一个或多个可以是具有意图用于通用计算的无序执行和寄存器重命名的高性能通用核,其仅支持分类b。不具有分离的图形核的另一个处理器可以包括一个或多个通用有序或无序核,其支持分类a和分类b二者。当然,在本发明的不同实施例中,来自一个分类的特征还可以实现在另一分类中。以高级语言编写的程序将置于(例如,及时编译或静态编译成)各种不同可执行形式,包括:1)仅具有由目标处理器支持以用于执行的(多个)分类的指令的形式;或者2)具有使用所有分类的指令的不同组合编写的可替换例程并且具有控制流程代码的形式,所述控制流程代码基于由当前正执行该代码的处理器支持的指令来选择要执行的例程。示例性特定矢量友好指令格式图14是图示了根据实施例的示例性特定矢量友好指令格式的框图。图14示出了在以下意义上是特定的特定矢量友好指令格式1400:其指定字段的位置、大小、解译和次序,以及用于那些字段中的一些的值。特定矢量友好指令格式1400可以用于扩展x86指令集,并且因而字段中的一些与在现有x86指令集及其扩展(例如,avx)中使用的那些类似或相同。该格式与具有扩展的现有x86指令集的前缀编码字段、真实操作码字节字段、modr/m字段、sib字段、移位字段和即时字段保持一致。图示了来自图14的字段映射到其中的来自图13的字段。应当理解到,尽管出于说明性目的而在通用矢量友好指令格式1400的上下文中参照特定矢量友好指令格式1300描述了实施例,但是除了在要求保护的情况下之外,本发明不限于特定矢量友好指令格式1400。例如,通用矢量友好指令格式1300设想到用于各种字段的各种可能大小,而将特定矢量友好指令格式1400示出为具有特定大小的字段。作为具体示例,尽管将数据元素宽度字段1364图示为特定矢量友好指令格式1400中的一位字段,但是本发明不如此受限(也就是说,通用矢量友好指令格式1300设想到数据元素宽度字段1364的其它大小)。通用矢量友好指令格式1300包括在下文以图14a中图示的次序列出的以下字段。evex前缀(字节0-3)1402——以四字节形式进行编码。格式字段1340(evex字节0,位[7:0])——第一字节(evex字节0)是格式字段1340并且其包含0x62(在本发明的一个实施例中,用于辨别矢量友好指令格式的唯一值)。第二到第四字节(evex字节1-3)包括提供特定能力的数个位字段。rex字段1405(evex字节1,位[7-5])——包括evex.r位字段(evex字节1,位[7]-r)、evex.x位字段(evex字节1,位[6]-x)和1357bex字节1,位[5]-b)。evex.r、evex.x和evex.b位字段提供与对应vex位字段相同的功能性,并且使用1s互补形式进行编码,即,zmm0编码为111b,zmm15编码为0000b。指令将寄存器索引的低三个位编码为的其它字段在本领域中已知(rrr、xxx和bbb),使得rrrr、xxxx和bbbb可以通过添加evex.r、evex.x和evex.b而形成。rex'字段1310——这是rex'字段1310的第一部分并且是evex.r'位字段(evex字节1,位[4]-r'),其用于编码经扩展的32寄存器集合的高16个或低16个。在一个实施例中,该位连同如下文指示的其它位以位反转格式存储以便从bound指令辨别(在公知的x8632位模式中),bound指令的真实操作码字节为62,但是不会在modr/m字段(在下文描述)中接受mod字段中的值11;可替换实施例不以反转格式存储该位以及下文指示的其它位。值1用于编码低16个寄存器。换言之,r'rrrr通过组合evex.r'、evex.r和来自其它字段的其它rrr而形成。操作码映射字段1415(evex字节1,位[3:0]-mmmm)——其内容编码所暗示的前导操作码字节(0f、0f38或0f3)。数据元素宽度字段1364(evex字节2,位[7]-w)由标记evex.w表示。evex.w用于限定数据类型的粒度(大小)(32位数据元素或者64位数据元素)。evex.vvvv1420(evex字节2,位[6:3]-vvvv)——evex.vvvv的角色可以包括以下各项:1)evex.vvvv编码第一源寄存器操作数,其以反转(1s互补)形式指定,并且对于具有2个或更多源操作数的指令有效;2)evex.vvvv编码目的地寄存器操作数,其以1s互补形式针对某些矢量偏移而指定;或者3)evex.vvvv不编码任何操作数,字段反转并且应当包含1111b。因而,evex.vvvv字段1420编码以反转(1s互补)形式存储的第一源寄存器区分符的4个低阶位。取决于指令,额外的不同evex位字段用于将区分符大小扩展为32个寄存器。evex.u1368分类字段(evex字节2,位[2]-u)——如果evex.u=0,则其指示分类a或evex.u0;如果evex.u=1,则其指示分类b或evex.u1。前缀编码字段1425(evex字节2,位[1:00]-pp)——提供用于基础操作字段的附加位。除提供对于以evex前缀格式的传统sse指令的支持之外,这还具有以下益处:压紧simd前缀(而非要求字节来表述simd前缀,evex前缀仅要求2个位)。在一个实施例中,为了以传统格式和evex前缀格式二者支持使用simd前缀(66h、f2h、f3h)的传统sse指令,将这些传统simd前缀编码到simd前缀编码字段中;并且在运行时,在提供给解码器的pla之前扩展成传统simd前缀(因此,pla可以在没有修改的情况下执行这些传统指令的传统和evex格式二者)。尽管较新的指令可以直接地将evex前缀编码字段的内容用作操作码扩展,但是某些实施例出于一致性而以类似的方式扩展,但是允许由这些传统simd前缀指定不同含义。可替换实施例可以重新设计pla以支持2位simd前缀编码,并且因而不要求扩展。阿尔法字段1352(evex字节3,位[7]-eh;还称为evex.eh、evex.rs、evex.rl、evex.写入掩蔽控制和evex.n;还利用α图示)——如之前所述,该字段是内容特定的。贝塔字段1354(evex字节3,位[6:4]-ssss,还称为evex.s2-0、evex.r2-0、evex.rr1、evex.ll0、evex.llb;还利用βββ图示)——如之前所述,该字段是内容特定的。rex'字段1310——这是rex'字段的其余部分并且是evex.v'位字段(evex字节3,位[3]-v'),其可以用于编码经扩展的32寄存器集合中的高16个或低16个。该位以位反转格式存储。值1用于编码低16个寄存器。换言之,v'vvvv通过组合evex.v’、evex.vvvv而形成。写入掩蔽字段1370(evex字节3,位[2:0]-kkk)——其内容指定如之前所述的写入掩蔽寄存器中的寄存器的索引。在一个实施例中,特定值evex.kkk=000具有特定行为,其暗示没有写入掩蔽用于特定指令(这可以以各种方式实现,包括使用硬布线到所有那些的写入掩蔽或者绕过掩蔽硬件的硬件)。真实操作码字段1430(字节4)还称为操作码字节。操作码的部分在该字段中指定。modr/m字段1440(字节5)包括mod字段1442、reg字段1444和r/m字段1446。如之前所述,mod字段1442的内容在存储器访问和非存储器访问操作之间进行辨别。reg字段1444的角色可以总结为两种情况:编码目的地寄存器操作数或源寄存器操作数;或者视为操作码扩展并且不用于编码任何指令操作数。r/m字段1446的角色可以包括以下各项:编码引用存储器地址的执行操作数,或者编码目的地寄存器操作数或源寄存器操作数。缩放、索引、基础(sib)字节(字节6)——如之前所述,缩放字段1350的内容用于存储器地址生成。sib.xxx1454和sib.bbb1456——这些字段的内容之前已经关于寄存器索引xxxx和bbbb而提及。移位字段1362a(字节7-10)——当mod字段1442包含10时,字节7-10是移位字段1362a,并且其与传统32-位移位(disp32)相同地工作并且在字节粒度下工作。移位因子字段1362b(字节7)——当mod字段1442包含01时,字节7是移位因子字段1362b。该字段的位置与在字节粒度下工作的传统x86指令集8位移位(disp8)的位置相同。由于disp8经符号扩展,所以其仅可以在-128和127字节偏离之间进行寻址;在64字节缓存行方面,disp8使用8个位,其可以设置成仅四个真正有用的值-128、-64、0和64;由于通常需要较大范围,所以使用disp32;然而,disp32要求4个字节。相比于disp8和disp32,移位因子字段1362b是disp8的重新解译;当使用移位因子字段1362b时,实际移位通过移位因子字段的内容乘以存储器操作数访问的大小(n)来确定。这种类型的移位称为disp8*n。这减少了平均指令长度(用于移位但是具有大得多的范围的单个字节)。这样的经压缩的移位是基于以下假设:有效移位是存储器访问的粒度的倍数,并且因而不需要编码地址偏离的冗余低阶位。换言之,移位因子字段1362b替换传统x86指令集8位移位。因而,以与x86指令集8位移位相同的方式来编码移位因子字段1362b(所以没有modrm/sib编码规则中的改变),仅仅除了disp8过载成disp8*n以外。换言之,不存在编码规则或编码长度中的改变,而是仅存在通过硬件(其需要通过存储器操作数的大小对移位进行缩放以获得逐字节地址偏离)对移位值的解译中的改变。即时字段1372如之前所述那样进行操作。完整操作码字段图14b是图示了根据一个实施例的构成完整操作码字段1374的特定矢量友好指令格式1400的字段的框图。具体地,完整操作码字段1374包括格式字段1340、基础操作字段1342和数据元素宽度(w)字段1364。基础操作字段1342包括前缀编码字段1425、操作码映射字段1415和真实操作码字段1430。寄存器索引字段图14c是图示了根据本发明的一个实施例的构成寄存器索引字段1344的特定矢量友好指令格式1400的字段的框图。具体地,寄存器索引字段1344包括rex字段1405、rex'字段1410、modr/m.reg字段1444、modr/m.r/m字段1446、vvvv字段1420、xxx字段1454和bbb字段1456。扩增操作字段图14d是图示了根据本发明的一个实施例的构成扩增操作字段1350的特定矢量友好指令格式1400的字段的框图。当分类(u)字段1368包含0时,其标示evex.u0(分类a1368a);当它包含1时,其标示evex.u1(分类b1368b)。当u=0并且mod字段1442包含11时(标示无存储器访问操作),阿尔法字段1352(evex字节3,位[7]-eh)解译为rs字段1352a。当rs字段1352a包含1时(取整1352a.1),贝塔字段1354(evex字节3,位[6:4]-sss)解译为取整控制字段1354a。取整控制字段1354a包括一位sae字段1356和两位取整操作字段1358。当rs字段1352a包含0时(数据变换1352a.2),贝塔字段1354(evex字节3,位[6:4]-sss)解译为三位数据变换字段1354b。当u=0并且mod字段1442包含00、01或10时(标示存储器访问操作),阿尔法字段1352(evex字节3,位[7]-eh)解译为逐出提示(eh)字段1352b并且贝塔字段1354(evex字节3,位[6:4]-sss)解译为三位数据操控字段1354c。当u=1时,阿尔法字段1352(evex字节3,位[7]-eh)解译为写入掩蔽控制(z)字段1352c。当u=1并且mod字段1442包含11时(标示无存储器访问操作),贝塔字段1354的部分(evex字节3,位[4]-s0)解译为rl字段1357a;当它包含1时(取整1357a.1),贝塔字段1354的其余部分(evex字节3,位[6:4]-s2-1)解译为取整操作字段1359a,而当rl字段1357a包含0时(vsize1357.a2),贝塔字段1354的其余部分(evex字节3,位[6:4]-s2-1)解译为矢量长度字段1359b(evex字节3,位[6:5]-l1-0)。当u=1并且mod字段1442包含00、01或10时(标示存储器访问操作),贝塔字段1354(evex字节3,位[6:4]-sss)解译为矢量长度字段1359b(evex字节3,位[6:5]-s1-0)和广播字段1357b(evex字节3,位[4]-b)。示例性寄存器架构图15是根据一个实施例的寄存器架构1500的框图。在所图示的实施例中,存在为512位宽的32个矢量寄存器1510;这些寄存器称为zmm0到zmm31。低16个zmm寄存器的低阶256位叠覆在寄存器ymm0-16上。低16个zmm寄存器的低阶128位(ymm寄存器的低阶128位)叠覆在寄存器xmm0-15上。特定矢量友好指令格式1400在如以下表格2中图示的这些叠覆的寄存器文件上进行操作。表2-寄存器文件换言之,矢量长度字段1359b在最大长度以及一个或多个其它较短长度之间进行选择,其中每一个这样的较短长度是之前长度的一半长度;并且没有矢量长度字段1359b的指令模板在最大矢量长度上操作。另外,在一个实施例中,特定矢量友好指令格式1400的分类b指令模板在打包或标量单精度/双精度浮点数据以及打包或标量整数数据上进行操作。标量操作是在zmm/ymm/xmm寄存器中的最低阶数据元素位置上执行的操作;较高阶数据元素位置与它们在指令之前相同地在左边或者取决于实施例而归零。写入掩蔽寄存器1515——在所图示的实施例中,存在8个写入掩蔽寄存器(k0到k7),每一个在大小上为64位。在可替换实施例中,写入掩蔽寄存器1515在大小上为16位。如之前所述,在本发明的一个实施例中,矢量掩蔽寄存器k0不能用作写入掩蔽;当正常将指示k0的编码用于写入掩蔽时,其选择硬布线写入掩蔽0xffff,从而有效地禁用用于该指令的写入掩蔽。通用寄存器1525——在所图示的实施例中,存在十六个64位通用寄存器,其连同现有x86寻址模式而用于对存储器操作数进行寻址。这些寄存器通过名称rax、rbx、rcx、rdx、rbp、rsi、rdi、rsp以及r8到r15来引用。在其上别名为mmx打包整数平坦寄存器文件1550的标量浮点数栈寄存器文件(x87栈)1545——在所图示的实施例中,x87栈是用于使用x87指令集扩展在32/64/80位浮点数据上执行标量浮点数操作的八元素栈;而mmx寄存器用来在64位打包整数数据上执行操作,以及针对在mmx和xmm寄存器之间执行的一些操作而保持操作数。可替换实施例可以使用更宽或更窄的寄存器。附加地,可替换实施例可以使用更多、更少或不同的寄存器文件和寄存器。在前述说明书中,已经参照其具体示例性实施例描述了本发明。然而,将清楚的是,可以对其做出各种修改和改变,而不脱离如在随附权利要求中阐述的本发明的宽泛精神和范围。相应地,说明书和附图要视为说明性含义而非约束性含义。本文所述的指令可以是指硬件的具体配置,诸如配置成执行某些操作或者具有存储在非暂时性计算机可读介质中所体现的存储器中的预确定功能性或软件指令的专用集成电路(asic)。这样的电子设备使用计算机机器可读介质存储和传达(内部地和/或通过网络与其它电子设备)代码和数据,所述计算机机器可读介质诸如非暂时性计算机机器可读存储介质(例如,磁盘;光学盘;随机存取存储器;只读存储器;闪速存储器设备;相变存储器)以及暂时性计算机机器可读通信介质(例如,电气、光学、声学或其它形式的传播信号——诸如载波、红外信号、数字信号等)。此外,这样的电子设备典型地包括耦合到一个或多个其它组件的一个或多个处理器的集合,所述一个或多个其它组件诸如一个或多个存储设备(非暂时性机器可读存储介质)、用户输入/输出设备(例如,键盘、触摸屏和/或显示器)以及网络连接。处理器的集合与其它组件的耦合典型地是通过一个或多个总线和桥(还称为总线控制器)。承载网络业务量的存储设备和信号分别表示一个或多个机器可读存储介质和机器可读通信介质。因而,给定电子设备的存储设备典型地存储代码和/或数据以供在该电子设备的一个或多个处理器的集合上执行。当然,本发明的实施例的一个或多个部分可以使用软件、固件和/或硬件的不同组合来实现。遍及该详细描述,出于解释的目的,阐述了众多具体细节以便提供本发明的透彻理解。然而,本领域技术人员将清楚的是,本发明可以在没有这些具体细节中的一些的情况下实践。在某些实例中,没有以详尽的细节描述公知的结构和功能以便避免使本发明的主题模糊。相应地,本发明的精神和范围应当按照所附的权利要求来判定。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1