三源操作数浮点加法处理器、方法、系统和指令与流程

文档序号:13145080阅读:181来源:国知局
技术领域本文中描述的实施例一般涉及处理器。具体来说,本文中描述的实施例一般涉及用于响应于指令将浮点数相加的处理器。

背景技术:
处理器、计算机系统和其它电子装置中普遍使用浮点数。浮点数的一个优点是,它们允许用相对紧凑的数值格式和/或多个位来表示广泛范围的数值。浮点数可将它们的位摊派到若干个组成字段中,这些组成字段称为浮点数的符号、有效数和指数。符号、有效数、基数和指数的关系如下:A=(-1)符号*有效数*基数指数表达式“(-1)符号”表示(-1)的符号次幂。该表达式评估浮点数是正数(+)还是负数(-)。例如,当符号是整数0时,浮点数是正数,或者当符号是整数1时,浮点数是负数。有效数包括具有在很大程度上决定浮点数的精度的长度的数字串。有效数有时又称为有效数字、系数、小数或尾数。通常隐含地假设小数点(例如,十进制格式的十进制小数点或二进制格式的二进制小数点)位于固定位置(例如,刚好在有效数的最左边数字或最高有效数字的右边,在一些情况下,这是隐含的)。二进制中的示例有效数可以是“1.10010010000111111011011”。小数点右边的有效数的数字(例如,“10010010000111111011011”)可表示小数位。表达式“基数指数”表示基数的指数次幂。基数通常是基数2(对于二进制)、基数10(对于十进制)、或基数16(对于十六进制)。基数有时称为底数。指数(exponent)有时又称为指数(characteristic)或阶(scale)。在基数上加指数次幂实际上将小数点(例如,从隐含的或假设的起始位置)偏移指数个数字。如果指数是正数,那么小数点向右偏移,或者如果指数是负数,那么小数点向左偏移。电气和电子工程师协会(IEEE)在标准IEEE754中对若干种不同的浮点格式进行了标准化。有代表性的是,单精度浮点格式具有32位,它包括位[22:0]中的23位有效数、位[30:23]中的8位指数和位[31]中的1位符号。双精度浮点格式具有64位,它包括位[51:0]中的52位有效数、位[62:52]中的11位指数和位[63]中的1位符号。其它浮点格式在本领域中也是已知的,例如半精度浮点、扩展型双精度浮点和四倍精度浮点格式。如果需要,关于浮点数和格式的进一步细节可参考IEEE754。附图说明通过参考以下描述和用于说明实施例的附图,可最好地理解本发明。图中:图1是可进行操作以便执行三源浮点加法指令的实施例的处理器的实施例的框图。图2是用于执行三源浮点加法指令的实施例的方法的实施例的流程框图。图3是封装(packed)三源浮点可选屏蔽加法操作的实施例的框图。图4是标量三源浮点可选屏蔽加法操作的实施例的框图。图5是封装三源浮点可选屏蔽可选求反控制加法操作的实施例的框图。图6是标量三源浮点可选屏蔽可选求反控制加法操作的实施例的框图。图7是三源浮点加法器的实施例的框图。图8是串联耦合在一起的一对两源浮点加法器的实施例的框图。图9是具有耦合输出端和输入端的再循环路径的两源浮点加法器的实施例的框图。图10是三源浮点加法指令的合适指令格式的实施例的框图。图11是封装数据寄存器的合适集合的实施例的框图。图12是示出掩码位的数量取决于封装数据宽度和数据元素宽度的表。图13是操作掩码寄存器的合适集合的实施例的框图。图14A-14B是示出根据本发明的实施例的通用向量友好指令格式及其指令模本的框图。图15A是示出根据本发明的实施例的示例性特定向量友好指令格式的框图。图15B是示出根据本发明一个实施例构成完整操作码字段的特定向量友好指令格式的字段的框图。图15C是示出根据本发明一个实施例构成寄存器索引字段的特定向量友好指令格式的字段的框图。图15D是示出根据本发明一个实施例构成扩增操作字段的特定向量友好指令格式的字段的框图。图16是寄存器体系结构的实施例的框图。图17A是示出有序管线的实施例和寄存器重命名无序发出/执行管线的实施例的框图。图17B是示出包括耦合到执行引擎单元的前端单元的处理器核的实施例的框图,其中前端单元和执行引擎单元均耦合到存储器单元。图18A是单个处理器核以及它到管芯上互连网络的连接和它的2级(L2)高速缓存的本地子集的实施例的框图。图18B是图18A的处理器核的部分的展开图的实施例的框图。图19是可具有多于一个核、可具有集成式存储器控制器、并且可具有集成式图形的处理器的实施例的框图。图20是计算机体系结构的第一实施例的框图。图21是计算机体系结构的第二实施例的框图。图22是计算机体系结构的第三实施例的框图。图23是计算机体系结构的第四实施例的框图。图24是根据本发明的实施例利用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。具体实施方式本文中公开三源操作数浮点加法指令、用于执行这些指令的处理器、在处理或执行这些指令时由处理器执行的方法、以及并入用于处理或执行这些指令的一个或多个处理器的系统。在以下描述中,阐述了众多具体细节(例如,特定指令操作、数据格式、处理器配置、微体系结构细节、操作序列等)。但是,没有这些具体细节也可实践实施例。在其它情况下,没有详细示出公知的电路、结构和技术,以免使本发明变得模糊。图1是可进行操作以便执行三源浮点加法指令102的实施例的处理器100的实施例的框图。在一些实施例中,处理器可以是通用处理器(例如,在桌面型计算机、膝上型计算机或其它计算机中常用的类型)。备选地,处理器可以是专用处理器。合适的专用处理器的示例包括但不限于图形处理器、网络处理器、通信处理器、密码处理器、协处理器、嵌入式处理器、数字信号处理器(DSP)和控制器(例如,微控制器)。处理器可以是以下处理器中的任一处理器:各种复杂指令集计算(CISC)处理器、各种精简指令集计算(RISC)处理器、各种超长指令字(VLIW)处理器、其各种混合、或其它类型的处理器。在操作期间,处理器100可接收三源浮点加法指令102的实施例。例如,可从指令提取单元、指令队列等接收三源浮点加法指令。三源浮点加法指令可代表宏指令、汇编语言指令、机器代码指令或处理器的指令集的指令或控制信号。在一些实施例中,三源浮点加法指令可明确地指定(例如,通过一个或多个字段或位的集合)或以其它方式指示(例如,隐含地指示、可通过仿真寄存器映射映射到该寄存器等)具有至少第一浮点数据元素的第一源操作数112,可指定或以其它方式指示具有至少第二浮点数据元素的第二源操作数114,可指定或以其它方式指示具有至少第三浮点数据元素的第三源操作数116,并且可指定或以其它方式指示用于存储结果118的目的地操作数(例如,目的地存储位置)。再次参考图1,处理器包括解码单元或解码器104。解码单元可接收并解码三源浮点加法指令102。解码单元可输出反映、代表三源浮点加法指令和/或从三源浮点加法指令导出的一个或多个微指令、微操作、微代码入口点、解码指令或控制信号、或其它相对较低级的指令或控制信号。这一个或多个较低级指令或控制信号可通过一个或多个较低级(例如,电路级或硬件级)操作实现较高级三源浮点加法指令。在一些实施例中,解码单元可包括:用于接收指令的一个或多个输入结构(例如,端口、互连、接口等);与输入结构耦合以便接收、识别指令并将指令解码为这一个或多个对应的较低级指令或控制信号的指令识别和解码逻辑;以及与指令识别和解码逻辑耦合以便输出这一个或多个对应的较低级指令或控制信号的一个或多个输出结构(例如,端口、互连、接口等)。解码单元可利用各种不同的机制来实现,包括但不限于微代码只读存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)和本领域中已知的其它机制。在一些实施例中,并非将三源浮点加法指令直接提供给解码单元,而是可以可选地使用指令仿真器、转译器、变形器、解释器或其它指令转换模块。各种不同类型的指令转换模块在本领域中已知,它们可以用软件、硬件、固件或其组合来实现。在一些实施例中,指令转换模块可设置在指令处理的处理器的外部,例如位于独立管芯上和/或位于存储器中(例如,作为静态、动态或例行程序指令仿真模块)。举例来说,指令转换模块可接收具有第一指令集的三源浮点加法指令,并且可将该三源浮点加法指令仿真、转译、变形、解释或以其它方式转换为可具有不同的第二指令集的一个或多个对应的或导出的中间指令或控制信号。可将第二指令集的这一个或多个中间指令或控制信号提供给解码单元,解码单元可将接收的第二指令集的这一个或多个指令或控制信号解码为可由处理器的本机硬件(例如,一个或多个执行单元)执行的一个或多个较低级指令或控制信号。处理器还包括寄存器110的集合。每个寄存器可代表可进行操作以便存储浮点数据的管芯上存储位置。举例来说,寄存器可以是可进行操作以便存储浮点数据元素的浮点寄存器、可进行操作以便存储封装或标量浮点数据元素的封装数据寄存器等。寄存器可代表对于软件和/或程序设计员可见的体系结构或体系结构可见的寄存器(例如,体系结构寄存器文件),和/或是由处理器的指令集的指令指示以便标识操作数的寄存器。这些体系结构寄存器与给定微体系结构中的其它非体系结构或非体系结构可见的寄存器(例如,临时寄存器、记录缓冲器、引退寄存器等)形成对比。可在不同微体系结构中利用公知的技术以不同方式实现寄存器,并且寄存器不限于任何特定类型的电路。合适类型的寄存器的示例包括但不限于专用物理寄存器、利用寄存器重命名的动态分配的物理寄存器、及其组合。在一些实施例中,第一源操作数112可以可选地存储在集合的第一寄存器中,第二源操作数114可以可选地存储在集合的第二寄存器中,第三源操作数116可以可选地存储在集合的第三寄存器中,并且目的地操作数可以可选地存储在集合的第四寄存器中。在一些情况下,用于目的地操作数的寄存器可不同于用于第一、第二和第三源操作数的寄存器。在其它情况下,用于源操作数之一的寄存器可再用于目的地操作数(例如,可将结果覆写在源操作数之一上)。备选地,可以可选地对这些操作数中的一个或多个操作数使用存储器位置或其它存储位置。再次参考图1,执行单元106与解码单元104和寄存器110的集合耦合。在一些实施例中,执行单元还可与可选的封装数据操作掩码寄存器120和/或可选的封装数据操作掩码122耦合,这些将在下文进一步描述,但这不是必需的。执行单元可接收代表三源浮点加法指令和/或从三源浮点加法指令导出的这一个或多个经过解码或以其它方式转换的指令或控制信号。执行单元还可接收具有至少第一浮点数据元素的第一源操作数112、具有至少第二浮点数据元素的第二源操作数114和具有至少第三浮点数据元素的第三源操作数116。执行单元可响应于三源浮点加法指令和/或作为三源浮点加法指令的结果(例如,响应于从指令直接或间接(例如,通过仿真)解码的一个或多个指令或控制信号)进行操作以便将结果118存储在由指令指示的目的地操作数中。在一些实施例中,结果可至少包括对应于第一、第二和第三浮点数据元素的结果浮点数据元素。在一些实施例中,结果浮点数据元素可包括至少第一浮点舍入和(roundedsum)。第一浮点舍入和是浮点数,并且在合适时,利用浮点舍入法进行了舍入。在一些实施例中,第一浮点舍入和可代表第二浮点舍入和与第三浮点数据元素的加性组合。在一些实施例中,第二浮点舍入和可代表第一浮点数据元素与第二浮点数据元素的加性组合。在一些实施例中,结果可以是针对图3-6中的任一图示出和描述的任何结果,但是本发明的范围不限于此。为清楚起见,如本文中所使用,使用第一值和第二值的术语“加性组合”来表示允许不对第一和第二值中的任一个值求反、对第一和第二值中的任一个值或两个值求反的和。例如,第二浮点舍入和与第三浮点数据元素的加性组合可包括第三浮点数据元素加上第二浮点舍入和的和、或第二浮点舍入和加上第三浮点数据元素的负数的和。同样地,第一和第二浮点数据元素的加性组合可包括第一浮点数据元素加上第二浮点数据元素的和、第一浮点数据元素加上第二浮点数据元素的负数的和、第一浮点数据元素的负数加上第二浮点数据元素的负数的和、或第一浮点数据元素的负数加上第二浮点数据元素的和。如下文将进一步解释,一些但非所有实施例可以可选地允许在加法之前可选地对数据元素中的任一个、两个或所有数据元素求反,但这不是必需的(例如,另一个实施例不允许这种求反能力)。有利地,三源浮点加法指令可在执行单个指令(例如,宏指令、指令集的指令等)的范围内执行两次加法。照惯例,需要两个不同的指令。以一个指令执行两次加法的能力往往会提供某些性能和/或功率益处。首先,两次加法均可通过解码单个指令而不是解码两个独立指令来执行。这可有助于通过空出另一个指令的解码时隙来增加指令解码吞吐量。这还有助于降低功耗量,因为可以少解码一个指令来实现这两次加法。也可通过避免将这两次加法之一的中间和写入到体系结构寄存器并避免从体系结构寄存器随后读取中间和以便执行第二次加法来实现性能改善。进出体系结构寄存器的这些写入和读取一般会招致另外的时间或等待时间(例如,大约几个时钟周期)。这还有助于避免捆绑体系结构寄存器,并有助于减少寄存器重命名操作的数量。消除读取、写入和寄存器重命名操作还有助于降低功耗。对于某些处理器,降低功耗本身可导致性能增加,因为某些处理器(例如,尤其是用于高性能计算的处理器)往往具有变成受到可用功耗范围限制的性能。因此,降低功耗也可导致性能增加。当浮点操作(例如,浮点加法)的准确结果需要比有效数中有的数字更多的数字时,可使用浮点舍入。在一些实施例中,结果可反映两个不同的浮点舍入操作,而不是单个浮点舍入操作。具体来说,可对涉及第一和第二浮点数据元素的和执行第一初始浮点舍入操作以便生成第一舍入和,然后可对第三浮点数据元素和第一舍入和的和执行第二个随后的浮点舍入操作。如下文将进一步解释,这两个浮点舍入操作可反映指令的微体系结构实现。例如,在一些实施例中,用于实现指令的微体系结构可使用不能将三个浮点值同步相加的逻辑。作为一个示例,如下文将进一步解释,可串联地使用两个浮点加法器,并且每个加法器执行只有两个浮点值的同步相加。例如,在第一加法器中,可执行两个浮点值的求和,接着可对该和执行第一浮点舍入操作,然后在第二加法器中,可执行第三浮点值和舍入和的求和,接着可对第二加法器的和输出执行第二舍入操作。作为另一个示例,如下文将进一步解释,可与再循环一起使用单个浮点加法器,并且在每个循环或每次穿过加法器期间,可执行只有两个浮点值的同步相加。例如,在第一次穿过时,可执行两个浮点值的求和,接着可对该和执行第一浮点舍入操作;然后,在第二次穿过时,可执行第三浮点值和来自第一次穿过时的舍入和的求和,接着可对第二次穿过时的加法器的输出执行第二舍入操作。如下文将进一步解释,对于这些微体系结构实现存在多个优点,例如避免需要包含专用和/或一般大型或复杂的逻辑来执行三个浮点值的同步相加。涉及这两个浮点舍入操作的结果可与执行单个舍入操作时略有不同,它们反映这些微体系结构实现。在一些实施例中,可对进行的两次舍入使用相同类型的舍入操作或舍入模式。不同类型的舍入操作或舍入模式适合于各种实施例。合适的舍入模式的示例包括但不限于以下:(1)舍入到最接近的值,优先取偶数值(roundtonearestwithtiestoeven);(2)向下向负无穷大舍入;(3)向上向正无穷大舍入;以及(4)通过截断向0舍入(roundtowardzerowithtruncate)。在一些实施例中,三源浮点加法指令可支持指令本身内的嵌入式舍入模式控制,但这不是必需的。照惯例,一般在浮点控制和状态寄存器(例如,MXCSR)中指定舍入模式控制。一些指令能够经由立即操作数内的编码字段提供每个指令舍入优先。在一些实施例中,可在立即数的外部通过指令的编码提供每个指令舍入模式优先控制。作为一个示例,在一些实施例中,舍入模式控制可作为静态或每个指令舍入模式优先控制嵌入在前缀(例如,EVEX前缀)中。这可允许程序设计员静态地应用可覆盖(override)浮点控制和状态寄存器(例如,MXCSR)中的舍入模式的特定舍入模式。在一些实施例中,当通过指令编码提供这种舍入模式控制时,可以可选地暗指抑制报告所有浮点异常。抑制报告所有浮点异常都会出现,而不论或不管浮点控制和状态寄存器(例如,MXCSR)中的抑制或不抑制报告对应浮点异常的任何特定掩码位。抑制报告这些浮点异常可意味着,当出现这些浮点异常时,不会更新浮点控制和状态寄存器(例如,MXCSR)中的位或标志(例如,可不报告它们)。再次参考图1,执行单元106和/或处理器100可包括特殊或特定逻辑(例如,晶体管、集成电路、或可能与固件(例如,存储在非易失性存储器中的指令)和/或软件组合的其它硬件),它可进行操作以便执行三源浮点加法指令,和/或响应于三源浮点加法指令和/或作为三源浮点加法指令的结果(例如,响应于从三源浮点加法指令解码或以其它方式导出的一个或多个指令或控制信号)存储结果。执行单元可包括浮点加法逻辑108。举例来说,执行单元和/或浮点加法逻辑可包括浮点加法器、浮点混合乘法器-加法器(FMA)、浮点算术单元、浮点算术逻辑单元等。在一些实施例中,执行单元可包括用于接收源操作数的一个或多个输入结构(例如,端口、互连、接口等)、与输入结构耦合以便接收和处理源操作数并生成结果的浮点加法电路或逻辑、以及与浮点加法电路或逻辑耦合以便输出结果的一个或多个输出结构(例如,端口、互连、接口等)。在一些实施例中,执行单元可包括针对图7-9中的任何一个或多个图示出和描述的电路或逻辑,它们是合适的微体系结构布置的说明性示例,但是本发明的范围不限于此。为了避免使本描述模糊,示出和描述了相对简单的处理器100。在其它实施例中,处理器可以可选地包括其它公知的处理器组件。这些组件的可能示例包括但不限于指令提取单元、指令和数据高速缓存、第二级或更高级高速缓存、无序执行逻辑、指令调度单元、寄存器重命名单元、引退单元、总线接口单元、指令和数据转译后备缓冲器、预取缓冲器、微指令队列、微指令定序器、包含在处理器中的其它组件、及其各种组合。这些组件的众多不同组合和配置都是合适的。实施例不限于任何已知的组合或配置。此外,实施例可包含在处理器中,这些处理器具有多个核、逻辑处理器或执行引擎,其中至少一个具有解码单元和执行单元以便执行三源浮点加法指令的实施例。图2是用于执行三源浮点加法指令的实施例的方法225的实施例的流程框图。在各种实施例中,该方法可由处理器、指令处理设备或其它数字逻辑装置来执行。在一些实施例中,图2的操作和/或方法可由图1的处理器执行和/或在图1的处理器内执行。本文中针对图1的处理器描述的组件、特征和特定的可选细节同样可选地适用于图2的操作和/或方法。备选地,图2的操作和/或方法可由类似或不同的处理器或设备执行,和/或可在类似或不同的处理器或设备内执行。此外,图1的处理器可执行与图2的操作和/或方法相同、类似或不同的操作和/或方法。该方法包括:在框226,接收三源浮点加法指令。在各个方面中,可在处理器、指令处理设备或其一部分(例如,指令提取单元、解码单元、总线接口单元等)中接收指令。在各个方面中,可从管芯外来源(例如,从存储器、互连等)或从管芯上来源(例如,从指令高速缓存、指令队列等)接收指令。三源浮点加法指令可指定或以其它方式指示具有至少第一浮点数据元素的第一源操作数,指定或以其它方式指示具有至少第二浮点数据元素的第二源操作数,并可指定或以其它方式指示具有至少第三浮点数据元素的第三源操作数。在框227,响应于三源浮点加法指令和/或作为三源浮点加法指令的结果,将结果存储在目的地操作数中。目的地操作数可由三源浮点加法指令指定或以其它方式指示。代表性地,执行单元、指令处理设备或处理器可执行指令并存储结果。结果可至少包括对应于第一、第二和第三浮点数据元素的结果浮点数据元素。结果浮点数据元素可包括第一浮点舍入和。在一些实施例中,第一浮点舍入和可表示第二浮点舍入和与第三浮点数据元素的加性组合。在一些实施例中,第二浮点舍入和可表示第一浮点数据元素与第二浮点数据元素的加性组合。在一些实施例中,结果可以是针对图3-6中的任意一个图示出和描述的结果中的任意一个结果,但是本发明的范围不限于此。所示方法涉及体系结构操作(例如,从软件角度可见的操作)。在其它实施例中,该方法可以可选地包括一个或多个微体系结构操作。举例来说,可提取、解码指令,可访问源操作数,执行单元可执行微体系结构操作以便实现指令,等等。在一些实施例中,用于实现指令的微体系结构操作可以可选地包括针对图3-6或7-9中任一图示出和描述的任何一个微体系结构操作。例如,在一些实施例中,可以可选地将第二浮点舍入和从第一浮点加法器提供给第二浮点加法器。作为另一个示例,在一些实施例中,第二浮点舍入和可以可选地从浮点加法器的输出端再循环到浮点加法器的输入端。图3是示出可响应于封装三源浮点可选屏蔽加法指令的实施例执行的封装三源浮点可选屏蔽加法操作330的实施例的框图。该指令可指定(例如,明确地指定)或以其它方式指示(例如,隐含地指示)第一源封装数据操作数312、第二源封装数据操作数314和第三源封装数据操作数316。第一源封装数据操作数可具有多个第一封装浮点数据元素A1-AN。第二源封装数据操作数可具有多个第二封装浮点数据元素B1-BN。第三源封装数据操作数可具有多个第三封装浮点数据元素C1-CN。在操作数内的对应的相对位置中,第一源封装数据操作数中的每个数据元素可对应于第二源封装数据操作数中的不同数据元素,并对应于第三源封装数据操作数中的不同数据元素。例如,A1、B1和C1可彼此对应,AN、BN和CN可彼此对应,依此类推。通常,每个源封装数据操作数中的浮点数据元素的数量可等于源封装数据操作数的位大小除以每个浮点数据元素的位大小。在各种实施例中,每个源封装数据操作数的宽度可以是64位、128位、256位、512位或1024位,但本发明的范围不限于此。在各种实施例中,每个浮点数据元素可以是16位半精度浮点数据元素、32位单精度浮点数据元素、64位双精度浮点数据元素、80位双倍扩展精度格式或128位四倍精度浮点格式。在一些实施例中,由于当前广泛使用,所以可以支持32位单精度或64位双精度格式。其它封装数据操作数大小和数据元素宽度也是合适的。在各种实施例中,每个源封装数据操作数中可存在至少两个、至少四个、至少八个或多于八个浮点数据元素。再次参考图3,如图所示,在一些实施例中,指令还可可选地指定或以其它方式指示源封装数据操作掩码322,但这不是必需的。封装数据操作掩码在本文中又可简称为操作掩码、预测掩码或掩码。源封装数据操作掩码可具有多个掩码元素M1-MN。每个掩码元素可对应于操作数内的对应的相对位置中的源数据元素和/或结果数据元素。例如,M1可对应于A1、B1和C1。源封装数据操作掩码可表示掩码操作数、预测操作数或条件控制操作数,它可用于预测、有条件地控制或屏蔽是否执行对应的封装数据操作和/或是否存储对应结果。在一些实施例中,屏蔽或预测可以按每个数据元素的粒度,以使得可以彼此分开和/或独立地预测或有条件地控制三个对应数据元素的不同集合上的操作。掩码可包括多个掩码元素、预测元素或条件控制元素。在一个方面中,可与三个源数据元素和/或对应的结果数据元素的对应集合一一对应地包含掩码元素。如图所示,在一些实施例中,每个掩码元素可以是单个掩码位。在这些情况下,掩码可对于第一源封装数据操作数中的每个数据元素和/或结果封装数据318中的每个结果数据元素具有一个位。每个掩码位的值可控制是否执行对应的封装数据操作和/或是否存储对应的结果数据元素。每个掩码位可具有允许在三源数据元素的对应集合上执行操作并允许将对应结果数据元素存储在结果封装数据中的第一值,或者可具有不允许在三源数据元素的对应集合上执行操作和/或不允许将对应结果数据元素存储在结果封装数据中的第二不同值。根据一个可能的惯例,如图示中所示,清空为二进制零(即,0)的掩码位可表示屏蔽操作,其中将屏蔽值、而不是将操作的结果存储在对应的结果数据元素中。相反,设置成二进制一(即,1)的掩码位可表示未屏蔽操作,其中可将操作的结果存储在对应的结果数据元素中。在其它实施例中,可使用相反的惯例,或者可以可选地对每个掩码元素使用两个或两个以上位(例如,每个掩码元素可具有与每个对应的源数据元素相同数量的位,并且可利用一个或多个最高或最低有效位来进行预测)。操作330的实施例可响应于指令的实施例和/或作为指令的实施例的结果执行。在可选地使用封装数据操作掩码322的实施例中,可执行该操作以便经受可选的源封装数据操作掩码的屏蔽、预测或条件控制。响应于指令,可生成(例如,通过执行单元)结果封装数据318,并将它存储在目的地存储位置中。目的地存储位置可由指令指定或以其它方式指示。在各种实施例中,目的地存储位置可以是封装数据寄存器、存储器位置或其它存储位置。结果封装数据可包括多个数据元素,每个数据元素对应于三源数据元素的不同集合和不同的对应掩码元素。在使用可选的封装数据操作掩码的实施例中,对应于未屏蔽掩码元素的结果数据元素可具有取决于在三源浮点数据元素的对应集合上执行的操作的值。在所示示例中,最右边的结果数据元素对应于未屏蔽操作,它存储取决于在来自第一、第二和第三源封装数据操作数的三源浮点数据元素的对应集合上执行的对应的封装数据操作的值。具体来说,在一些实施例中,最右边的结果浮点数据元素可存储第一浮点舍入和(例如,RND1(C1+RND2(A1+B1)))。第一浮点舍入和可表示第二浮点舍入和(例如,RND2(A1+B1))与第三浮点数据元素(例如,C1)的加性组合。第二浮点舍入和(例如,RND2(A1+B1))可表示第一浮点数据元素(例如,A1)与第二浮点数据元素(例如,B1)的加性组合。加性组合允许可选地或潜在地对源数据元素(例如,A1、B1和/或C1中的任何一个或多个)求反。在该示例中,利用RND1和RND2来指定两个独立的顺序采用的浮点舍入操作(例如,在RND1之前执行RND2)。相反,在使用可选的封装数据操作掩码322的实施例中,对应于屏蔽掩码元素的结果数据元素可具有不取决于在源数据元素的对应对上执行的操作的值。而是,这些结果数据元素可具有屏蔽的值(例如,固定或预定值)。例如,要么无需执行对应操作,或者如果执行对应的操作,那么无需将对应结果存储在结果封装数据中。而是,可将屏蔽的值(例如,固定或预定值)存储在对应的结果数据元素中。在所示示例中,第N个掩码元素MN是屏蔽的值(例如,在此情况下为二进制零)。因此,对应的最左边的结果数据元素具有屏蔽的值。特定的屏蔽值可取决于用于特定实现的屏蔽的类型。在一些实施例中,可使用归零屏蔽。在归零屏蔽中,可将屏蔽的结果数据元素归零(例如,迫使其具有值零)。在其它实施例中,可使用合并屏蔽。在合并屏蔽中,屏蔽的结果数据元素可具有对应的源数据元素之一的值(例如,可将对应的源数据元素一直传递到屏蔽的结果数据元素)。例如,最左边的结果数据元素可具有AN、BN或CN之一的值。在其它实施例中,可屏蔽或不屏蔽其它结果数据元素。图4是示出可响应于标量三源浮点可选屏蔽加法指令的实施例执行的标量三源浮点可选屏蔽加法操作432的实施例的框图。图4的标量操作具有与图3的封装操作的某些相似性。为了避免使本描述模糊,将主要描述图4的标量操作的不同和/或另外特性,而不重复相对于图3的封装操作的所有可选地类似或共同的特性和细节。但是,应明白,除非另外指出或以其它方式明确表示,否则除了关于每个操作数中存在多个数据元素的方面之外,之前描述的图3的封装操作的特性和细节也可可选地适用于图4的标量操作。该指令可指定(例如,明确地指定)或以其它方式指示(例如,隐含地指示)第一源操作数412、第二源操作数414和第三源操作数416。第一源操作数可具有第一浮点数据元素A。第二源操作数可具有第二浮点数据元素B。第三源操作数可具有第三浮点数据元素C。数据元素A、B和C可彼此对应。上文针对图3提及的之前提到的浮点数据元素类型也是合适的。在一些实施例中,数据元素A、B和C可以用标量格式存储在相应的封装数据寄存器中。封装数据寄存器可具有大于浮点数据元素A、B和C的位宽度。例如,在各种实施例中,每个封装数据寄存器的宽度可以是64位、128位、256位、512位或1024位,但本发明的范围不限于此。在一个特定示例中,可使用128位封装数据寄存器,但这不是必需的。除了标量浮点数据元素A、B和C以外,封装数据寄存器还能够存储封装数据。再次参考图4,如图所示,在一些实施例中,指令还可可选地指定或以其它方式指示源操作掩码422,但这不是必需的。源操作掩码可具有掩码元素M。掩码元素M可对应于源数据元素A、B和C。掩码元素M还可对应于结果418中的相同的相对位置中的结果数据元素。源操作掩码可具有如之前针对图3的源封装数据操作掩码描述的类似属性和变化,主要的不同之处在于,存在单个而不是多个掩码元素。在该示例实施例中,掩码元素未屏蔽(例如,M=1)。在一些实施例中,即使只存在对应标量元素的单个集合,仍可使用源操作掩码。操作432的实施例可响应于指令的实施例和/或作为指令的实施例的结果执行。在可选地使用操作掩码422的实施例中,可执行该操作以便经受可选的源操作掩码的屏蔽、预测或条件控制。响应于指令,可生成(例如,通过执行单元)结果418,并将它存储在目的地存储位置中。目的地存储位置可由指令指定或以其它方式指示。在各种实施例中,目的地存储位置可以是寄存器、存储器位置或其它存储位置。结果可包括对应于源浮点数据元素A、B和C以及掩码元素M的结果浮点数据元素。在所示示例中,由于掩码元素未屏蔽(例如,M=1),所以结果数据元素存储取决于在源浮点数据元素A、B和C的对应集合上执行的操作的值。具体来说,在一些实施例中,结果浮点数据元素可存储第一浮点舍入和(例如,RND1(C+RND2(A+B)))。第一浮点舍入和可表示第二浮点舍入和(例如,RND2(A+B))与第三浮点数据元素(例如,C)的加性组合。第二浮点舍入和(例如,RND2(A+B))可表示第一浮点数据元素(例如,A)与第二浮点数据元素(例如,B)的加性组合。加性组合允许可选地或潜在地对A、B和C中的任何一个或多个求反。RND1和RND2用于指定两个独立的顺序采用的浮点舍入操作。在备选示例中,如果掩码元素进行了屏蔽(例如,如果M=0),那么结果数据元素可改为存储屏蔽的值(例如,固定或预定值)。之前描述的针对图3提到的屏蔽的值是合适的(例如,在归零屏蔽的情况下为0,或者在合并屏蔽的情况下为A、B或C)。图5是示出可响应于封装三源浮点可选屏蔽可选求反控制加法指令的实施例执行的封装三源浮点可选屏蔽可选求反控制加法操作534的实施例的框图。图5的可选求反控制操作具有与图3的操作的某些相似性。为了避免使该描述模糊,将主要描述图5的可选求反控制操作的不同和/或另外特性,而不重复相对于图3的操作的所有可选地类似或共同的特性和细节。但是,将明白,除非另外指出或以其它方式明确表示,之前描述的图3的操作的特性和细节也可可选地适用于图5的可选求反控制操作。该指令可指定或以其它方式指示具有浮点数据元素A1-AN的第一源封装数据操作数512、具有浮点数据元素B1-BN的第二源封装数据操作数514和具有浮点数据元素C1-CN的第三源封装数据操作数516。源封装数据操作数和数据元素可具有如之前(例如,如图3)所描述的特征和变化。在一些实施例中,指令还可可选地指定或以其它方式指示源封装数据操作掩码522,但这不是必需的。源封装数据操作掩码可具有掩码元素M1-MN。源封装数据操作掩码和掩码元素可具有如之前(例如,如图3)所描述的特征和变化。在所示示例中,掩码元素M1和MN均未屏蔽(例如,M1=1,并且MN=1)。在一些实施例中,指令可以可选地具有一个或多个求反控制位,但这不是必需的。这一个或多个求反控制位可允许软件和/或程序设计员控制任何一个或多个或全部源操作数的求反。在一些实施例中,指令可具有对应于第一源操作数512的一个或多个位536的第一集合以便指定是否对第一源操作数的所有封装浮点数据元素(例如,A1-AN)求反。在一些实施例中,指令还可或备选地具有对应于第二源操作数514的一个或多个位538的第二集合以便指定是否对第二源操作数的所有封装浮点数据元素(例如,B1-BN)求反。在一些实施例中,指令还可或备选地具有对应于第三源操作数516的一个或多个位540的第三集合以便指定是否对第三源操作数的所有封装浮点数据元素(例如,C1-CN)求反。在一些实施例中,单个位可对应于每个相应的源封装数据操作数,并且可用于提供对该源封装数据操作数的求反控制。根据一个可能的惯例,每个单个求反控制位可设置成二进制一(即,1)以便指定即将对对应的源封装数据的所有数据元素求反,或者可改为清空为二进制零(即,0)以便指定不会对对应的源封装数据操作数的所有数据元素求反。例如,第一位536可设置成指定即将对第一源操作数的所有数据元素(例如,A1-AN)求反,或者可清空以指示不对它们求反。类似地,第二位538可设置成指定即将对第二源操作数的所有数据元素(例如,B1-BN)求反,或者可清空以指示不对它们求反。类似地,第三位540可设置成指定即将对第三源操作数的所有数据元素(例如,C1-CN)求反,或者可清空以指示不对它们求反。在一些实施例中,可存在可对应于第一、第二和第三源封装数据中的任何一个源封装数据并且可提供对第一、第二和第三源封装数据中的任何一个源封装数据的求反控制的一个或多个求反控制位的单个集合。在其它实施例中,可存在可对应于第一、第二和第三源封装数据中的任意两个源封装数据并且可提供对第一、第二和第三源封装数据中的任意两个源封装数据的求反控制的一个或多个求反控制位的两个集合。备选地,可存在可对应于第一、第二和第三源封装数据中的所有三个源封装数据并且可提供对第一、第二和第三源封装数据中的所有三个源封装数据的求反控制的一个或多个求反控制位的三个集合。在一些实施例中,求反控制位可以可选地由指令的立即数542提供。例如,在一个特定示例实施例中,可以可选地使用8位立即数,并且可由位imm8[0]提供对应于第一源封装数据的单个位536,可由位imm8[1]提供对应于第二源封装数据的单个位538,并可由位imm8[2]提供对应于第三源封装数据的单个位540。在其它实施例中,可以可选地使用其它大小的立即数,例如2位立即数、4位立即数、6位立即数等。在其它实施例中,可以可选地使用这些立即数的其它位,和/或这些立即数的其它位可以用不同的方式与源封装数据对应。作为另一个选项,并非使用立即数,而是可以通过指令以其它方式提供求反控制位(例如,作为操作码的一部分、作为指令的另一个字段等)。再次参考图5,在所示示例中,使用对应于每个源封装数据的单个求反控制位。此外,该位设置成指定求反,或清空以便指定不求反。在所示示例中,将对应于第一源封装数据的位清空,并将对应于第三源封装数据的位清空。因此,将不对第一源封装数据的数据元素(例如,A1-AN)和第三源封装数据的数据元素(例如,C1-CN)求反。相反,设置对应于第二源封装数据的位,并且因此将对第二源封装数据的数据元素(例如,B1-BN)求反。操作534的实施例可响应于指令的实施例和/或作为指令的实施例的结果执行。响应于指令,可生成(例如,通过执行单元)结果封装数据518,并将它存储在目的地存储位置中。结果封装数据可包括多个结果数据元素。在所示示例实施例中,最右边的结果浮点数据元素可存储第一浮点舍入和(例如,RND1(C1+RND2(A1+(-B1)))),而最左边的结果浮点数据元素可存储第N个浮点舍入和(例如,RND1(CN+RND2(AN+(-BN))))。注意,基于由第二位538提供的舍入控制对数据元素B1-BN求反。第一个和第N个浮点舍入和可各自表示另一个相应的浮点舍入和(例如,RND2(A1+(-B1))或RND2(AN+(-BN)))与来自第三源封装数据的对应浮点数据元素(例如,C1或CN)的加性组合。加性组合允许可选地或潜在地对源数据元素(在此情况下为B1-BN)求反。有利地,可以可选地利用指令能够指定求反控制的能力来增加指令的灵活性(例如,通过允许减去一个或多个源)。备选地,可以可选地在执行封装三源浮点加法指令的范围之外执行求反(例如,通过一个或多个其它指令)。表1提供对封装三源双精度浮点屏蔽和求反控制加法指令(命名为VADD3PD)的特定示例实施例的描述。在一些实施例中,该指令可具有格式VADD3PDzmm1{k1
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1