多可寻址寄存器文件和与其相关联的格式转换的制作方法

文档序号:6496487阅读:233来源:国知局
多可寻址寄存器文件和与其相关联的格式转换的制作方法
【专利摘要】由包括矢量、标量和矢量-标量扩展指令的多种类型的指令寻址多可寻址寄存器文件。可以确定数据要从一个格式转变为另一格式。如果如此确定,则执行转换机器指令,该转换机器指令从第一寄存器获取第一格式的第一表示的单精度数据;将第一格式的第一表示的单精度数据转换到第二格式的第二表示的转换后的单精度数据;以及将转换后的单精度数据放置在第二寄存器中。
【专利说明】多可寻址寄存器文件和与其相关联的格式转换
【技术领域】
[0001]本申请的一个或者多个方面总地涉及数据处理,并且尤其涉及多可寻址寄存器文件和与其相关联的处理。
【背景技术】
[0002]高性能处理器支持使用单指令多数据(SMD)技术的多媒体处理,以开发程序中的指令级并行性。也就是,SMD技术用于每次执行不止一个操作。这些处理器包含多个功能单元,该多功能单元中的一些被引导至标量数据的执行,并且该多个功能单元中的一些被聚集用于处理结构化的SMD矢量数据的处理。SMD数据流用于例如使用通过在结构化数据类型中编码红色、绿色和蓝色分量的RGB格式或者通过将位置编码为四元(x,y,z,w)的坐标信息,表示诸如颜色信息之类的多媒体数据类型。
[0003]通过增量现有标量处理器实现方式,已经实现了设计用于处理多媒体数据的处理器,比如通过增加SIMD单元,SIMD单元本身包括多个功能单元(即,定点单元和浮点单元),镜像可用于标量数据类型的处理的资源,并且针对要由SMD架构支持的结构化元素的数量复制每个功能单元类型。
[0004]支持多媒体处理以及其他处理的处理器可以处理不同类型的数据。然而,要提供管理这种处理的工具。

【发明内容】

[0005]通过提供用于执行机器指令的计算机程序产品克服现有技术的缺点并且提供附加优点。该计算机程序产品包括存储介质,该存储介质可由处理电路读取并且存储用于由处理电路执行以执行方法的指令。该方法比如包括:由处理器获取用于执行的机器指令,根据计算机架构定义该机器指令用于计算机执行,该机器指令例如包括:至少一个操作码字段,以识别转换指令;至少一个用于指定第一寄存器的字段;以及至少一个用于指定第二寄存器的其他字段;由处理器执行该机器指令,该执行比如包括:从第一寄存器获取第一格式的第一表示的单精度二进制浮点数据;将第一格式的第一表示的单精度二进制浮点数据转换到第二格式的第二表示的转换后的单精度二进制浮点数据;以及将转换后的单精度二进制浮点数据放置在第二寄存器中。
[0006]这里也描述并且要求保护涉及本发明的一个或者多个方面的方法和系统。另外,涉及本发明的一个或者多个方面的服务这里也被描述并可以被要求保护。
[0007]通过本发明的一个或者多个方面的技术实现附加特征和优点。本发明的其他实施例和方面在这里被详细描述并且被视为要求保护的发明的一部分。
【专利附图】

【附图说明】
[0008]本发明的一个或者多个方面作为说明书结论处的权利要求中的示例被具体指出并且被清楚地要求保护。本发明的一个或者多个方面的前述和其他目的、特征和优点从下面结合附图的详细描述中变得易见,在附图中:
[0009]图1是描绘包括用于处理结构化数据类型的SMD单元标量和处理单元二者的处理器的示例;
[0010]图2是其中可以实现例示性实施例的一个或者多个方面的数据处理系统的一个示例;
[0011]图3A是设计用于使用存储标量和矢量数据二者的寄存器文件以及地址信息执行标量和矢量指令的处理器的一个示例;
[0012]图3B示出用以选择可以由处理器的分支单元和加载/存储单元使用的信息的标量数据的更灵活途径;
[0013]图4是其中根据一个例示性实施例利用多寻址寄存器文件的处理器的一个示例;
[0014]图5是根据一个例不性实施例的矢量-标量扩展(VSX)寄存器文件的一个不例;
[0015]图6描绘根据一个例示性实施例概述一般解码操作的逻辑的一个示例;
[0016]图7A和7B提供根据一个例示性实施例概述解码操作的逻辑的一个示例;
[0017]图8描绘用于根据例示性实施例将转换指令插入指令流中的逻辑的一个示例;
[0018]图9描绘用于根据例示性实施例选择用于转换矢量元素到标量的转换指令的逻辑的一个示例;
[0019]图10描绘用于根据例示性实施例选择用于转换标量数据到矢量元素的转换指令的逻辑的一个示例;以及
[0020]图11描绘并入本发明的一个或者多个方面的计算机程序产品的一个实施例。【具体实施方式】
[0021]根据本发明的一个方面,便于与标量和矢量数据相关联的处理。在一个方面中,提供寄存器文件,其中,寄存器文件中的每个寄存器可以包括64位(b)单精度浮点标量数据或者32b单精度矢量数据,以及其他数据格式。另外,在一个方面中,提供转换技术,以从一个单精度浮点格式转换到另一单精度浮点格式。在一个示例中,使用架构指令(architected instruction)执行转换,并且不需要发信号通知异常。
[0022]如上面早先讨论并且另外在共同转让的、Gschwind等人的、名称为“Mult1-Addressable Register File” 的 2009 年 8 月 6 日公开的美国公开第2009/0198966A1 以及 Gschwind 等人的、名称为 “Mult1-Addressable Register File” 的2011年I月25日授权的美国专利N0.7,877,582,(这里通过引用将每个的全部内容并入本文)中,通过增量(augment)现有标量处理器实现方式,已经实现了设计用于处理多媒体数据的处理器,比如通过增加SIMD单元,SIMD单元本身包括多个功能单元(即,定点单元和浮点单元),其镜像可用于标量数据类型的处理的资源,并且针对要由SMD架构支持的结构化元素的数量复制每个功能单元类型。通常,在标量和SMD处理器之间共享的仅有单元是发布逻辑(issue logic)和加载/存储单元(LSU),该发布逻辑发布指令到标量或者SIMD处理块,该加载/存储单元(LSU)管理对存储器子系统的存取。包括寄存器文件的所有其他单元典型地被独立维护。
[0023]图1是描绘包含标量处理单元和用于处理结构化数据类型的SMD单元二者的现有技术处理器的示例的框图,SMD单元包括用于结构化数据类型中的每个元素的多个处理单元。一般地,使用独立的标量和SMD处理器效率低并且昂贵,这是因为这种配置包括多个冗余功能单元和数据通道。另外,这种实现方式导致不期望的能量消耗量,因为当标量或者SMD单元之一正在处理数据时,另一个一般通过等待其下一指令而空闲,但始终都在消耗系统电力。
[0024]在图1的系统的操作期间,指令由指令取出单元100取出,并且供应给指令解码单元102。解码后的指令被传递给发布/分支单元104,其中分支指令被解决,并且其他指令可以被存储在其指令发布单元(未示出)中,直至它们可以在处理器的功能单元之一中执行。指令发布单元可以包含支持指令的高性能发布的预测逻辑、指令重排序逻辑、指令发布缓冲器和其他逻辑。
[0025]指令由发布/分支单元104发布到加载/存储单元106、定点单元(FXU)108、浮点单元(FPU)单元110或者SMD处理块112中的一个或者多个。在指令可以由一个或者多个处理单元处理之前,在作为很多当前处理器中出现的SMD多媒体扩展的一部分的寄存器文件(例如,整数存储器文件114、浮点寄存器文件116或者矢量寄存器文件118)中通常需要一个或者多个寄存器存取。
[0026]SIMD多媒体处理块112典型包含矢量寄存器文件118,用于存储结构化数据(通常为具有四个元素的矢量)。矢量寄存器文件118可以被分段为四个子寄存器文件,每个存储结构化数据的单个字段。SMD多媒体处理器块112可以包含若干类型的功能单元,针对多媒体扩展支持的结构化数据类型中的元素数量复制(replicate)每个类型。在图1中,示出被复制四次的定点单元119和浮点单元120,以便每个处理一个结构元素,如在
PowerPC? vmx多媒体扩展中可以找到的。
[0027]可以看到,在提供标量和SIMD指令执行二者的情况下,CPU可能遇到的各种类型的指令通常要求独立可寻址寄存器文件。例如,如图1中示出,提供独立的整数寄存器文件114、浮点寄存器文件116和矢量寄存器文件118。在开销以及功率消耗方面,以这种方式具有独立的寄存器文件昂贵。具有多个寄存器文件意味着,在执行代码时,该代码要在各种寄存器文件之间切换或者移动。这使得代码生成在与在各种寄存器文件之间的移动相关联的开销方面昂贵。此外,代码的编译器可能需要更多的与寄存器文件导致寄存器文件碎片相关联的一个或者另一个资源集合。另外,在CPU的微架构中具有独立资源增加与CPU的制造相关联的成本以及与功率消耗、散热等相关联的成本。
[0028]上面描述的处理器实现方式是先有技术系统的一个不例;在一些实现方式中,一些寄存器文件可以被共享,例如,可以存在组合的整数和浮点寄存器文件,或者附加的寄存器文件,诸如用于比较结果的断定寄存器文件或者条件寄存器文件。在美国专利第
6,839, 828 (Gschwind 等,名称为“SIMD Datapath Coupled to Scalar/Vector/Address/Conditional Data Register File with Selective Subpath Scalar Processing Mode,,,2004年I月4日授权,以引用的方式这里将其全部内容并入本文)中描述的一个具体示例中,与被设计为在用于处理矢量和标量指令的多个模式中操作的处理器一起,描述了组合的标量/矢量可寻址寄存器文件。耦合到寄存器文件的并行矢量单元包括可配置为在矢量运算模式和标量运算模式中操作的功能单元。该矢量单元包括用于紧密地耦合功能单元以执行由当前指令指定的操作的装置。在矢量运算模式下,矢量单元并行地对多个数据元素执行单个矢量运算。对多个数据元素执行的运算各自由矢量单元的不同功能单元执行。在标量运算模式下,矢量单元对从矢量单元内的功能单元中的寄存器文件接收到的数据元素执行标量运算。
[0029]在美国专利N0.6,839,828的机制提供将不同类型的指令/数据存储在寄存器文件中的能力时,为了实现这个能力,‘828专利阐述了新架构。然而,这个新架构没有提供多可寻址能力,即,基于指令类型(例如,传统标量、传统矢量或者新指令类型)寻址寄存器文件中的寄存器的不同方式。
[0030]这里以及美国专利N0.7,877,582中描述的一个或者多个例示性实施例提供多可寻址寄存器文件。这种多可寻址寄存器文件可以在数据处理系统的处理器中实现。这种数据处理系统可以具有一个或者多个处理器,其中每个处理器或者处理器的子集可以实现例示性实施例的多可寻址寄存器文件。根据一个或者多个例示性实施例,处理器具有多可寻址寄存器文件的数据处理系统的类型可以很大地变化,并且由此,本说明书不可能陈述每个这种可能的处理器架构。然而,为了说明的目的,提供图2作为其中可以实现一个或者多个例示性实施例的多可寻址寄存器文件的数据处理系统的一个类型的示例。
[0031]现在参考图2,示出其中可以实现一个或者多个例示性实施例的方面的示例性数据处理系统的框图。数据处理系统200是其中可以设置实现本发明的一个或者多个例示性实施例的处理的计算机可用代码或者指令的计算机的示例。
[0032]在描绘的示例中,数据处理系统200利用集线器架构,该集线器架构包括北桥和存储器控制器集线器(NB/MCH) 202以及南桥和输入/输出(I/O)控制器集线器(SB/ICH)204。处理单元206、主存储器208和图形处理器210连接到NB/MCH202。图形处理器210可以通过加速图像端口(AGP)连接到NB/MCH202。
[0033]在描绘的示例中,局域网(LAN)适配器212连接到SB/ICH204。音频适配器216、键盘和鼠标适配器220、调制解调器222、只读存储器(R0M)224、硬盘驱动器(HDD)226、⑶-ROM驱动器230、通用串行总线(USB)端口和其他通信端口 232、以及PCI/PCIe设备234通过总线238和总线240连接到SB/ICH204。PCI/PCIe设备例如可以包括以太网适配器、插入卡和用于笔记本电脑的PC卡。PCI使用卡总线控制器,而PCIe不使用。R0M224例如可以是快闪(flash) 二进制输入/输入系统(BIOS)。
[0034]HDD226 和 CD-ROM 驱动器 230 通过总线 240 连接到 SB/ICH204。HDD226 和 CD-ROM驱动器230可以例如使用集成驱动电路(IDE)或者串行高级连接技术(SATA)接口。超级I/O (SIO)设备236可以连接到SB/ICH204。
[0035]操作系统在处理单元206上运行。操作系统协调并且提供图2中的数据处理系统200内的各种组件的控制。作为客户端,操作系统可以是商业可得的操作系统,诸如Microsofl Windows' XP (Microsoft 和 Windows 是 Microsoft Corporation(微软公司)
在美国、其他国家或者二者的商标)或者Linux?操作系统(Linux是Linus Torvalds在
美国、其他国家或者二者的商标)。面向对象的程序系统(诸如Java?程序系统)可以与操作系统结合地运行,并且从在数据处理系统200上执行的Java?程序或者应用提供对操作系统的调用(Java是Sun Microsystems, Inc.(太阳微系统公司)在美国、其他国家或者二者的商标)。
[0036]作为服务器,数据处理系统200例如可以是IBM '' eServer?System P?计算机系统,其运行高级交互执行(Aix9)操作系统或者Unuxlt操作系统(eServer, System P?和 AIX 是 International Business Machines Corporation (国际商业机器公司)在美国、其他国家或者二者的商标)。数据处理系统200可以是对称多处理器(SMP)系统,其在处理单元206中包括多个处理器,诸如从New York (纽约州)Armonk (阿蒙克)的国际商业机器
公司可获得的PO胃ER?处理器。可替代地,可以利用单处理器系统。
[0037]用于操作系统、面向对象的程序系统和应用或者程序的指令位于存储设备上,诸如HDD226之类,并且可以被加载到主存储器208中,用于由处理单元206执行。一个或者多个例示性实施例的处理可以由处理单元206使用计算机可用程序代码执行,该计算机可用程序代码可以位于存储器(该存储器诸例如为主存储器208、R0M224之类)中,或者例如一个或者多个外围设备226和230中。
[0038]诸如总线238或者总线240之类的总线系统,如图2中所示,可以包括一个或者多个总线。当然,总线系统可以使用提供用于在附接到通信光纤(fabric)或者架构的不同组件或者设备之间传递数据的任何类型的通信光纤或者架构实现。诸如图2的调制解调器222或者网络适配器212之类的通信单元可以包括用于发送和接收数据的一个或者多个设备。存储器例如可以是主存储器208、R0M224或者高速缓存,诸如图2中的NB/MCH202中所存在的。
[0039]本领域的技术人员将认识到图1-2中的硬件可以依赖于实现方式而变化。附加在图1-2中描绘的硬件之外或者替代图1-2中描绘的硬件,可以使用诸如闪存、等效非易失性存储器或者光盘驱动器等其他内部硬件或者外围设备。此外,在不脱离本发明的一个或者多个方面的精神和范围的情况下,一个或者多个例示性实施例的处理器可以应用于不同于之前提及的SMP系统的多处理器数据处理系统。
[0040]此外,数据处理系统200可以采用多个不同数据处理系统中任一个的形式,包括客户端计算设备、服务器计算设备、平板计算机、膝上型计算机、电话或者其他通信设备、个人数字助理(PDA)等。在一些例示性示例中,数据处理系统200可以是便携式计算设备,便携式计算设备配置闪存,提供非易失性存储器,用于例如存储操作系统文件和/或用户生成的数据。本质上,数据处理系统200在没有架构限制的情况下,可以是任何已知或者后来开发的数据处理系统。
[0041]如上面讨论,一个或者多个示例性实施例提供多可寻址寄存器文件。一个或者多个例示性实施例通过提供大量寄存器和利用第一指令集寻址第一寄存器子集、利用第二指令集寻址第二寄存器子集以及利用至少第三指令集寻址整个寄存器文件的能力,增加寄存器文件的容量来改进已知寄存器文件。根据一个或者多个例示性实施例,第一和第二寄存器子集不重叠,并且指向不同的寄存器文件区域,诸如“类型I的指令的寄存器”和“类型2的指令的寄存器”。与类型I的指令对应的子集内包含的寄存器不可以被类型2的指令存取,并且反之亦然。在一个例示性实施例中,类型I指令与IBM Power架构FPU或者传统浮点指令对应,类型2指令与IBM Power架构传统VMX指令对应,并且类型3指令与IBM Power架构VSX指令对应。
[0042]一个或者多个例示性实施例的机制与已知的群集寄存器文件、寄存器文件内的操作数子范围、具有“在寄存器文件之间移动”指令的存储器以及使用具有非连续寄存器指定符(specifier)的子范围的形式的VMX128寄存器文件不同。利用操作数子范围,典型地,仅存在用于一个操作数(即,一种类型的指令)的一个子范围。不存在具有可以寻址寄存器文件中的所有寄存器的另一形式的其他指令类型,并且不存在用于另一类型的指令的寄存器的其他范围,即,不存在多可寻址性功能。群集寄存器文件包括具有可由不同指令寻址的子范围的大寄存器文件,但是不存在可以寻址寄存器文件中的所有寄存器的指令类型。相反,如果要对寄存器的全集合执行操作,则要对寄存器文件执行移动/拷贝操作。这些移动/拷贝操作通常是可以要求特殊调度机制的更慢的操作。
[0043]相反,一个或者多个例示性实施例基于指令类型(例如,传统浮点、传统标量、矢量-标量、增强或扩展的矢量-标量等)提供对多可寻址寄存器文件的寄存器的存取。不是与一个操作数类型相关联的一个寄存器子集,而是一个或者多个例示性实施例的多可寻址寄存器文件提供多个不相交的寄存器子集。与各种类型的指令相关联的多可寻址寄存器文件中的多个寄存器子集是寄存器的连续范围。此外,利用一个或者多个例示性实施例,虽然不同类型的指令可以存取多可寻址寄存器文件中的非重叠寄存器子集,但是至少一种类型的指令也可以存取多可寻址寄存器文件中的所有寄存器。
[0044]在一个具体实施例中,根据本发明的一个方面,不同类型的指令可以存取多可寻址寄存器文件中的非重叠寄存器子集,并且多种类型的指令(例如,64b标量单精度浮点指令和32b矢量单精度浮点指令)可以存取多可寻址存储器文件中的所有寄存器。
[0045]在本发明的另一方面中,一个或者多个例示性实施例通过包括使用同一寄存器文件来执行标量、矢量和浮点指令的能力,扩展已知标量/矢量寄存器文件,其中基于正在执行的指令的类型动态地确定待存取的寄存器文件的部分。因为一个或者多个例示性实施例改进已知标量/矢量寄存器文件以及使用这种标量/矢量寄存器文件的处理器,所以提供了这种处理器和标量/矢量寄存器文件的基本操作的理解。图3A和3B的下面描述引用共同转让的美国专利N0.6,839,828作为这种已知标量/矢量寄存器文件和处理器的示例。
[0046]图3A是根据美国专利N0.6,839,828被设计为使用存储标量和矢量数据两者的寄存器文件以及地址信息执行标量和矢量指令二者的处理器的一个示例示意图。在图3A中所示的处理器中,标量和SIMD数据通道处理能力已经与现在将标量处理包括在内的SIMD矢量数据通道组合。在用于处理矢量数据类型的一个元素的单元之一中发生标量处理。该数据单元被指派为“优选槽”并且提供分支单元和加载/存储单元的地址,如下面将描述。为了简化,图3A中的统一处理器的描绘仅仅包括数据流连接,而不包括控制信号连接和外部系统接口,例如,地址线、与存储器的连接等。后面这些连接被采用。
[0047]图3A的统一处理器包括指令取出单元300,指令取出单元300基于取出单元的程序计数器的值从系统的存储器层级系统(未示出)取出指令和数据。由指令取出单元300提供取出的指令到解码单元302,在解码单元302中它们被解码并且展开至适当的控制信号,以控制下游单元。展开的指令被传递到发布/分支单元304,在发布/分支单元304中其被放置到指令队列中以等待适当功能单元的可用性,以进行处理。在指令是分支的事件中,将控制返回指令取出单元300,指令取出单元300取出分支-目标指令,并且重复以上处理。
[0048]在标量运算的情形下,当功能单元(即,定点单元或者浮点单元)变得可用,或者在矢量运算的情形下,当多个功能单元变成可用时,发布/分支单元304发布指令到一个或者多个功能单元。在可以执行计算之前,通过存取标量-矢量寄存器文件(SVRF) 310检索源操作数数据。典型提供多个类型的功能单元,例如定点单元、浮点单元和加载/存储单元(LSU) 306,其从存储器层级体系取出由当前指令识别的数据以及向存储器层级体系存储由当前指令识别的数据。LSU306经由总线308将存储器存取的结果存储回组合的SVRF310。在本实施例中,SVRF310存储由四个标量数据字组成的数据线,每条线被划分,以使得四个数据字中的每个与不同的功能单元对(或者集合)311-314相关联,每个功能单元对包括定点单元和浮点单元,如所示。功能单元对组成这里称为平行矢量单元的东西。
[0049]发布逻辑引导SVRF310传递数据线的内容到功能单元的每个集合内的适当功能单元,以进行处理。可以存在与发布槽相关联的任何数量和类型的功能单元,包括但不限于定点单元、浮点单元、比较单元、逻辑运算单元、移位单元等。集合内将使用数据字的特定功能单元将依赖于要执行的指令,并且由来自发布/分支单元304的信号控制。由此,如果指令要求定点单元对数据操作,则将数据经由线315-318传递到定点单元319-322。如果指令数据要求浮点单元327-330,则将经由线323-326传递数据。如果存在其他功能单元,则将数据类似地传递到它们。当每个指派的功能单元已经对输入数据执行了其操作,则将结果传递回SVRF310,在SVRF310中,其被存储直至被LSU306请求,或者传递到用于其它操纵的功能单元。
[0050]由通过发布/分支单元304提供的控制信号确定要由功能单元执行的操作以及执行这些操作的功能单元。当操作引导LSU306从SVRF310读取数据时,数据经由总线332传递。此外,数据要在存储器中存储到的地址经由总线331传递到LSU306。在图3A的实施例中,地址总线331从SVRF310的区段(D)传递信息,该SVRF310的区段(D)与功能单元对314相关联(该对被指派为优选槽,如稍后描述)。通过定义功能单元作为优选槽,或通过动态地确定优选槽,或者通过设置控制寄存器以指定指令字中的槽,或通过使用任何其他手段(例如,在发布时间由发布单元)对其进行确定,优选槽可以是任何功能单元。优选槽的指派允许功能单元的选择性断电,以导致电力节省。
[0051]对于这一点,统一处理器的所描述的操作已经应用于标量和矢量运算二者。也就是,如果要执行的操作是标量运算,由此要求仅一个功能单元对的操作和输出,则其余功能单元对不论如何也可以被引导,以对从标量矢量寄存器文件传递到它们的数据执行相同的操作。这种方法允许设计的简单性,因为为了要求不同的功能单元同时执行不同操作必须引入复杂设计的考虑。同样,对于矢量运算,每个功能单元将对输入数据执行相同的操作(或者基本相同的操作,作为紧密耦合的操作的部分,或者作为由单个指令指定的紧密耦合的操作的组合的部分)。
[0052]根据操作的解释,由使用相关联的地址信息的方式区分标量和矢量运算。该操作的解释可以是其操作代码的直接结果,也就是,不同操作代码可以可用于不同指令(例如,“加载标量字节”、“加载标量字”、“加载标量矢量”),或者可以依赖于系统的另一部分(例如,模式标签位)来解释单个“加载”操作码。即使标量数据跨越字节的地址范围(尽管比矢量的字节少),并且也存在加载/存储可以如何操作的变型。
[0053]不像典型地分配到SVRF310内的特定槽的其他功能单元,LSU306对SVRF310中包含的整条数据线或者其子集进行操作。LSU306依赖于由发布/分支单元304发布的指令,在加载或者存储模式中操作。在加载模式中,LSU306使用总线331从SVRF310的优选槽接收到地址信息,并且加载来自指定地址的数据。当正在执行加载矢量指令时,加载操作使用总线308将整条数据线从存储器加载到SVRF310。当指定加载标量操作时,加载操作将至少加载与标量类型(典型地,字节、半字、字等)的尺寸对应的位数。可以根据实现方式选取、或者无效数据加载附加位,或者被初始化到默认值(诸如但不限于“O”)的数据可以被提供用于所请求的数据类型的范围之外的这些位。在一个实施例中,“加载标量”操作包括对齐(alignment)步骤,其中,请求的标量值在存储到SVRF310中之前被在优选槽中对齐。在另一实施例中,使用一个或者多个指令的序列以编程方式执行对齐。
[0054]在操作的存储模式中,LSU306借助总线332从SVRF310接收要存储的数据,以及使用总线331从SVRF310的优选槽接收地址信息,并且存储数据到指定的地址。
[0055]图3B示出用以选择可以由根据美国专利N0.6,839,828的分支单元和LSU使用的信息的标量数据的更灵活的方法。根据本实施例,SVRF310的各个区段可借助多路复用器333选择,多路复用器333可以利用经由线334来自发布/分支单元304的控制输入(其典型来自要执行的指令的指令字中的字段)来控制。替代实施例可以包括,但不限于,软件控制的特定目的寄存器或者启动时参数,以供应多路复用器的控制输入。
[0056]图3B中所示的实施例按下面操作。当用以供应用于操作的存储器地址的加载/存储单元、或者用以供应例如分支目标地址或者分支条件的分支单元、或者要求向所有元素应用单个移位计数的移位单元、或者可以要求标量数据值作为其输入的任何其他单元,要求标量数据值时,多路复用器333由控制输入操纵,以选择槽A、B、C或者D之一作为用于操作的标量输入。由此,根据本实施例,任何功能单元对都可被选择为“选优槽”,以允许平衡处理操作,减少多个槽之间的传递操作的需要,并且增加可以存储标量值的槽的数量。
[0057]由此,美国专利N0.6,839,828描述用于标量处理的优选槽的两种不同实现方式。第一种是硬接线(hardwired)实现方式(在设计阶段选择优选槽),以及执行期间的可变方式(可以在飞行中(on the fly)选择优选槽)。如‘828专利中提及,设计时的优选槽的指派可以简化实现方式,因为不需要提供上面描述的选择。此外,使用相同的功能单元对可能更有效,即使具有优选槽的运行从不使用的无用电路的稍微开销成本。
[0058]虽然美国专利N0.6,839,828的寄存器文件机制和其他寄存器文件机制允许单个寄存器文件用于标量和矢量运算,但是这些寄存器文件机制不提供多可寻址性,而仅仅提供用以在单寄存器文件中存储不同类型的指令/数据的能力。已经提供了复杂架构和/或操作来处理单寄存器文件中的不同类型的指令/数据。
[0059]相反,一个或者多个例示性实施例提供多可寻址寄存器文件,该多可寻址寄存器文件允许传统指令和一个或者多个新或者增强类型的指令二者存取多可寻址寄存器文件的寄存器。利用一个或者多个例示性实施例的机制,可以使用标量和单指令多数据(SIMD)或者矢量指令二者寻址单个寄存器文件。也就是,根据一个或者多个例示性实施例的多可寻址寄存器文件内的寄存器子集可利用不同的指令形式(例如,标量指令、SMD或者矢量指令等)寻址,而利用再一形式的指令(本文称为矢量-标量扩展(VSX)指令)可以寻址寄存器的整个集合。可以使用VSX指令形式对寄存器的整个集合执行的操作的类型(S卩,操作集合)基本与寄存器子集的操作集合的操作的类型类似。
[0060]一个或者多个例示性实施例的多可寻址寄存器文件允许传统指令存取多可寻址寄存器文件内的寄存器子集,而新或者增强的指令(例如,VSX指令)可以存取多可寻址寄存器文件内的寄存器的整个范围。此外,传统指令的数据格式与VSX指令的数据格式兼容。由此,由传统指令生成的数据可以由VSX指令处理,并且反之亦然。
[0061]例如,一个或者多个例示性实施例允许传统浮点指令(标量运算)在寄存器文件的第一寄存器子集(例如,VSX寄存器0-31)中存储的值上工作;传统VMX指令(矢量运算)在寄存器文件中的第二寄存器子集(例如,VSX寄存器32-63)上工作(而继续引用实际指令中的寄存器0-31);以及VSX指令(矢量-标量运算)在寄存器文件的所有寄存器(例如,VSX寄存器O到63)上操作。一个或者多个例示性实施例还允许不同类型的指令使用各种寄存器子集以及VSX指令存取寄存器文件的所有寄存器的能力来共享数据。例如,可以通过在VSX寄存器O到31中存储并且存取数据而在VSX和传统浮点指令之间共享数据。类似地,一个或者多个例示性实施例允许在传统VMX指令和VSX指令之间在VSX寄存器32和63中共享数据,同时继续执行使用传统浮点和传统VMX指令之一或者二者的程序,而不需要任何修改。此外,一个或者多个例示性实施例允许在不需要任何修改的情况下将使用传统浮点和传统VMX指令中的一个或者二者的代码模块链接到利用新VSX指令的代码模块,以及在利用传统指令计算的代码模块和使用VSX指令的代码模块之间共享数据。
[0062]在一个具体实施例中,根据本发明的一个方面,VSX指令包括64b标量单精度浮点指令和32b矢量单精度浮点指令、以及可能的其他指令。在作为该具体描述的一部分而包括的RFC02182.r6:VSX标量单精度中描述64b标量单精度浮点指令的示例。
[0063]图4是其中根据一个例示性实施例利用多可寻址寄存器文件的处理器的图的一个示例。如图4中所示,除了寄存器文件440的配置和利用之外,处理器400在配置上与图3A的处理器类似。指令取出单元410、发布/分支单元430、功能单元对(或者集合)482-488的功能单元450-480以及加载/分支单元490全部以与上面关于图3A描述的类似方式操作。指令解码单元420具有附加逻辑,如下文描述,该附加逻辑用于解码三种不同类型的指令:矢量、标量和矢量-标量指令类型。在一个例示性实施例中,这些三种不同类型的指令是矢量多媒体扩展(VMX)指令、浮点(FP)指令和矢量-标量扩展(VSX)指令。本领域中一般已知FP运算。VMX指令在可从纽约Armonk的国际商业机器公司获得的P0WER6处理器中使用,并且提供对多个数据元素操作的单指令。将在下文更详细描述VSX指令。
[0064]基于解码后的指令,指令将存取寄存器文件440的子范围或者寄存器文件440的整个范围。如果指令解码单元420确定该指令为传统浮点指令,则存取寄存器文件440的第一子范围450-480,向适当功能单元450-480提供数据用于处理。如果指令解码单元420确定该指令为传统VMX矢量指令,则存取寄存器文件440的第二子范围444,仍然向适当功能单元450-480提供数据用于处理。如果指令解码单元420确定该指令为VSX指令,则可以存取寄存器文件440的整个范围446,向适当功能单元450-480提供数据用于处理。依赖于正在执行的具体VSX指令,存取任何寄存器446的VSX指令可以使用寄存器的整个宽度以获得输入数据(与VSX矢量指令对应并且提供对指令的每个操作数位置中的寄存器文件446中的所有寄存器的存取)或者其一部分(与VSX标量指令对应并且提供对指令的每个操作数位置中的寄存器文件446中的所有寄存器的存取,但仅仅使用其中包含的位的子集)。
[0065]第一子范围442包含寄存器文件440中的寄存器的第一集合的第一范围的位。第二子范围444包含寄存器文件中的寄存器的第二集合的第二范围的位。第三子范围446包含寄存器文件440中的寄存器的完整集合的全部范围的位。这样,单寄存器文件440可以用于处理传统标量和传统矢量指令、以及矢量-标量指令(这里称为VSX指令)的组合集。[0066]VSX指令是可以存取寄存器文件440的完整集合的寄存器的指令。VSX指令集包括若干种类的指令,包括单精度标量浮点指令用于存取整个寄存器文件440的每个寄存器的32位子范围;单精度标量浮点指令用于存取整个寄存器文件440的每个寄存器的64位子范围;双精度标量浮点指令用于存取整个寄存器文件440的每个寄存器的64位子范围;以及矢量指令用于存取整个寄存器文件440中的完整范围的位。VSX指令使用所选类型的寄存器指定符,例如,6位寄存器指定符,其与由传统标量和传统矢量指令使用的传统5位指定符不同。
[0067]由此,一个或者多个例示性实施例体提供单标量/矢量架构,用于与具有独立标量和矢量寄存器文件的传统架构兼容的寄存器文件。一个或者多个例示性实施例还允许在传统寄存器文件和扩展的矢量-标量寄存器文件之间共享处理器的存储空间,而不导致增加的芯片区域。此外,一个或者多个例示性实施例允许在使用传统指令的传统程序和库以及(使用传统或者新/增强指令的)程序和库之间共享数据,以及代码的互操作,由此保护传统应用的代码调整的投资并且避免重新编码所有应用以使用新/增强指令的需要,同时允许在新/增强指令最有用的地方使用它们。结果,可以避免由利用标量和矢量的独立寄存器文件的已知处理器架构(例如,单指令多数据(SMD)指令)经历的昂贵开销,以及用于使用单寄存器文件处理标量和矢量指令两者的复杂新架构所涉及的附加成本。
[0068]寄存器文件包括多个矢量-标量寄存器(VSR),每个VSR具有多个位。例如,寄存器文件440可以包括编号为VSR[O]到VSR[63]的64个VSR,每个VSR具有编号为O到127的128位。为了表示的目的,将假设,从寄存器文件440的顶部到底部连续编号VSR,从寄存器文件440的左侧向右侧连续编号位。这在下文讨论的图5中示出。
[0069]图5是根据一个例示性实施例的矢量-标量扩展(VSX)寄存器文件的例示性图。图5的VSX寄存器文件500例如可以用作寄存器文件440。如图5中所示,VSX寄存器文件500包括编号为VSR[0]到VSR[63]的多个矢量-标量寄存器(VSR)510。VSR510中的每个具有可被设置的预定数量的位。在描绘的示例中,每个VSR510具有编号为O到127的128位,用于存储与指令对应的数据据,诸如用于参数传递。
[0070]寄存器文件500的第一集合的寄存器530中的第一子范围的位520与第一类型的指令(诸如标量或者浮点指令)相关联。寄存器文件500的第二集合的寄存器550中的第二子范围的位540与第二类型的指令(诸如矢量、SIMD或者VMX指令)相关联。寄存器文件500的寄存器570的完整集合中的第三范围的位560与第三类型的指令(诸如VSX指令)相关联。
[0071]从图5可以认识到,VSX寄存器文件500通过基于相关联的寄存器范围和寄存器内的位宽度允许三种不同类型的指令存取VSX寄存器文件500的寄存器,而与其他系统中的其他寄存器文件不同。其他寄存器文件要求通过关于寄存器570的完整集合而不是关于与特定指令类型的所有操作数对应的寄存器子集指定要存取的寄存器,而以对所有类型的指令以相同的方式存取整个寄存器文件。
[0072]利用VSX寄存器文件500,当传统标量运算要从VSX寄存器文件500读取数据/向VSX寄存器文件500写入数据时,在一个例示性实施例中,从寄存器宽度的左侧(即,寄存器VSR[O]到VSR[31]的位O到63,例如第一子范围520)读取标量数据值/向寄存器宽度的左侧写入标量数据值。存在可以利用例示性实施例完成的向(多个)矢量-标量寄存器写入标量值的多种方式。在一个例示性实施例中,可以利用正在被写入位O到63的标量值写入VSR的所有位,而标量指令指定的寄存器上与正在针对不对应于标量数据值的位执行的矢量计算的结果对应的值,被写入位64到127。例如,如果寄存器H)到Fl的值被相加,以在寄存器F3中给出结果,则位64到127中的VSR3的值可以对应于似乎已经对于VSRO和VSRl的位64到127执行了矢量运算那样。
[0073]在另一例示性实施例中,要写入位O到63的标量值可以复制在位64到127中。例如,当标量浮点值将稍后与矢量值结合时,例如当将矢量与标量值相乘时,这种方法可能有益。一般地,标量值必须首先被跨越整个寄存器复制,诸如利用VMX或者VSX指令集的“splat”指令。该方法将消除执行“splat”指令的要求,因为标量值已被复制。
[0074]在另一例示性实施例中,标量值可以被写入寄存器的位O到63,而存在于位64到127中的无论什么值可以保持不变。当矢量运算可能需要被分解为一系列标量运算(其中,每个标量结果可以被插入特定矢量元素,以最终依据多个标量结果创建矢量结果)时,可以使用这样的方法。这将是最低功率的实施例,这是因为当不需要向寄存器写入任何东西时,什么都不写入。然而,其可能导致非确定性,因为存在于整个寄存器中的值现在可能依赖于标量结果被写入之前什么值驻留在寄存器文件中。这对于具有寄存器重命名的架构特别有问题,其中,存在于重命名寄存器中的值高度不可预测。
[0075]在另一示例性实施例中,标量值可以被写入寄存器的位O到63,而剩余位64到127可以用例如零的默认值填充。当矢量运算可能需要被分解为一系列标量运算(其中,多个标量结果一起移位并被“或”,以形成矢量结果)时,可以使用这种方法。这种方法给出可预测值,由此避免与不写入任何东西相关联的问题。这个选项还表示比复制值对结果总线的更低负载(因为该值不必提供到使负载加倍的寄存器中的2个地点)。
[0076]对于传统矢量、SIMD或者VMX指令,从第二集合的VSR[32]到VSR[63]的整个范围的位O到127读取数据值/向第二集合的VSR[32]到VSR[63]的整个范围的位O到127写入数据值。对于新VSX指令,从完整集合的VSR[0]到VSR[63]的整个范围的位O到127读取数据值/向完整集合的VSR[0]到VSR[63]的整个范围位的O到127写入数据值。利用这些VSX指令,在寄存器的左侧位O到63写入标量值,而跨越所有位O到127写入矢量值。
[0077]由此,利用一个或者多个例示性实施例的机制,当解码指令时,实际存在要解码的指令的两个特性。第一个是数据存取的宽度,即存取宽度规范,并且第二个是寄存器指定符。存取宽度规范识别寄存器的哪些位要被读取/写入。该寄存器指定符识别多可寻址寄存器文件中的哪个寄存器子集或者完整集合的寄存器要被读取/写入。用于解码指令的主要要求是允许将传统更小的寄存器文件重叠在矢量-标量寄存器文件的顶部上的多可寻址性方面的寄存器指定符,以允许存储共享。
[0078]再次参考图4,如上面讨论,向处理器400的指令解码单元420添加解码逻辑,以使用例示性实施例的单寄存器文件处理三种类型的指令。解码逻辑确定指令的类型,并且基于该指令的类型,生成用于指定可以由指令存取的寄存器文件440中的寄存器的位宽度的宽度指定符。然后基于指令的类型和宽度指定符生成整个寄存器宽度的全指定符,并且然后使用该全指定符寻址寄存器文件440中的对应寄存器子集442-446内的寄存器。然后使用全指定符基于寄存器子集442-446的寻址,计算操作的结果,将操作的结果写回到寄存器文件440中的寄存器子集442-446。
[0079]根据一个例示性实施例,提供Power架构(也已知为名称“ iV.nvei'PC:”和“PowerISA?”)的实现方式,Power架构至少包括“类别:浮点”(FPU,或传统FPU)的第一指令集、“类别:矢量”(VMX)的第二指令集以及“类别:VSX”的第三指令集,它们依据以下文件中的说明:美国专利N0.7,877,582 (美国公开2009/0198966A1)(这里以引用的方式将其每个的全部并入本文)中包括的附录;作为该具体说明中的一部分的文献;以及在以下公开中:“Power ISA?版本2.05,”第4、5和6章,国际商业机器公司,2007年10月23日,和“Power ISA?版本2.06修订B”,第7章,国际商业机器公司Corporation,2010年7月23日,这里以引用的方式将其每个的全部并入本文。“Power ISA?版本2.05”,国际商业机器公司,2007年10月23日和Power ISA?版本2.06修订B”,国际商业机器公司,2010年7月23日中的每个的全部被以引用的方式并入本文。
[0080]关于浮点处理器工具的详细信息提供在“Power ISA?版本2.05-第4章-浮点处理器[类别:浮点]”中。关于VMX处理器工具的详细信息提供在Power ISA?版本
2.05 -第6章-矢量处理器[类别:矢量]”中。关于VSX处理器工具的详细信息提供在Power ISA?版本2.06修订B-第7章-矢量-标量浮点运算[类别:VSX](这里以引用的方式将其全部并入本文中)”中以及提供在作为该具体描述的一部分而包含的“RFC02182.r6:VSX标量单精度”和“第7章:矢量-标量浮点运算[类别:VSX]”中。根据一个例示性实施例,可以出现诸如“类别:小数浮点”之类的附加指令集,其细节描述在“Power ISA?版本2.05-第5章-小数浮点[类别:小数浮点]”中,这里以引用的方式将其全部并入本文中。
[0081]根据本发明的一个方面,这里包括的RFC02182.r6和第7章描述包括64b单精度标量指令的VSX指令的新集合,该64b单精度标量指令与之前提供的32b标量指令不同。64b标量运算的提供使得与也是64b的传统标量运算能够进一步兼容。
[0082]图6-7B是概述可以在一个或者多个例示性实施例的指令解码单元的解码逻辑中实现的示例解码操作的流程图。将理解,可以由计算机程序指令实现流程图示的每个块和流程图示中的块的组合。这些计算机程序可以提供到处理器或者其他可编程数据处理装置,以产生机器,使得在处理器或者其他可编程数据处理装置上执行的指令创建用于实现流程图块或者多个块中规定的功能的装置。这些计算机程序指令也可以存储在可以引导处理器或者其他可编程数据处理装置以特定方式起作用的计算机可读存储器或者存储介质中,使得存储在计算机可读存储器或者存储介质中的指令产生制造品,包括实现流程图块或者多个块中规定的功能的指令装置。
[0083]相应地,流程图示的多个块支持用于执行规定的功能的装置的组合,用于执行规定的功能的步骤的组合和用于执行规定的功能的程序指令装置。也将理解,可以通过执行规定功能或者步骤的基于专用硬件的计算机系统,或者通过专用硬件和计算机指令的组合,实现流程图示的每个块和流程图示中的块的组合。
[0084]另外,提供流程图,以表明例示性实施例中执行的操作。流程图不意味着声明或者暗示关于特定操作或者尤其是操作顺序的限制。可以在不脱离本发明的精神和范围的情况下修改流程图的操作,以适合具体实现方式。
[0085]图6是概述根据一个例示性实施例的一般解码操作的流程图。如图6中所示,操作以接收来自指令取出单元的取出指令开始,步骤610。基于取出的指令的操作码,解码逻辑确定取出的指令是否是VSX指令,步骤615。如果操作码识别该指令为VSX指令(或者其他所选类型的指令),则从指令编码中的一个或者多个字段提取全寄存器指定符,步骤620。由具有若干字段的指令字指定指令。这些字段可以例如包括操作码字段、若干寄存器指定符字段以及次操作码字段。当遇到指令时,指令解码器可以确定遇到什么类型的指令(这通过分析操作码和次操作码字段完成),这也将典型地指示使用寄存器的什么位(例如,使用子范围520、540、560)。寄存器指定符字段指定存取哪个寄存器530、550或570。在一个实施例中,每个寄存器指定符字段可以提供5位指定符,即窄指定符。扩展字段可以提供在指令字中,提供附加位以给出6位,从而指定寄存器文件的64个VSR寄存器中的一个。
[0086]寻址(B卩,选择)寄存器文件中的对应寄存器,以提供它们的数据值到合适的计算或者功能单元,以进行处理,步骤625。也就是,全寄存器指定符被提供到寄存器文件,使得寄存器文件知道要读取或者写入哪个寄存器570。寄存器指定符是识别寄存器的存储阵列中的“地址”。
[0087]操作数数据值由计算/功能单元处理,步骤630,并且然后将由计算或者功能单元处理的结果写回存储器文件中的对应寄存器,步骤635。写回到的特定寄存器再次由寄存器指定符指定。
[0088]如果取出的指令的操作码指示该指令不是VSX (或者其他类型的指令),步骤615,则提取窄寄存器指定符,其识别寄存器子集并且可能识别寄存器的全宽度内的位,用于与指令一起使用,步骤640。然后基于指令类型和窄位范围指定符生成用于寄存器的整个范围的位的全寄存器指定符,步骤645。也就是,向窄寄存器指定符添加一个或者多个位,以生成全寄存器指定符。要添加的位依赖于寄存器文件的子范围以及如何定义它们。例如,对于传统标量指令,提供5位操作数指定符(S卩,窄位范围指定符)用于指令编码中的每个操作数。可以例如通过前面添加(pre-pend) O以产生6位指定符生成全寄存器指定符,以给出对描绘的示例中的VSR0-31的存取。对于传统矢量指令,提供5位操作数指定符(即,窄寄存器指定符)用于指令编码中的每个操作数。可以例如通过前面添加I以产生6位指定符生成全寄存器指定符,以给出VSR32-63的存取。对于VSX指令,提供6位操作数指定符(即,全位范围指定符)用于指令编码中的每个操作数,因此不需要为了存取寄存器文件中的所有VSR而进行修改。
[0089]一个或者多个例示性实施例的窄和全寄存器指定符允许寄存器文件的“多可寻址”性质,这指代不同指令有效包含不同地址以及编码适配它们以重叠和使用寄存器文件的共享寻址的事实。由此,例如,具有6位000000的VSX寄存器前面添加寄存器指定符指向VSX寄存器O。具有5位00000的窄寄存器指定符的传统浮点指令指向同一寄存器,因为其重叠VSR寄存器的开始32个寄存器,并且其通过向5位窄寄存器指定符添加“O”而获得,以在本特定示例中给出000000。另一方面,5位00000的传统VMX窄寄存器指定符指向寄存器32 (VSR32到63范围中的第一个寄存器),并且通过向5位指定符添加“I”而获得,以在本特定示例中给出100000。
[0090]一旦获得前面添加寄存器指定符,则基于前面添加寄存器指定符寻址与操作码识别的指令类型相关联的寄存器子集中的寄存器,步骤650。可选地,可以基于指令类型确定位宽度,使得寄存器的第一集合的位与一种指令类型(例如,传统标量指令)相关联,并且寄存器的另一集合的位与另一指令类型(例如,传统矢量指令)相关联。该功能在上面被描述并且对于特定实现方式是可选的。因为它是可选的,所以未在图6中明确示出。
[0091]然后操作继续到步骤630,在步骤630中,来自被寻址的寄存器的例如操作数值的数据值被提供到计算/功能单元用于处理,步骤630,并且使用全寄存器指定符将结果写回到寄存器子集中的寄存器,步骤635。然后操作终止。
[0092]图7A和7B描绘概述根据一个例示性实施例的一个实现方式的解码操作的一个示例的流程图。如图7A和7B中所示,操作再次以接收来自指令取出单元的取出的指令开始,步骤710。基于取出的指令的操作码,解码逻辑确定取出的指令是否是VSX指令(或者其他所选类型的指令),询问715。如果操作码识别该指令为VSX指令,则提取宽位范围指定符,步骤720。宽位范围指定符可以寻址任何寄存器570 (即寻址全寄存器文件)以及那些寄存器中的所有位,步骤725。对应寄存器可以是整个寄存器文件中的任何寄存器。然后使用来自寄存器的数据计算该指令,该计算在任意输入和输出寄存器配对上进行,步骤730。换言之,VSX指令对寄存器文件中的任何寄存器操作,并且不限于特定子范围的寄存器。然后将计算的结果写回到寄存器文件中的适合寄存器,步骤735。
[0093]如果指令的操作码指示该指令不是VSX指令,询问715,则解码逻辑确定该指令操作码是否识别该指令为标量指令,例如,浮点指令等,询问740 (图7B)。如果指令操作码识别该指令为标量指令,则提取识别寄存器文件内的寄存器子集以及可选地识别寄存器的寄存器子集内的位子集的窄位范围指定符,步骤745。基于指令类型和窄位范围指定符生成全位范围指定符,步骤750。使用窄位范围指定符从与由操作码指定的指令类型相关联的寄存器子集(例如,寄存器的标量子集)提取数据,步骤755。数据提供到计算/功能单元,该计算/功能单元基于与寄存器文件中的寄存器的标量子集对应的输入和输出寄存器计算结果,步骤760。然后将计算的结果写回用于该指令类型的寄存器子集(例如,标量寄存器子集)中的适合寄存器,步骤765。
[0094]如果指令的操作码指示该指令不是标量指令,询问715,则提取再次识别寄存器文件内的寄存器子集以及可选地识别这些寄存器内的另一位子集的窄位范围指定符,步骤770。基于指令类型(例如,矢量、SMD或者VMX指令)和窄位范围指定符生成全位范围指定符,步骤775。使用全位范围指定符从与由操作码指定的指令类型相关联的寄存器子集(例如,寄存器的矢量子集)提取数据,步骤780。数据被提供到计算/功能单元,该计算/功能单元基于与寄存器文件中的寄存器的矢量子集对应的输入和输出寄存器计算结果,步骤785。然后将计算的结果写回该指令类型的寄存器子集(例如,矢量寄存器子集)中的适合寄存器,步骤790。然后操作终止。
[0095]从上面的描述可以看到,一个或者多个例示性实施例提供允许多个不同类型的寻址模式的寄存器文件和解码方法。例如,在第一寻址模式中,使用非连续(contiguous)编码,以基于第一指令类型(例如,VSX指令类型)从寄存器文件中的寄存器全集合中选择所有操作数寄存器。在第二寻址模式中,使用非连续编码,并且基于第二指令类型(例如,标量指令类型)选择寄存器文件中的寄存器全集合的第一范围的可寻址操作数寄存器。为每个操作数构建寄存器地址,以使得从第一范围的可寻址操作数寄存器获得用于该指令的所有操作数。
[0096]在第三寻址模式中,还使用连续编码,并且基于第三指令类型(例如,矢量指令类型)从寄存器文件中的寄存器全集合中选择第二范围的可寻址操作数寄存器。为每个操作数构建寄存器地址,以使得从第二范围的可寻址操作数寄存器获得用于该指令的操作数。该第二范围的操作数寄存器在一个示例中与第一范围的操作数寄存器不同,以使得第一范围内的寄存器不在第二范围的操作数寄存器中。
[0097]一个或者多个例示性实施例通过允许在处理传统标量、传统矢量和矢量-标量指令中使用单寄存器文件,改进了已知系统和处理器寄存器文件架构以及指令解码方法。这样,除了具有在各种指令类型之间兼容的数据格式的矢量-标量指令之外,还可以处理传统标量和矢量指令。此外,因为正在利用单寄存器文件,所以避免了与独立寄存器文件之间的切换相关联的开销。根据一个或者多个例示性实施例的寄存器共享减小了寄存器文件的芯片区域,并且允许利用统一寄存器文件,同时维持传统代码,而不建立独立的传统寄存器文件。一个或者多个例示性实施例允许传统和新/增强指令之间的数据共享,即传统指令可写入寄存器530或550之一,并且VSX指令可以组合来自任何或者所有寄存器570的值。
[0098]在本发明的另一方面中,提供用于在不同表示之间转变的能力。作为示例,当生产者指令是一个格式,并且产生要由不同格式的消费者指令消费的结果时,转换发生。在一个具体方面中,在处理器上执行的编译器确定该不匹配,并且在生产者和消费者指令之间插入适当转换指令,如参考图8A描述的。作为一个示例,图8描绘该逻辑的实施例,以确定转换是必要的或者期望的,并且选择和插入转换指令。在一个示例中,编译器执行该逻辑。然而,在其他实施例中,可以是处理器上的其他组件或者实体,或者在处理器上执行的其他组件或者实体。
[0099]参考图8,初始地,使用具有多个表示的数据类型在两个指令之间选择依赖性,步骤800。也就是,选择相互依赖的两个指令(例如,一个使用由另一个提供的值或者结果)用于处理。作出关于所选的指令(例如,生产者和消费者指令)是否与相同表示对应的判定,询问802。如果两个指令具有相同或者兼容的表示,则作出关于是否存在用以处理的更多依赖性的进一步判定,询问804。如果是,则处理继续步骤800。
[0100]转回询问802,如果生产者和消费者指令不与相同或者兼容的表示对应,则在指令流中的两个指令之间插入转换指令,步骤806。转换指令用于转换指令之一(例如,生产者指令)的数据到与另一指令(例如,消费者指令)兼容的格式。在一个示例中,要转换的数据在(转换指令中识别的)多可寻址寄存器文件中的一个寄存器中,并且转换后的数据放置在(也在转换指令中指示的)多可寻址寄存器文件的另一寄存器(或者相同寄存器)中。使用数据的指令从该寄存器获得转换后的数据。在一个示例中,编译器基于生产者和消费者指令确定要由转换指令使用的寄存器。生产者指令指示具有要转变或者转换的数据的寄存器,并且消费者指令提供其将使用来检索数据的寄存器的指示。处理继续询问804。
[0101]在一个实施例中,被插入的转换指令依赖于一个或者多个标准,如参考图9和10更详细描述的。图9涉及矢量到标量的转换,并且图10涉及标量到矢量的转换。依赖于转换的类型(例如,矢量-标量或者标量-矢量)选择这些技术之一。在一个示例中,包括图9和10的逻辑的这个逻辑由编译器执行。
[0102]初始参考图9,作出关于期望的格式转换是否将单精度矢量元素转换为单精度标量的判定,询问900。如果期望的格式转换是从单精度矢量元素转换到单精度标量的简单拷贝,则使用这里称为XSCVSPDPN的转换指令,步骤902。这个指令转换单精度矢量元素(32位浮点寄存器格式)到单精度标量(64浮点寄存器格式)。这个转换仅仅被视为物理格式改变而不是逻辑改变,并且因此,没有检测到或者发信号通知(signal)异常,并且发信号通知非数值(Not-a-Number,SNaN)输入被保存为返回结果中的SNaNs。也就是,对于编译器之外的任何实体或者组件而言透明地执行转换。因为没有产生(即,检测到和/或发信号通知)异常,所以认为该转换的执行与异常无关(即,没有或者不存在异常)。
[0103]转回询问900,然而,如果期望的格式转换不将单精度矢量元素转换到单精度标量元素,则在本实施例中使用这里称为XSCVSPDP指令的不同指令,步骤904。这个指令转换单精度矢量元素(32位浮点寄存器格式)到双精度标量(64位浮点寄存器格式)。这被视为真实逻辑和物理格式改变,并且因此,无效操作异常被检测到并且被发信号通知为信令NAN(非数值)。SNaN值被转换为返回结果中的QNaNs (安静(quiet) NaN)。
[0104]参考图10,在另一实施例中,做出关于期望的格式转换是否转换单精度标量数据到单精度矢量元素的判定,询问1000。如果期望的转换是简单拷贝并且单精度标量将被转换到单精度矢量元素,则做出关于值的拷贝的矢量是否要被创建的进一步判定,询问1002。如果值的拷贝的矢量将不被创建,则使用这里称为XSCVDPSPN的指令,该指令转换单精度标量(64位浮点寄存器格式)到单精度矢量元素(32位浮点寄存器格式),步骤1004。这仅被视为物理格式改变而不是逻辑改变,并且因此,没有检测到或者发信号通知异常,并且SNaN值被保存为返回结果中的SNaNs。同样,转换是透明的并且与异常无关地执行。返回询问1002,然而,如果要创建值的拷贝的矢量,询问1002,则使用这里称为XSCVSSPVSPSPLT的指令,步骤1006。这转换单精度标量(64位浮点寄存器格式)到单精度矢量元素(32位浮点寄存器格式),并且复制到所有四个矢量元素。同样,这仅仅被视为物理格式改变,没有检测到或者发信号通知异常,并且SNaN值被保存为返回结果中的SNaNs。
[0105]返回询问1 000,如果期望的格式转换不是单精度标量到单精度矢量元素的转换,则使用这里称为XSCVDPSP的指令,步骤1008。这个指令转换双精度标量(64位浮点寄存器格式)到单精度矢量元素(32位浮点寄存器格式)。在该情形下,该转换被视为真实逻辑以及物理格式改变,并且因此无效操作异常被检测到并且被发信号通知为信令NAN操作数。SNaN值被转换为返回结果中的QNaN。
[0106]上面描述的是可以在一个或者多个实施例中使用的多个转换指令。下面以及在作为本说明书的一部分而包含的 “RFC02242.r3:BFP/VSX Miscellaneous Operations (杂项操作)”中描述关于这些指令的进一步细节。
[0107]首先,提供关于XSCVSPDPN指令的进一步细节。在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段具有主要操作码,该主要操作码与另一字段的扩展操作码组合(例如,连接(concatenate)),以识别指令;第一字段(例如,T字段)和第一位(例如,TX字段;被连接的)用于指派第一寄存器;以及第二字段(例如,B字段)和第二位(例如,BX字段;被连接的)用于指派第二寄存器。样本伪代码如下:
[0108]reset_xf lags ()
[0109]src ^ VSR [32 X BX+B].word [0]
[0110]result (结果)一 ConvertSPtoDP_NS (src)
[0111]VSR[32 X TX+T].dword[0] — result
[0112]VSR[32XTX+T], dword[l] — OxUUUU_UUUU_UUUU_UUUU[0113]使XT为与T连接后的TX值。
[0114]使XB为与B连接后的BX值。
[0115]使src为VSR[XB]的字元素O中的单精度浮点值。
[0116]将src以双精度格式放置入VSR[XT]的双字元素O中。保留SNaN值的编码(SP,不转换为QNaN)。
[0117]未定义VSR [XT]的双字元素I的内容。
[0118]改变的特殊寄存器
[0119]无
[0120]XSCVSPDPN 的 VSR 数据布局
[0121]src=VSR [XB ]
[0122]128位的位0-31包括SP
[0123]tgt=VSR[XT]
[0124]128位的位0-63包括DP
[0125]另外,下面提供用于转换32位单精度矢量元素为64位单精度标量的代码片段示
例:
[0126]
【权利要求】
1.一种计算机程序产品,用于执行机器指令,所述计算机程序产品包括: 计算机可读存储介质,所述计算机可读存储介质可由处理电路读取并且存储用于由所述处理电路执行以执行方法的指令,所述方法包括: 由处理器获取用于执行的机器指令,所述机器指令被根据计算机架构定义用于计算机执行,所述机器指令包括: 至少一个操作码字段,识别转换指令; 至少一个用于指定第一寄存器的字段;以及 至少一个用于指定第二寄存器的其他字段; 由所述处理器执行所述机器指令,所述执行包括: 从所述第一寄存器获取第一格式的第一表示的单精度二进制浮点数据; 将所述第一格式的所述第一表示的单精度二进制浮点数据转换到第二格式的第二表示的转换后的单精度二进制浮点数据;以及 将所述转换后的单精度二进制浮点数据放置在所述第二寄存器中。
2.如权利要求1所述的计算机程序产品,其中,所述方法还包括: 确定所述第一格式的所述第一表示的单精度二进制浮点数据要被转换为所述第二格式的所述第二表示的单精度二进制浮点数据;以及响应于所述确定,获取转换指令。
3.如权利要求1所述的计算机程序产品,其中,由在所述处理器或者另一处理器上执行的编译器来执行所述确定。
4.如权利要求1所述的计算机程序产品,其中,所述第一寄存器和所述第二寄存器中的至少一个是多可寻址寄存器文件的寄存器。
5.如权利要求4所述的计算机程序产品,其中,所述多可寻址寄存器文件包括多个寄存器,并且其中,所述多个寄存器的第一子范围的寄存器被定义用于一个格式的数据,所述多个寄存器的第二子范围的寄存器被定义用于另一格式的数据,并且所述多个寄存器被定义用于至少一个附加格式的数据。
6.如权利要求5所述的计算机程序产品,其中,所述多个寄存器中的每个被定义为包括64b标量单精度浮点数据和32b矢量单精度浮点数据。
7.如权利要求1所述的计算机程序产品,其中,所述机器指令被插入在第一指令和第二指令之间,所述第二指令具有对所述第一指令的依赖性,并且所述第一指令产生具有与所述第二指令使用的格式不同的格式的数据。
8.如权利要求7所述的计算机程序产品,其中,所述第一寄存器包括要转换的所述第一指令的数据。
9.如权利要求1所述的计算机程序产品,其中,所述第一表示包括矢量表示并且所述第一格式包括32位以及所述第二表示包括标量表示并且所述第二格式包括64位,或者所述第一表示包括标量表示并且所述第一格式包括64位以及所述第二表示包括矢量表示并且所述第二格式包括32位。
10.如权利要求1所述的计算机程序产品,其中,所述转换指令包括复制函数。
11.如权利要求1所述的计算机程序产品,其中,所述转换后的单精度二进制浮点数据包括信令非数值(NaN),并且其中所述信令NaN在所述第二寄存器中保留为信令NaN。
12.一种用于执行机器指令的计算机系统,所述计算机系统包括: 存储器;以及 与所述存储器通信的处理器,其中,所述计算机系统被配置为执行方法,所述方法包括: 由处理器获取用于执行的机器指令,所述机器指令被根据计算机架构定义用于计算机执行,所述机器指令包括: 至少一个操作码字段,识别转换指令; 至少一个用于指定第一寄存器的字段;以及 至少一个用于指定第二寄存器的其他字段; 由所述处理器执行所述机器指令,所述执行包括: 从所述第一寄存器获取第一格式的第一表示的单精度二进制浮点数据; 将所述第一格式的所述第一表示的单精度二进制浮点数据转换到第二格式的第二表示的转换后的单精度二 进制浮点数据;以及 将所述转换后的单精度二进制浮点数据放置在所述第二寄存器中。
13.如权利要求12所述的计算机系统,其中,所述方法还包括: 确定所述第一格式的所述第一表示的单精度二进制浮点数据要被转换为所述第二格式的所述第二表示的单精度二进制浮点数据;以及响应于所述确定,获取转换指令。
14.如权利要求12所述的计算机系统,其中,所述第一寄存器和所述第二寄存器中的至少一个是多可寻址寄存器文件的寄存器,并且其中,所述多可寻址寄存器文件包括多个寄存器,并且其中,所述多个寄存器的第一子范围的寄存器被定义用于一个格式的数据,所述多个寄存器的第二子范围的寄存器被定义用于另一格式的数据,并且所述多个寄存器被定义用于至少一个附加格式的数据。
15.如权利要求14所述的计算机系统,其中,所述多个寄存器中的每个被定义为包括64b标量单精度浮点数据和32b矢量单精度浮点数据。
16.如权利要求12所述的计算机系统,其中,所述机器指令被插入在第一指令和第二指令之间,所述第二指令具有对所述第一指令的依赖性,并且所述第一指令产生具有与所述第二指令使用的格式不同的格式的数据。
17.如权利要求12所述的计算机系统,其中,所述第一表示包括矢量表示并且所述第一格式包括32位以及所述第二表示包括标量表示并且所述第二格式包括64位,或者所述第一表示包括标量表示并且所述第一格式包括64位以及所述第二表示包括矢量表示并且所述第二格式包括32位。
18.一种执行机器指令的方法,所述方法包括: 由处理器获取用于执行的机器指令,所述机器指令被根据计算机架构定义用于计算机执行,所述机器指令包括: 至少一个操作码字段,识别转换指令; 至少一个用于指定第一寄存器的字段;以及 至少一个用于指定第二寄存器的其他字段; 由所述处理器执行所述机器指令,所述执行包括:从所述第一寄存器获取第一格式的第一表示的单精度二进制浮点数据; 将所述第一格式的所述第一表示的单精度二进制浮点数据转换到第二格式的第二表示的转换后的单精度二进制浮点数据;以及 将所述转换后的单精度二进制浮点数据放置在所述第二寄存器中。
19.如权利要求18所述的方法,其中,所述第一寄存器和所述第二寄存器中的至少一个是多可寻址寄存器文件的寄存器,并且其中,所述多可寻址寄存器文件包括多个寄存器,并且其中,所述多个寄存器的第一子范围的寄存器被定义用于一个格式的数据,所述多个寄存器的第二子范围的寄存器被定义用于另一格式的数据,并且所述多个寄存器被定义用于至少一个附加格式的数据。
20.如权利要求18所述的方法,其中,所述机器指令被插入在第一指令和第二指令之间,所述第二指令具有对所述第一指令的依赖性,并且所述第一指令产生具有与所述第二指令使用的格式不同的格式的数据。
21.一种数据处理系统中用于处理指令的计算机程序产品,所述计算机程序产品包括: 计算机可读存储介质,所述计算机可读存储介质可由处理电路读取并且存储用于由所述处理电路执行以执行方法的指令,所述方法包括: 确定接收到的指令的指令类型;` 基于所述指令类型存取多可寻址寄存器文件;以及 基于存取所述多可寻址寄存器文件的结果使用所述数据处理系统中的至少一个功能单元来处理所述指令,其中,所述多可寻址寄存器文件包括与第一指令类型的第一指令相关联的第一寄存器子集和与第二类型的第二指令相关联的第二寄存器子集,并且其中,第三指令类型的第三指令和第四指令类型的第四指令存取包括所述第一寄存器子集中的寄存器和所述第二寄存器子集中的寄存器的所述多可寻址寄存器文件的整个寄存器集合中的寄存器,其中,所述第一指令类型是标量指令类型,所述第二指令类型是浮点指令类型,所述第三指令类型是64位单精度浮点指令类型,并且所述第四指令类型是32位矢量单精度浮点指令类型。
【文档编号】G06F9/30GK103797459SQ201280045033
【公开日】2014年5月14日 申请日期:2012年9月5日 优先权日:2011年9月16日
【发明者】M.K.格什温, B.奥尔森 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1