CN103797459B - 执行机器指令的方法和系统 - Google Patents

执行机器指令的方法和系统 Download PDF

Info

Publication number
CN103797459B
CN103797459B CN201280045033.7A CN201280045033A CN103797459B CN 103797459 B CN103797459 B CN 103797459B CN 201280045033 A CN201280045033 A CN 201280045033A CN 103797459 B CN103797459 B CN 103797459B
Authority
CN
China
Prior art keywords
instruction
depositor
precision
vsr
value
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201280045033.7A
Other languages
English (en)
Other versions
CN103797459A (zh
Inventor
M.K.格什温
B.奥尔森
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
International Business Machines Corp
Original Assignee
International Business Machines Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by International Business Machines Corp filed Critical International Business Machines Corp
Publication of CN103797459A publication Critical patent/CN103797459A/zh
Application granted granted Critical
Publication of CN103797459B publication Critical patent/CN103797459B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30025Format conversion instructions, e.g. Floating-Point to Integer, decimal conversion
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • G06F9/30014Arithmetic instructions with variable precision
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • G06F9/30105Register structure
    • G06F9/30112Register structure comprising data of variable length
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30181Instruction operation extension or modification
    • G06F9/30185Instruction operation extension or modification according to one or more bits in the instruction, e.g. prefix, sub-opcode

Abstract

由包括矢量、标量和矢量‑标量扩展指令的多种类型的指令寻址多可寻址寄存器文件。可以确定数据要从一个格式转变为另一格式。如果如此确定,则执行转换机器指令,该转换机器指令从第一寄存器获取第一格式的第一表示的单精度数据;将第一格式的第一表示的单精度数据转换到第二格式的第二表示的转换后的单精度数据;以及将转换后的单精度数据放置在第二寄存器中。

Description

执行机器指令的方法和系统
技术领域
本申请的一个或者多个方面总地涉及数据处理,并且尤其涉及多可寻址寄存器文件和与其相关联的处理。
背景技术
高性能处理器支持使用单指令多数据(SIMD)技术的多媒体处理,以开发程序中的指令级并行性。也就是,SIMD技术用于每次执行不止一个操作。这些处理器包含多个功能单元,该多功能单元中的一些被引导至标量数据的执行,并且该多个功能单元中的一些被聚集用于处理结构化的SIMD矢量数据的处理。SIMD数据流用于例如使用通过在结构化数据类型中编码红色、绿色和蓝色分量的RGB格式或者通过将位置编码为四元(x,y,z,w)的坐标信息,表示诸如颜色信息之类的多媒体数据类型。
通过增量现有标量处理器实现方式,已经实现了设计用于处理多媒体数据的处理器,比如通过增加SIMD单元,SIMD单元本身包括多个功能单元(即,定点单元和浮点单元),镜像可用于标量数据类型的处理的资源,并且针对要由SIMD架构支持的结构化元素的数量复制每个功能单元类型。
支持多媒体处理以及其他处理的处理器可以处理不同类型的数据。然而,要提供管理这种处理的工具。
发明内容
通过提供用于执行机器指令的计算机程序产品克服现有技术的缺点并且提供附加优点。该计算机程序产品包括存储介质,该存储介质可由处理电路读取并且存储用于由处理电路执行以执行方法的指令。该方法比如包括:由处理器获取用于执行的机器指令,根据计算机架构定义该机器指令用于计算机执行,该机器指令例如包括:至少一个操作码字段,以识别转换指令;至少一个用于指定第一寄存器的字段;以及至少一个用于指定第二寄存器的其他字段;由处理器执行该机器指令,该执行比如包括:从第一寄存器获取第 一格式的第一表示的单精度二进制浮点数据;将第一格式的第一表示的单精度二进制浮点数据转换到第二格式的第二表示的转换后的单精度二进制浮点数据;以及将转换后的单精度二进制浮点数据放置在第二寄存器中。
这里也描述并且要求保护涉及本发明的一个或者多个方面的方法和系统。另外,涉及本发明的一个或者多个方面的服务这里也被描述并可以被要求保护。
通过本发明的一个或者多个方面的技术实现附加特征和优点。本发明的其他实施例和方面在这里被详细描述并且被视为要求保护的发明的一部分。
附图说明
本发明的一个或者多个方面作为说明书结论处的权利要求中的示例被具体指出并且被清楚地要求保护。本发明的一个或者多个方面的前述和其他目的、特征和优点从下面结合附图的详细描述中变得易见,在附图中:
图1是描绘包括用于处理结构化数据类型的SIMD单元标量和处理单元二者的处理器的示例;
图2是其中可以实现例示性实施例的一个或者多个方面的数据处理系统的一个示例;
图3A是设计用于使用存储标量和矢量数据二者的寄存器文件以及地址信息执行标量和矢量指令的处理器的一个示例;
图3B示出用以选择可以由处理器的分支单元和加载/存储单元使用的信息的标量数据的更灵活途径;
图4是其中根据一个例示性实施例利用多寻址寄存器文件的处理器的一个示例;
图5是根据一个例示性实施例的矢量-标量扩展(VSX)寄存器文件的一个示例;
图6描绘根据一个例示性实施例概述一般解码操作的逻辑的一个示例;
图7A和7B提供根据一个例示性实施例概述解码操作的逻辑的一个示例;
图8描绘用于根据例示性实施例将转换指令插入指令流中的逻辑的一个示例;
图9描绘用于根据例示性实施例选择用于转换矢量元素到标量的转换指 令的逻辑的一个示例;
图10描绘用于根据例示性实施例选择用于转换标量数据到矢量元素的转换指令的逻辑的一个示例;以及
图11描绘并入本发明的一个或者多个方面的计算机程序产品的一个实施例。
具体实施方式
根据本发明的一个方面,便于与标量和矢量数据相关联的处理。在一个方面中,提供寄存器文件,其中,寄存器文件中的每个寄存器可以包括64位(b)单精度浮点标量数据或者32b单精度矢量数据,以及其他数据格式。另外,在一个方面中,提供转换技术,以从一个单精度浮点格式转换到另一单精度浮点格式。在一个示例中,使用架构指令(architectedinstruction)执行转换,并且不需要发信号通知异常。
如上面早先讨论并且另外在共同转让的、Gschwind等人的、名称为“Multi-Addressable Register File”的2009年8月6日公开的美国公开第2009/0198966A1以及Gschwind等人的、名称为“Multi-Addressable Register File”的2011年1月25日授权的美国专利No.7,877,582,(这里通过引用将每个的全部内容并入本文)中,通过增量(augment)现有标量处理器实现方式,已经实现了设计用于处理多媒体数据的处理器,比如通过增加SIMD单元,SIMD单元本身包括多个功能单元(即,定点单元和浮点单元),其镜像可用于标量数据类型的处理的资源,并且针对要由SIMD架构支持的结构化元素的数量复制每个功能单元类型。通常,在标量和SIMD处理器之间共享的仅有单元是发布逻辑(issue logic)和加载/存储单元(LSU),该发布逻辑发布指令到标量或者SIMD处理块,该加载/存储单元(LSU)管理对存储器子系统的存取。包括寄存器文件的所有其他单元典型地被独立维护。
图1是描绘包含标量处理单元和用于处理结构化数据类型的SIMD单元二者的现有技术处理器的示例的框图,SIMD单元包括用于结构化数据类型中的每个元素的多个处理单元。一般地,使用独立的标量和SIMD处理器效率低并且昂贵,这是因为这种配置包括多个冗余功能单元和数据通道。另外,这种实现方式导致不期望的能量消耗量,因为当标量或者SIMD单元之一正在处理数据时,另一个一般通过等待其下一指令而空闲,但始终都在消耗系 统电力。
在图1的系统的操作期间,指令由指令取出单元100取出,并且供应给指令解码单元102。解码后的指令被传递给发布/分支单元104,其中分支指令被解决,并且其他指令可以被存储在其指令发布单元(未示出)中,直至它们可以在处理器的功能单元之一中执行。指令发布单元可以包含支持指令的高性能发布的预测逻辑、指令重排序逻辑、指令发布缓冲器和其他逻辑。
指令由发布/分支单元104发布到加载/存储单元106、定点单元(FXU)108、浮点单元(FPU)单元110或者SIMD处理块112中的一个或者多个。在指令可以由一个或者多个处理单元处理之前,在作为很多当前处理器中出现的SIMD多媒体扩展的一部分的寄存器文件(例如,整数存储器文件114、浮点寄存器文件116或者矢量寄存器文件118)中通常需要一个或者多个寄存器存取。
SIMD多媒体处理块112典型包含矢量寄存器文件118,用于存储结构化数据(通常为具有四个元素的矢量)。矢量寄存器文件118可以被分段为四个子寄存器文件,每个存储结构化数据的单个字段。SIMD多媒体处理器块112可以包含若干类型的功能单元,针对多媒体扩展支持的结构化数据类型中的元素数量复制(replicate)每个类型。在图1中,示出被复制四次的定点单元119和浮点单元120,以便每个处理一个结构元素,如在VMX多媒体扩展中可以找到的。
可以看到,在提供标量和SIMD指令执行二者的情况下,CPU可能遇到的各种类型的指令通常要求独立可寻址寄存器文件。例如,如图1中示出,提供独立的整数寄存器文件114、浮点寄存器文件116和矢量寄存器文件118。在开销以及功率消耗方面,以这种方式具有独立的寄存器文件昂贵。具有多个寄存器文件意味着,在执行代码时,该代码要在各种寄存器文件之间切换或者移动。这使得代码生成在与在各种寄存器文件之间的移动相关联的开销方面昂贵。此外,代码的编译器可能需要更多的与寄存器文件导致寄存器文件碎片相关联的一个或者另一个资源集合。另外,在CPU的微架构中具有独立资源增加与CPU的制造相关联的成本以及与功率消耗、散热等相关联的成本。
上面描述的处理器实现方式是先有技术系统的一个示例;在一些实现方式中,一些寄存器文件可以被共享,例如,可以存在组合的整数和浮点寄存 器文件,或者附加的寄存器文件,诸如用于比较结果的断定寄存器文件或者条件寄存器文件。在美国专利第6,839,828(Gschwind等,名称为“SIMD Datapath Coupled to Scalar/Vector/Address/Conditional Data Register File with Selective Subpath Scalar ProcessingMode”,2004年1月4日授权,以引用的方式这里将其全部内容并入本文)中描述的一个具体示例中,与被设计为在用于处理矢量和标量指令的多个模式中操作的处理器一起,描述了组合的标量/矢量可寻址寄存器文件。耦合到寄存器文件的并行矢量单元包括可配置为在矢量运算模式和标量运算模式中操作的功能单元。该矢量单元包括用于紧密地耦合功能单元以执行由当前指令指定的操作的装置。在矢量运算模式下,矢量单元并行地对多个数据元素执行单个矢量运算。对多个数据元素执行的运算各自由矢量单元的不同功能单元执行。在标量运算模式下,矢量单元对从矢量单元内的功能单元中的寄存器文件接收到的数据元素执行标量运算。
在美国专利No.6,839,828的机制提供将不同类型的指令/数据存储在寄存器文件中的能力时,为了实现这个能力,‘828专利阐述了新架构。然而,这个新架构没有提供多可寻址能力,即,基于指令类型(例如,传统标量、传统矢量或者新指令类型)寻址寄存器文件中的寄存器的不同方式。
这里以及美国专利No.7,877,582中描述的一个或者多个例示性实施例提供多可寻址寄存器文件。这种多可寻址寄存器文件可以在数据处理系统的处理器中实现。这种数据处理系统可以具有一个或者多个处理器,其中每个处理器或者处理器的子集可以实现例示性实施例的多可寻址寄存器文件。根据一个或者多个例示性实施例,处理器具有多可寻址寄存器文件的数据处理系统的类型可以很大地变化,并且由此,本说明书不可能陈述每个这种可能的处理器架构。然而,为了说明的目的,提供图2作为其中可以实现一个或者多个例示性实施例的多可寻址寄存器文件的数据处理系统的一个类型的示例。
现在参考图2,示出其中可以实现一个或者多个例示性实施例的方面的示例性数据处理系统的框图。数据处理系统200是其中可以设置实现本发明的一个或者多个例示性实施例的处理的计算机可用代码或者指令的计算机的示例。
在描绘的示例中,数据处理系统200利用集线器架构,该集线器架构包括北桥和存储器控制器集线器(NB/MCH)202以及南桥和输入/输出(I/O) 控制器集线器(SB/ICH)204。处理单元206、主存储器208和图形处理器210连接到NB/MCH 202。图形处理器210可以通过加速图像端口(AGP)连接到NB/MCH 202。
在描绘的示例中,局域网(LAN)适配器212连接到SB/ICH 204。音频适配器216、键盘和鼠标适配器220、调制解调器222、只读存储器(ROM)224、硬盘驱动器(HDD)226、CD-ROM驱动器230、通用串行总线(USB)端口和其他通信端口232、以及PCI/PCIe设备234通过总线238和总线240连接到SB/ICH 204。PCI/PCIe设备例如可以包括以太网适配器、插入卡和用于笔记本电脑的PC卡。PCI使用卡总线控制器,而PCIe不使用。ROM 224例如可以是快闪(flash)二进制输入/输入系统(BIOS)。
HDD 226和CD-ROM驱动器230通过总线240连接到SB/ICH 204。HDD 226和CD-ROM驱动器230可以例如使用集成驱动电路(IDE)或者串行高级连接技术(SATA)接口。超级I/O(SIO)设备236可以连接到SB/ICH 204。
操作系统在处理单元206上运行。操作系统协调并且提供图2中的数据处理系统200内的各种组件的控制。作为客户端,操作系统可以是商业可得的操作系统,诸如XP(Microsoft和Windows是Microsoft Corporation(微软公司)在美国、其他国家或者二者的商标)或者操作系统(Linux是Linus Torvalds在美国、其他国家或者二者的商标)。面向对象的程序系统(诸如JavaTM程序系统)可以与操作系统结合地运行,并且从在数据处理系统200上执行的JavaTM程序或者应用提供对操作系统的调用(Java是Sun Microsystems,Inc.(太阳微系统公司)在美国、其他国家或者二者的商标)。
作为服务器,数据处理系统200例如可以是eServerTMSystem计算机系统,其运行高级交互执行操作系统或者操作系统(eServer,System和AIX是International Business Machines Corporation(国际商业机器公司)在美国、其他国家或者二者的商标)。数据处理系统200可以是对称多处理器(SMP)系统,其在处理单元206中包括多个处理器,诸如从New York(纽约州)Armonk(阿蒙克)的国际商业机器公司可获得的 处理器。可替代地,可以利用单处理器系统。
用于操作系统、面向对象的程序系统和应用或者程序的指令位于存储设备上,诸如HDD 226之类,并且可以被加载到主存储器208中,用于由处理 单元206执行。一个或者多个例示性实施例的处理可以由处理单元206使用计算机可用程序代码执行,该计算机可用程序代码可以位于存储器(该存储器诸例如为主存储器208、ROM 224之类)中,或者例如一个或者多个外围设备226和230中。
诸如总线238或者总线240之类的总线系统,如图2中所示,可以包括一个或者多个总线。当然,总线系统可以使用提供用于在附接到通信光纤(fabric)或者架构的不同组件或者设备之间传递数据的任何类型的通信光纤或者架构实现。诸如图2的调制解调器222或者网络适配器212之类的通信单元可以包括用于发送和接收数据的一个或者多个设备。存储器例如可以是主存储器208、ROM 224或者高速缓存,诸如图2中的NB/MCH 202中所存在的。
本领域的技术人员将认识到图1-2中的硬件可以依赖于实现方式而变化。附加在图1-2中描绘的硬件之外或者替代图1-2中描绘的硬件,可以使用诸如闪存、等效非易失性存储器或者光盘驱动器等其他内部硬件或者外围设备。此外,在不脱离本发明的一个或者多个方面的精神和范围的情况下,一个或者多个例示性实施例的处理器可以应用于不同于之前提及的SMP系统的多处理器数据处理系统。
此外,数据处理系统200可以采用多个不同数据处理系统中任一个的形式,包括客户端计算设备、服务器计算设备、平板计算机、膝上型计算机、电话或者其他通信设备、个人数字助理(PDA)等。在一些例示性示例中,数据处理系统200可以是便携式计算设备,便携式计算设备配置闪存,提供非易失性存储器,用于例如存储操作系统文件和/或用户生成的数据。本质上,数据处理系统200在没有架构限制的情况下,可以是任何已知或者后来开发的数据处理系统。
如上面讨论,一个或者多个示例性实施例提供多可寻址寄存器文件。一个或者多个例示性实施例通过提供大量寄存器和利用第一指令集寻址第一寄存器子集、利用第二指令集寻址第二寄存器子集以及利用至少第三指令集寻址整个寄存器文件的能力,增加寄存器文件的容量来改进已知寄存器文件。根据一个或者多个例示性实施例,第一和第二寄存器子集不重叠,并且指向不同的寄存器文件区域,诸如“类型1的指令的寄存器”和“类型2的指令的寄存器”。与类型1的指令对应的子集内包含的寄存器不可以被类型2的指令存 取,并且反之亦然。在一个例示性实施例中,类型1指令与IBM Power架构FPU或者传统浮点指令对应,类型2指令与IBM Power架构传统VMX指令对应,并且类型3指令与IBM Power架构VSX指令对应。
一个或者多个例示性实施例的机制与已知的群集寄存器文件、寄存器文件内的操作数子范围、具有“在寄存器文件之间移动”指令的存储器以及使用具有非连续寄存器指定符(specifier)的子范围的形式的VMX128寄存器文件不同。利用操作数子范围,典型地,仅存在用于一个操作数(即,一种类型的指令)的一个子范围。不存在具有可以寻址寄存器文件中的所有寄存器的另一形式的其他指令类型,并且不存在用于另一类型的指令的寄存器的其他范围,即,不存在多可寻址性功能。群集寄存器文件包括具有可由不同指令寻址的子范围的大寄存器文件,但是不存在可以寻址寄存器文件中的所有寄存器的指令类型。相反,如果要对寄存器的全集合执行操作,则要对寄存器文件执行移动/拷贝操作。这些移动/拷贝操作通常是可以要求特殊调度机制的更慢的操作。
相反,一个或者多个例示性实施例基于指令类型(例如,传统浮点、传统标量、矢量-标量、增强或扩展的矢量-标量等)提供对多可寻址寄存器文件的寄存器的存取。不是与一个操作数类型相关联的一个寄存器子集,而是一个或者多个例示性实施例的多可寻址寄存器文件提供多个不相交的寄存器子集。与各种类型的指令相关联的多可寻址寄存器文件中的多个寄存器子集是寄存器的连续范围。此外,利用一个或者多个例示性实施例,虽然不同类型的指令可以存取多可寻址寄存器文件中的非重叠寄存器子集,但是至少一种类型的指令也可以存取多可寻址寄存器文件中的所有寄存器。
在一个具体实施例中,根据本发明的一个方面,不同类型的指令可以存取多可寻址寄存器文件中的非重叠寄存器子集,并且多种类型的指令(例如,64b标量单精度浮点指令和32b矢量单精度浮点指令)可以存取多可寻址存储器文件中的所有寄存器。
在本发明的另一方面中,一个或者多个例示性实施例通过包括使用同一寄存器文件来执行标量、矢量和浮点指令的能力,扩展已知标量/矢量寄存器文件,其中基于正在执行的指令的类型动态地确定待存取的寄存器文件的部分。因为一个或者多个例示性实施例改进已知标量/矢量寄存器文件以及使用这种标量/矢量寄存器文件的处理器,所以提供了这种处理器和标量/矢量寄存 器文件的基本操作的理解。图3A和3B的下面描述引用共同转让的美国专利No.6,839,828作为这种已知标量/矢量寄存器文件和处理器的示例。
图3A是根据美国专利No.6,839,828被设计为使用存储标量和矢量数据两者的寄存器文件以及地址信息执行标量和矢量指令二者的处理器的一个示例示意图。在图3A中所示的处理器中,标量和SIMD数据通道处理能力已经与现在将标量处理包括在内的SIMD矢量数据通道组合。在用于处理矢量数据类型的一个元素的单元之一中发生标量处理。该数据单元被指派为“优选槽”并且提供分支单元和加载/存储单元的地址,如下面将描述。为了简化,图3A中的统一处理器的描绘仅仅包括数据流连接,而不包括控制信号连接和外部系统接口,例如,地址线、与存储器的连接等。后面这些连接被采用。
图3A的统一处理器包括指令取出单元300,指令取出单元300基于取出单元的程序计数器的值从系统的存储器层级系统(未示出)取出指令和数据。由指令取出单元300提供取出的指令到解码单元302,在解码单元302中它们被解码并且展开至适当的控制信号,以控制下游单元。展开的指令被传递到发布/分支单元304,在发布/分支单元304中其被放置到指令队列中以等待适当功能单元的可用性,以进行处理。在指令是分支的事件中,将控制返回指令取出单元300,指令取出单元300取出分支-目标指令,并且重复以上处理。
在标量运算的情形下,当功能单元(即,定点单元或者浮点单元)变得可用,或者在矢量运算的情形下,当多个功能单元变成可用时,发布/分支单元304发布指令到一个或者多个功能单元。在可以执行计算之前,通过存取标量-矢量寄存器文件(SVRF)310检索源操作数数据。典型提供多个类型的功能单元,例如定点单元、浮点单元和加载/存储单元(LSU)306,其从存储器层级体系取出由当前指令识别的数据以及向存储器层级体系存储由当前指令识别的数据。LSU 306经由总线308将存储器存取的结果存储回组合的SVRF 310。在本实施例中,SVRF 310存储由四个标量数据字组成的数据线,每条线被划分,以使得四个数据字中的每个与不同的功能单元对(或者集合)311-314相关联,每个功能单元对包括定点单元和浮点单元,如所示。功能单元对组成这里称为平行矢量单元的东西。
发布逻辑引导SVRF 310传递数据线的内容到功能单元的每个集合内的适当功能单元,以进行处理。可以存在与发布槽相关联的任何数量和类型的 功能单元,包括但不限于定点单元、浮点单元、比较单元、逻辑运算单元、移位单元等。集合内将使用数据字的特定功能单元将依赖于要执行的指令,并且由来自发布/分支单元304的信号控制。由此,如果指令要求定点单元对数据操作,则将数据经由线315-318传递到定点单元319-322。如果指令数据要求浮点单元327-330,则将经由线323-326传递数据。如果存在其他功能单元,则将数据类似地传递到它们。当每个指派的功能单元已经对输入数据执行了其操作,则将结果传递回SVRF 310,在SVRF 310中,其被存储直至被LSU 306请求,或者传递到用于其它操纵的功能单元。
由通过发布/分支单元304提供的控制信号确定要由功能单元执行的操作以及执行这些操作的功能单元。当操作引导LSU 306从SVRF 310读取数据时,数据经由总线332传递。此外,数据要在存储器中存储到的地址经由总线331传递到LSU 306。在图3A的实施例中,地址总线331从SVRF 310的区段(D)传递信息,该SVRF 310的区段(D)与功能单元对314相关联(该对被指派为优选槽,如稍后描述)。通过定义功能单元作为优选槽,或通过动态地确定优选槽,或者通过设置控制寄存器以指定指令字中的槽,或通过使用任何其他手段(例如,在发布时间由发布单元)对其进行确定,优选槽可以是任何功能单元。优选槽的指派允许功能单元的选择性断电,以导致电力节省。
对于这一点,统一处理器的所描述的操作已经应用于标量和矢量运算二者。也就是,如果要执行的操作是标量运算,由此要求仅一个功能单元对的操作和输出,则其余功能单元对不论如何也可以被引导,以对从标量矢量寄存器文件传递到它们的数据执行相同的操作。这种方法允许设计的简单性,因为为了要求不同的功能单元同时执行不同操作必须引入复杂设计的考虑。同样,对于矢量运算,每个功能单元将对输入数据执行相同的操作(或者基本相同的操作,作为紧密耦合的操作的部分,或者作为由单个指令指定的紧密耦合的操作的组合的部分)。
根据操作的解释,由使用相关联的地址信息的方式区分标量和矢量运算。该操作的解释可以是其操作代码的直接结果,也就是,不同操作代码可以可用于不同指令(例如,“加载标量字节”、“加载标量字”、“加载标量矢量”),或者可以依赖于系统的另一部分(例如,模式标签位)来解释单个“加载”操作码。即使标量数据跨越字节的地址范围(尽管比矢量的字节少),并且也存 在加载/存储可以如何操作的变型。
不像典型地分配到SVRF 310内的特定槽的其他功能单元,LSU 306对SVRF 310中包含的整条数据线或者其子集进行操作。LSU 306依赖于由发布/分支单元304发布的指令,在加载或者存储模式中操作。在加载模式中,LSU 306使用总线331从SVRF 310的优选槽接收到地址信息,并且加载来自指定地址的数据。当正在执行加载矢量指令时,加载操作使用总线308将整条数据线从存储器加载到SVRF 310。当指定加载标量操作时,加载操作将至少加载与标量类型(典型地,字节、半字、字等)的尺寸对应的位数。可以根据实现方式选取、或者无效数据加载附加位,或者被初始化到默认值(诸如但不限于“0”)的数据可以被提供用于所请求的数据类型的范围之外的这些位。在一个实施例中,“加载标量”操作包括对齐(alignment)步骤,其中,请求的标量值在存储到SVRF 310中之前被在优选槽中对齐。在另一实施例中,使用一个或者多个指令的序列以编程方式执行对齐。
在操作的存储模式中,LSU 306借助总线332从SVRF 310接收要存储的数据,以及使用总线331从SVRF 310的优选槽接收地址信息,并且存储数据到指定的地址。
图3B示出用以选择可以由根据美国专利No.6,839,828的分支单元和LSU使用的信息的标量数据的更灵活的方法。根据本实施例,SVRF 310的各个区段可借助多路复用器333选择,多路复用器333可以利用经由线334来自发布/分支单元304的控制输入(其典型来自要执行的指令的指令字中的字段)来控制。替代实施例可以包括,但不限于,软件控制的特定目的寄存器或者启动时参数,以供应多路复用器的控制输入。
图3B中所示的实施例按下面操作。当用以供应用于操作的存储器地址的加载/存储单元、或者用以供应例如分支目标地址或者分支条件的分支单元、或者要求向所有元素应用单个移位计数的移位单元、或者可以要求标量数据值作为其输入的任何其他单元,要求标量数据值时,多路复用器333由控制输入操纵,以选择槽A、B、C或者D之一作为用于操作的标量输入。由此,根据本实施例,任何功能单元对都可被选择为“选优槽”,以允许平衡处理操作,减少多个槽之间的传递操作的需要,并且增加可以存储标量值的槽的数量。
由此,美国专利No.6,839,828描述用于标量处理的优选槽的两种不同实 现方式。第一种是硬接线(hardwired)实现方式(在设计阶段选择优选槽),以及执行期间的可变方式(可以在飞行中(on the fly)选择优选槽)。如‘828专利中提及,设计时的优选槽的指派可以简化实现方式,因为不需要提供上面描述的选择。此外,使用相同的功能单元对可能更有效,即使具有优选槽的运行从不使用的无用电路的稍微开销成本。
虽然美国专利No.6,839,828的寄存器文件机制和其他寄存器文件机制允许单个寄存器文件用于标量和矢量运算,但是这些寄存器文件机制不提供多可寻址性,而仅仅提供用以在单寄存器文件中存储不同类型的指令/数据的能力。已经提供了复杂架构和/或操作来处理单寄存器文件中的不同类型的指令/数据。
相反,一个或者多个例示性实施例提供多可寻址寄存器文件,该多可寻址寄存器文件允许传统指令和一个或者多个新或者增强类型的指令二者存取多可寻址寄存器文件的寄存器。利用一个或者多个例示性实施例的机制,可以使用标量和单指令多数据(SIMD)或者矢量指令二者寻址单个寄存器文件。也就是,根据一个或者多个例示性实施例的多可寻址寄存器文件内的寄存器子集可利用不同的指令形式(例如,标量指令、SIMD或者矢量指令等)寻址,而利用再一形式的指令(本文称为矢量-标量扩展(VSX)指令)可以寻址寄存器的整个集合。可以使用VSX指令形式对寄存器的整个集合执行的操作的类型(即,操作集合)基本与寄存器子集的操作集合的操作的类型类似。
一个或者多个例示性实施例的多可寻址寄存器文件允许传统指令存取多可寻址寄存器文件内的寄存器子集,而新或者增强的指令(例如,VSX指令)可以存取多可寻址寄存器文件内的寄存器的整个范围。此外,传统指令的数据格式与VSX指令的数据格式兼容。由此,由传统指令生成的数据可以由VSX指令处理,并且反之亦然。
例如,一个或者多个例示性实施例允许传统浮点指令(标量运算)在寄存器文件的第一寄存器子集(例如,VSX寄存器0-31)中存储的值上工作;传统VMX指令(矢量运算)在寄存器文件中的第二寄存器子集(例如,VSX寄存器32-63)上工作(而继续引用实际指令中的寄存器0-31);以及VSX指令(矢量-标量运算)在寄存器文件的所有寄存器(例如,VSX寄存器0到63)上操作。一个或者多个例示性实施例还允许不同类型的指令使用各种寄存器子集以及VSX指令存取寄存器文件的所有寄存器的能力来共享数据。例 如,可以通过在VSX寄存器0到31中存储并且存取数据而在VSX和传统浮点指令之间共享数据。类似地,一个或者多个例示性实施例允许在传统VMX指令和VSX指令之间在VSX寄存器32和63中共享数据,同时继续执行使用传统浮点和传统VMX指令之一或者二者的程序,而不需要任何修改。此外,一个或者多个例示性实施例允许在不需要任何修改的情况下将使用传统浮点和传统VMX指令中的一个或者二者的代码模块链接到利用新VSX指令的代码模块,以及在利用传统指令计算的代码模块和使用VSX指令的代码模块之间共享数据。
在一个具体实施例中,根据本发明的一个方面,VSX指令包括64b标量单精度浮点指令和32b矢量单精度浮点指令、以及可能的其他指令。在作为该具体描述的一部分而包括的RFC02182.r6:VSX标量单精度中描述64b标量单精度浮点指令的示例。
图4是其中根据一个例示性实施例利用多可寻址寄存器文件的处理器的图的一个示例。如图4中所示,除了寄存器文件440的配置和利用之外,处理器400在配置上与图3A的处理器类似。指令取出单元410、发布/分支单元430、功能单元对(或者集合)482-488的功能单元450-480以及加载/分支单元490全部以与上面关于图3A描述的类似方式操作。指令解码单元420具有附加逻辑,如下文描述,该附加逻辑用于解码三种不同类型的指令:矢量、标量和矢量-标量指令类型。在一个例示性实施例中,这些三种不同类型的指令是矢量多媒体扩展(VMX)指令、浮点(FP)指令和矢量-标量扩展(VSX)指令。本领域中一般已知FP运算。VMX指令在可从纽约Armonk的国际商业机器公司获得的POWER 6处理器中使用,并且提供对多个数据元素操作的单指令。将在下文更详细描述VSX指令。
基于解码后的指令,指令将存取寄存器文件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中的所有寄存器的存取,但仅仅使用其中包含的位的子集)。
第一子范围442包含寄存器文件440中的寄存器的第一集合的第一范围的位。第二子范围444包含寄存器文件中的寄存器的第二集合的第二范围的位。第三子范围446包含寄存器文件440中的寄存器的完整集合的全部范围的位。这样,单寄存器文件440可以用于处理传统标量和传统矢量指令、以及矢量-标量指令(这里称为VSX指令)的组合集。
VSX指令是可以存取寄存器文件440的完整集合的寄存器的指令。VSX指令集包括若干种类的指令,包括单精度标量浮点指令用于存取整个寄存器文件440的每个寄存器的32位子范围;单精度标量浮点指令用于存取整个寄存器文件440的每个寄存器的64位子范围;双精度标量浮点指令用于存取整个寄存器文件440的每个寄存器的64位子范围;以及矢量指令用于存取整个寄存器文件440中的完整范围的位。VSX指令使用所选类型的寄存器指定符,例如,6位寄存器指定符,其与由传统标量和传统矢量指令使用的传统5位指定符不同。
由此,一个或者多个例示性实施例体提供单标量/矢量架构,用于与具有独立标量和矢量寄存器文件的传统架构兼容的寄存器文件。一个或者多个例示性实施例还允许在传统寄存器文件和扩展的矢量-标量寄存器文件之间共享处理器的存储空间,而不导致增加的芯片区域。此外,一个或者多个例示性实施例允许在使用传统指令的传统程序和库以及(使用传统或者新/增强指令的)程序和库之间共享数据,以及代码的互操作,由此保护传统应用的代码调整的投资并且避免重新编码所有应用以使用新/增强指令的需要,同时允许在新/增强指令最有用的地方使用它们。结果,可以避免由利用标量和矢量的独立寄存器文件的已知处理器架构(例如,单指令多数据(SIMD)指令)经历的昂贵开销,以及用于使用单寄存器文件处理标量和矢量指令两者的复杂新架构所涉及的附加成本。
寄存器文件包括多个矢量-标量寄存器(VSR),每个VSR具有多个位。例如,寄存器文件440可以包括编号为VSR[0]到VSR[63]的64个VSR,每个VSR具有编号为0到127的128位。为了表示的目的,将假设,从寄存器 文件440的顶部到底部连续编号VSR,从寄存器文件440的左侧向右侧连续编号位。这在下文讨论的图5中示出。
图5是根据一个例示性实施例的矢量-标量扩展(VSX)寄存器文件的例示性图。图5的VSX寄存器文件500例如可以用作寄存器文件440。如图5中所示,VSX寄存器文件500包括编号为VSR[0]到VSR[63]的多个矢量-标量寄存器(VSR)510。VSR 510中的每个具有可被设置的预定数量的位。在描绘的示例中,每个VSR 510具有编号为0到127的128位,用于存储与指令对应的数据据,诸如用于参数传递。
寄存器文件500的第一集合的寄存器530中的第一子范围的位520与第一类型的指令(诸如标量或者浮点指令)相关联。寄存器文件500的第二集合的寄存器550中的第二子范围的位540与第二类型的指令(诸如矢量、SIMD或者VMX指令)相关联。寄存器文件500的寄存器570的完整集合中的第三范围的位560与第三类型的指令(诸如VSX指令)相关联。
从图5可以认识到,VSX寄存器文件500通过基于相关联的寄存器范围和寄存器内的位宽度允许三种不同类型的指令存取VSX寄存器文件500的寄存器,而与其他系统中的其他寄存器文件不同。其他寄存器文件要求通过关于寄存器570的完整集合而不是关于与特定指令类型的所有操作数对应的寄存器子集指定要存取的寄存器,而以对所有类型的指令以相同的方式存取整个寄存器文件。
利用VSX寄存器文件500,当传统标量运算要从VSX寄存器文件500读取数据/向VSX寄存器文件500写入数据时,在一个例示性实施例中,从寄存器宽度的左侧(即,寄存器VSR[0]到VSR[31]的位0到63,例如第一子范围520)读取标量数据值/向寄存器宽度的左侧写入标量数据值。存在可以利用例示性实施例完成的向(多个)矢量-标量寄存器写入标量值的多种方式。在一个例示性实施例中,可以利用正在被写入位0到63的标量值写入VSR的所有位,而标量指令指定的寄存器上与正在针对不对应于标量数据值的位执行的矢量计算的结果对应的值,被写入位64到127。例如,如果寄存器F0到F1的值被相加,以在寄存器F3中给出结果,则位64到127中的VSR3的值可以对应于似乎已经对于VSR0和VSR1的位64到127执行了矢量运算那样。
在另一例示性实施例中,要写入位0到63的标量值可以复制在位64到 127中。例如,当标量浮点值将稍后与矢量值结合时,例如当将矢量与标量值相乘时,这种方法可能有益。一般地,标量值必须首先被跨越整个寄存器复制,诸如利用VMX或者VSX指令集的“splat”指令。该方法将消除执行“splat”指令的要求,因为标量值已被复制。
在另一例示性实施例中,标量值可以被写入寄存器的位0到63,而存在于位64到127中的无论什么值可以保持不变。当矢量运算可能需要被分解为一系列标量运算(其中,每个标量结果可以被插入特定矢量元素,以最终依据多个标量结果创建矢量结果)时,可以使用这样的方法。这将是最低功率的实施例,这是因为当不需要向寄存器写入任何东西时,什么都不写入。然而,其可能导致非确定性,因为存在于整个寄存器中的值现在可能依赖于标量结果被写入之前什么值驻留在寄存器文件中。这对于具有寄存器重命名的架构特别有问题,其中,存在于重命名寄存器中的值高度不可预测。
在另一示例性实施例中,标量值可以被写入寄存器的位0到63,而剩余位64到127可以用例如零的默认值填充。当矢量运算可能需要被分解为一系列标量运算(其中,多个标量结果一起移位并被“或”,以形成矢量结果)时,可以使用这种方法。这种方法给出可预测值,由此避免与不写入任何东西相关联的问题。这个选项还表示比复制值对结果总线的更低负载(因为该值不必提供到使负载加倍的寄存器中的2个地点)。
对于传统矢量、SIMD或者VMX指令,从第二集合的VSR[32]到VSR[63]的整个范围的位0到127读取数据值/向第二集合的VSR[32]到VSR[63]的整个范围的位0到127写入数据值。对于新VSX指令,从完整集合的VSR[0]到VSR[63]的整个范围的位0到127读取数据值/向完整集合的VSR[0]到VSR[63]的整个范围位的0到127写入数据值。利用这些VSX指令,在寄存器的左侧位0到63写入标量值,而跨越所有位0到127写入矢量值。
由此,利用一个或者多个例示性实施例的机制,当解码指令时,实际存在要解码的指令的两个特性。第一个是数据存取的宽度,即存取宽度规范,并且第二个是寄存器指定符。存取宽度规范识别寄存器的哪些位要被读取/写入。该寄存器指定符识别多可寻址寄存器文件中的哪个寄存器子集或者完整集合的寄存器要被读取/写入。用于解码指令的主要要求是允许将传统更小的寄存器文件重叠在矢量-标量寄存器文件的顶部上的多可寻址性方面的寄存器指定符,以允许存储共享。
再次参考图4,如上面讨论,向处理器400的指令解码单元420添加解码逻辑,以使用例示性实施例的单寄存器文件处理三种类型的指令。解码逻辑确定指令的类型,并且基于该指令的类型,生成用于指定可以由指令存取的寄存器文件440中的寄存器的位宽度的宽度指定符。然后基于指令的类型和宽度指定符生成整个寄存器宽度的全指定符,并且然后使用该全指定符寻址寄存器文件440中的对应寄存器子集442-446内的寄存器。然后使用全指定符基于寄存器子集442-446的寻址,计算操作的结果,将操作的结果写回到寄存器文件440中的寄存器子集442-446。
根据一个例示性实施例,提供Power架构(也已知为名称和“PowerISATM”)的实现方式,Power架构至少包括“类别:浮点”(FPU,或传统FPU)的第一指令集、“类别:矢量”(VMX)的第二指令集以及“类别:VSX”的第三指令集,它们依据以下文件中的说明:美国专利No.7,877,582(美国公开2009/0198966A1)(这里以引用的方式将其每个的全部并入本文)中包括的附录;作为该具体说明中的一部分的文献;以及在以下公开中:“PowerISATM版本2.05,”第4、5和6章,国际商业机器公司,2007年10月23日,和“Power ISATM版本2.06修订B”,第7章,国际商业机器公司Corporation,2010年7月23日,这里以引用的方式将其每个的全部并入本文。“Power ISATM版本2.05”,国际商业机器公司,2007年10月23日和Power ISATM版本2.06修订B”,国际商业机器公司,2010年7月23日中的每个的全部被以引用的方式并入本文。
关于浮点处理器工具的详细信息提供在“Power ISATM版本2.05–第4章–浮点处理器[类别:浮点]”中。关于VMX处理器工具的详细信息提供在Power ISATM版本2.05–第6章–矢量处理器[类别:矢量]”中。关于VSX处理器工具的详细信息提供在Power ISATM版本2.06修订B–第7章–矢量-标量浮点运算[类别:VSX](这里以引用的方式将其全部并入本文中)”中以及提供在作为该具体描述的一部分而包含的“RFC02182.r6:VSX标量单精度”和“第7章:矢量-标量浮点运算[类别:VSX]”中。根据一个例示性实施例,可以出现诸如“类别:小数浮点”之类的附加指令集,其细节描述在“Power ISATM版本2.05–第5章–小数浮点[类别:小数浮点]”中,这里以引用的方式将其全部并入本文中。
根据本发明的一个方面,这里包括的RFC02182.r6和第7章描述包括64b 单精度标量指令的VSX指令的新集合,该64b单精度标量指令与之前提供的32b标量指令不同。64b标量运算的提供使得与也是64b的传统标量运算能够进一步兼容。
图6-7B是概述可以在一个或者多个例示性实施例的指令解码单元的解码逻辑中实现的示例解码操作的流程图。将理解,可以由计算机程序指令实现流程图示的每个块和流程图示中的块的组合。这些计算机程序可以提供到处理器或者其他可编程数据处理装置,以产生机器,使得在处理器或者其他可编程数据处理装置上执行的指令创建用于实现流程图块或者多个块中规定的功能的装置。这些计算机程序指令也可以存储在可以引导处理器或者其他可编程数据处理装置以特定方式起作用的计算机可读存储器或者存储介质中,使得存储在计算机可读存储器或者存储介质中的指令产生制造品,包括实现流程图块或者多个块中规定的功能的指令装置。
相应地,流程图示的多个块支持用于执行规定的功能的装置的组合,用于执行规定的功能的步骤的组合和用于执行规定的功能的程序指令装置。也将理解,可以通过执行规定功能或者步骤的基于专用硬件的计算机系统,或者通过专用硬件和计算机指令的组合,实现流程图示的每个块和流程图示中的块的组合。
另外,提供流程图,以表明例示性实施例中执行的操作。流程图不意味着声明或者暗示关于特定操作或者尤其是操作顺序的限制。可以在不脱离本发明的精神和范围的情况下修改流程图的操作,以适合具体实现方式。
图6是概述根据一个例示性实施例的一般解码操作的流程图。如图6中所示,操作以接收来自指令取出单元的取出指令开始,步骤610。基于取出的指令的操作码,解码逻辑确定取出的指令是否是VSX指令,步骤615。如果操作码识别该指令为VSX指令(或者其他所选类型的指令),则从指令编码中的一个或者多个字段提取全寄存器指定符,步骤620。由具有若干字段的指令字指定指令。这些字段可以例如包括操作码字段、若干寄存器指定符字段以及次操作码字段。当遇到指令时,指令解码器可以确定遇到什么类型的指令(这通过分析操作码和次操作码字段完成),这也将典型地指示使用寄存器的什么位(例如,使用子范围520、540、560)。寄存器指定符字段指定存取哪个寄存器530、550或570。在一个实施例中,每个寄存器指定符字段可以提供5位指定符,即窄指定符。扩展字段可以提供在指令字中,提供附 加位以给出6位,从而指定寄存器文件的64个VSR寄存器中的一个。
寻址(即,选择)寄存器文件中的对应寄存器,以提供它们的数据值到合适的计算或者功能单元,以进行处理,步骤625。也就是,全寄存器指定符被提供到寄存器文件,使得寄存器文件知道要读取或者写入哪个寄存器570。寄存器指定符是识别寄存器的存储阵列中的“地址”。
操作数数据值由计算/功能单元处理,步骤630,并且然后将由计算或者功能单元处理的结果写回存储器文件中的对应寄存器,步骤635。写回到的特定寄存器再次由寄存器指定符指定。
如果取出的指令的操作码指示该指令不是VSX(或者其他类型的指令),步骤615,则提取窄寄存器指定符,其识别寄存器子集并且可能识别寄存器的全宽度内的位,用于与指令一起使用,步骤640。然后基于指令类型和窄位范围指定符生成用于寄存器的整个范围的位的全寄存器指定符,步骤645。也就是,向窄寄存器指定符添加一个或者多个位,以生成全寄存器指定符。要添加的位依赖于寄存器文件的子范围以及如何定义它们。例如,对于传统标量指令,提供5位操作数指定符(即,窄位范围指定符)用于指令编码中的每个操作数。可以例如通过前面添加(pre-pend)0以产生6位指定符生成全寄存器指定符,以给出对描绘的示例中的VSR 0-31的存取。对于传统矢量指令,提供5位操作数指定符(即,窄寄存器指定符)用于指令编码中的每个操作数。可以例如通过前面添加1以产生6位指定符生成全寄存器指定符,以给出VSR 32-63的存取。对于VSX指令,提供6位操作数指定符(即,全位范围指定符)用于指令编码中的每个操作数,因此不需要为了存取寄存器文件中的所有VSR而进行修改。
一个或者多个例示性实施例的窄和全寄存器指定符允许寄存器文件的“多可寻址”性质,这指代不同指令有效包含不同地址以及编码适配它们以重叠和使用寄存器文件的共享寻址的事实。由此,例如,具有6位000000的VSX寄存器前面添加寄存器指定符指向VSX寄存器0。具有5位00000的窄寄存器指定符的传统浮点指令指向同一寄存器,因为其重叠VSR寄存器的开始32个寄存器,并且其通过向5位窄寄存器指定符添加“0”而获得,以在本特定示例中给出000000。另一方面,5位00000的传统VMX窄寄存器指定符指向寄存器32(VSR32到63范围中的第一个寄存器),并且通过向5位指定符添加“1”而获得,以在本特定示例中给出100000。
一旦获得前面添加寄存器指定符,则基于前面添加寄存器指定符寻址与操作码识别的指令类型相关联的寄存器子集中的寄存器,步骤650。可选地,可以基于指令类型确定位宽度,使得寄存器的第一集合的位与一种指令类型(例如,传统标量指令)相关联,并且寄存器的另一集合的位与另一指令类型(例如,传统矢量指令)相关联。该功能在上面被描述并且对于特定实现方式是可选的。因为它是可选的,所以未在图6中明确示出。
然后操作继续到步骤630,在步骤630中,来自被寻址的寄存器的例如操作数值的数据值被提供到计算/功能单元用于处理,步骤630,并且使用全寄存器指定符将结果写回到寄存器子集中的寄存器,步骤635。然后操作终止。
图7A和7B描绘概述根据一个例示性实施例的一个实现方式的解码操作的一个示例的流程图。如图7A和7B中所示,操作再次以接收来自指令取出单元的取出的指令开始,步骤710。基于取出的指令的操作码,解码逻辑确定取出的指令是否是VSX指令(或者其他所选类型的指令),询问715。如果操作码识别该指令为VSX指令,则提取宽位范围指定符,步骤720。宽位范围指定符可以寻址任何寄存器570(即寻址全寄存器文件)以及那些寄存器中的所有位,步骤725。对应寄存器可以是整个寄存器文件中的任何寄存器。然后使用来自寄存器的数据计算该指令,该计算在任意输入和输出寄存器配对上进行,步骤730。换言之,VSX指令对寄存器文件中的任何寄存器操作,并且不限于特定子范围的寄存器。然后将计算的结果写回到寄存器文件中的适合寄存器,步骤735。
如果指令的操作码指示该指令不是VSX指令,询问715,则解码逻辑确定该指令操作码是否识别该指令为标量指令,例如,浮点指令等,询问740(图7B)。如果指令操作码识别该指令为标量指令,则提取识别寄存器文件内的寄存器子集以及可选地识别寄存器的寄存器子集内的位子集的窄位范围指定符,步骤745。基于指令类型和窄位范围指定符生成全位范围指定符,步骤750。使用窄位范围指定符从与由操作码指定的指令类型相关联的寄存器子集(例如,寄存器的标量子集)提取数据,步骤755。数据提供到计算/功能单元,该计算/功能单元基于与寄存器文件中的寄存器的标量子集对应的输入和输出寄存器计算结果,步骤760。然后将计算的结果写回用于该指令类型的寄存器子集(例如,标量寄存器子集)中的适合寄存器,步骤765。
如果指令的操作码指示该指令不是标量指令,询问715,则提取再次识别寄存器文件内的寄存器子集以及可选地识别这些寄存器内的另一位子集的窄位范围指定符,步骤770。基于指令类型(例如,矢量、SIMD或者VMX指令)和窄位范围指定符生成全位范围指定符,步骤775。使用全位范围指定符从与由操作码指定的指令类型相关联的寄存器子集(例如,寄存器的矢量子集)提取数据,步骤780。数据被提供到计算/功能单元,该计算/功能单元基于与寄存器文件中的寄存器的矢量子集对应的输入和输出寄存器计算结果,步骤785。然后将计算的结果写回该指令类型的寄存器子集(例如,矢量寄存器子集)中的适合寄存器,步骤790。然后操作终止。
从上面的描述可以看到,一个或者多个例示性实施例提供允许多个不同类型的寻址模式的寄存器文件和解码方法。例如,在第一寻址模式中,使用非连续(contiguous)编码,以基于第一指令类型(例如,VSX指令类型)从寄存器文件中的寄存器全集合中选择所有操作数寄存器。在第二寻址模式中,使用非连续编码,并且基于第二指令类型(例如,标量指令类型)选择寄存器文件中的寄存器全集合的第一范围的可寻址操作数寄存器。为每个操作数构建寄存器地址,以使得从第一范围的可寻址操作数寄存器获得用于该指令的所有操作数。
在第三寻址模式中,还使用连续编码,并且基于第三指令类型(例如,矢量指令类型)从寄存器文件中的寄存器全集合中选择第二范围的可寻址操作数寄存器。为每个操作数构建寄存器地址,以使得从第二范围的可寻址操作数寄存器获得用于该指令的操作数。该第二范围的操作数寄存器在一个示例中与第一范围的操作数寄存器不同,以使得第一范围内的寄存器不在第二范围的操作数寄存器中。
一个或者多个例示性实施例通过允许在处理传统标量、传统矢量和矢量-标量指令中使用单寄存器文件,改进了已知系统和处理器寄存器文件架构以及指令解码方法。这样,除了具有在各种指令类型之间兼容的数据格式的矢量-标量指令之外,还可以处理传统标量和矢量指令。此外,因为正在利用单寄存器文件,所以避免了与独立寄存器文件之间的切换相关联的开销。根据一个或者多个例示性实施例的寄存器共享减小了寄存器文件的芯片区域,并且允许利用统一寄存器文件,同时维持传统代码,而不建立独立的传统寄存器文件。一个或者多个例示性实施例允许传统和新/增强指令之间的数据共 享,即传统指令可写入寄存器530或550之一,并且VSX指令可以组合来自任何或者所有寄存器570的值。
在本发明的另一方面中,提供用于在不同表示之间转变的能力。作为示例,当生产者指令是一个格式,并且产生要由不同格式的消费者指令消费的结果时,转换发生。在一个具体方面中,在处理器上执行的编译器确定该不匹配,并且在生产者和消费者指令之间插入适当转换指令,如参考图8描述的。作为一个示例,图8描绘该逻辑的实施例,以确定转换是必要的或者期望的,并且选择和插入转换指令。在一个示例中,编译器执行该逻辑。然而,在其他实施例中,可以是处理器上的其他组件或者实体,或者在处理器上执行的其他组件或者实体。
参考图8,初始地,使用具有多个表示的数据类型在两个指令之间选择依赖性,步骤800。也就是,选择相互依赖的两个指令(例如,一个使用由另一个提供的值或者结果)用于处理。作出关于所选的指令(例如,生产者和消费者指令)是否与相同表示对应的判定,询问802。如果两个指令具有相同或者兼容的表示,则作出关于是否存在用以处理的更多依赖性的进一步判定,询问804。如果是,则处理继续步骤800。
转回询问802,如果生产者和消费者指令不与相同或者兼容的表示对应,则在指令流中的两个指令之间插入转换指令,步骤806。转换指令用于转换指令之一(例如,生产者指令)的数据到与另一指令(例如,消费者指令)兼容的格式。在一个示例中,要转换的数据在(转换指令中识别的)多可寻址寄存器文件中的一个寄存器中,并且转换后的数据放置在(也在转换指令中指示的)多可寻址寄存器文件的另一寄存器(或者相同寄存器)中。使用数据的指令从该寄存器获得转换后的数据。在一个示例中,编译器基于生产者和消费者指令确定要由转换指令使用的寄存器。生产者指令指示具有要转变或者转换的数据的寄存器,并且消费者指令提供其将使用来检索数据的寄存器的指示。处理继续询问804。
在一个实施例中,被插入的转换指令依赖于一个或者多个标准,如参考图9和10更详细描述的。图9涉及矢量到标量的转换,并且图10涉及标量到矢量的转换。依赖于转换的类型(例如,矢量-标量或者标量-矢量)选择这些技术之一。在一个示例中,包括图9和10的逻辑的这个逻辑由编译器执行。
初始参考图9,作出关于期望的格式转换是否将单精度矢量元素转换为 单精度标量的判定,询问900。如果期望的格式转换是从单精度矢量元素转换到单精度标量的简单拷贝,则使用这里称为XSCVSPDPN的转换指令,步骤902。这个指令转换单精度矢量元素(32位浮点寄存器格式)到单精度标量(64浮点寄存器格式)。这个转换仅仅被视为物理格式改变而不是逻辑改变,并且因此,没有检测到或者发信号通知(signal)异常,并且发信号通知非数值(Not-a-Number,SNaN)输入被保存为返回结果中的SNaNs。也就是,对于编译器之外的任何实体或者组件而言透明地执行转换。因为没有产生(即,检测到和/或发信号通知)异常,所以认为该转换的执行与异常无关(即,没有或者不存在异常)。
转回询问900,然而,如果期望的格式转换不将单精度矢量元素转换到单精度标量元素,则在本实施例中使用这里称为XSCVSPDP指令的不同指令,步骤904。这个指令转换单精度矢量元素(32位浮点寄存器格式)到双精度标量(64位浮点寄存器格式)。这被视为真实逻辑和物理格式改变,并且因此,无效操作异常被检测到并且被发信号通知为信令NAN(非数值)。SNaN值被转换为返回结果中的QNaNs(安静(quiet)NaN)。
参考图10,在另一实施例中,做出关于期望的格式转换是否转换单精度标量数据到单精度矢量元素的判定,询问1000。如果期望的转换是简单拷贝并且单精度标量将被转换到单精度矢量元素,则做出关于值的拷贝的矢量是否要被创建的进一步判定,询问1002。如果值的拷贝的矢量将不被创建,则使用这里称为XSCVDPSPN的指令,该指令转换单精度标量(64位浮点寄存器格式)到单精度矢量元素(32位浮点寄存器格式),步骤1004。这仅被视为物理格式改变而不是逻辑改变,并且因此,没有检测到或者发信号通知异常,并且SNaN值被保存为返回结果中的SNaNs。同样,转换是透明的并且与异常无关地执行。返回询问1002,然而,如果要创建值的拷贝的矢量,询问1002,则使用这里称为XSCVSSPVSPSPLT的指令,步骤1006。这转换单精度标量(64位浮点寄存器格式)到单精度矢量元素(32位浮点寄存器格式),并且复制到所有四个矢量元素。同样,这仅仅被视为物理格式改变,没有检测到或者发信号通知异常,并且SNaN值被保存为返回结果中的SNaNs。
返回询问1000,如果期望的格式转换不是单精度标量到单精度矢量元素的转换,则使用这里称为XSCVDPSP的指令,步骤1008。这个指令转换双精度标量(64位浮点寄存器格式)到单精度矢量元素(32位浮点寄存器格式)。 在该情形下,该转换被视为真实逻辑以及物理格式改变,并且因此无效操作异常被检测到并且被发信号通知为信令NAN操作数。SNaN值被转换为返回结果中的QNaN。
上面描述的是可以在一个或者多个实施例中使用的多个转换指令。下面以及在作为本说明书的一部分而包含的“RFC02242.r3:BFP/VSX Miscellaneous Operations(杂项操作)”中描述关于这些指令的进一步细节。
首先,提供关于XSCVSPDPN指令的进一步细节。在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段具有主要操作码,该主要操作码与另一字段的扩展操作码组合(例如,连接(concatenate)),以识别指令;第一字段(例如,T字段)和第一位(例如,TX字段;被连接的)用于指派第一寄存器;以及第二字段(例如,B字段)和第二位(例如,BX字段;被连接的)用于指派第二寄存器。样本伪代码如下:
reset_xflags()
src←VSR[32×BX+B].word[0]
result(结果)←ConvertSPtoDP_NS(src)
VSR[32×TX+T].dword[0]←result
VSR[32×TX+T].dword[1]←0xUUUU_UUUU_UUUU_UUUU
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使src为VSR[XB]的字元素0中的单精度浮点值。
将src以双精度格式放置入VSR[XT]的双字元素0中。保留SNaN值的编码(即,不转换为QNaN)。
未定义VSR[XT]的双字元素1的内容。
改变的特殊寄存器
XSCVSPDPN的VSR数据布局
src=VSR[XB]
128位的位0-31包括SP
tgt=VSR[XT]
128位的位0-63包括DP
另外,下面提供用于转换32位单精度矢量元素为64位单精度标量的代码片段示例:
另外,下面描述关于XSCVSPDP指令的细节。在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段具有主要操作码,主要操作码与另一字段的扩展操作码组合(例如,连接)),以识别指令;第一字段(例如,T字段)和第一位(例如,被连接的)用于指派第一寄存器;以及第二字段和第二位(例如,被连接的)用于指派第二寄存器。样本伪代码如下:
reset_xflags()
src←VSR[32×BX+B].word[0]
result←ConvertVectorSPtoScalarSP(src)
if(vxsnan_flag)then SetFX(VXSNAN)
vex_flag←VE&vxsnan_flag
FR←0b0
FI←0b0
if(~vex_flag)then do
VSR[32×TX+T].dword[0]←result
VSR[32×TX+T].dword[1]←0xUUUU_UUUU_UUUU_UUUU
FPRF←ClassDP(result)
end
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使src为VSR[XB]的字元素0中的单精度浮点值。
如果src是SNaN,则结果是src,转换为QNaN(即,src的位9设置为1)。VXSNAN设置为1。
否则,结果是src。
将结果以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRE被设置为结果的类和符号。FR被设置为0。FI被设置为0。
如果俘获启用的(trap-enabled)无效操作异常发生,则不修改VSR[XT],不修改FPRF,FR设置为0,并且F1设置为0。
改变的特殊寄存器
FPRF FR←0b0 FI←0b0 FX VXSNAN
XSCVSPDP的VSR数据布局
src=VSR[XB]
128位的位0-31包括SP
tgt=VSR[XT]
128位的位0-64包括DP
此外,下面描述关于XSCVDPSP指令的细节。在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段具有主要操作码,主要操作码与另一字段的扩展操作码组合(例如,连接)),以识别指令;第一字段和第一位(例如,被连接的)用于指派第一寄存器;以及第二字段和第二位(例如,被连接的)用于指派第二寄存器。样本伪代码如下:
reset_xflags()
src←VSR[32×BX+B].dword[0]
result←ConvertDPtoSP_NS(src)
VSR[32×TX+T].word[0]←result
VSR[32×TX+T].word[1]←0xUUUU_UUUU
VSR[32×TX+T].word[2]←0xUUUU_UUUU
VSR[32×TX+T].word[3]←0xUUUU_UUUU
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使src为表示在双精度格式中的VSR[XB]的双字元素0中的单精度浮点值。
将src以单精度格式放置入VSR[XT]的字元素0中。SNaN值的编码被保留(即,不转换为QNaN)。
未定义VSR[XT]的字元素1、2和3的内容。
改变的特殊寄存器
xscvdpspn的VSR数据布局
src=VSR[XB]
128位的位0-63包括SP
tgt=VSR[XT]
128位的位0-31包括SP
另外,下面描述关于XSCVSSPVSPSPLT指令的细节。在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段具有主要操作码,主要操作码与另一字段的扩展操作码组合(例如,连接)),以识别指令;第一字段(例如,T字段)和第一位(例如,TX位;被连接的)用于指派第一寄存器;以及第二字段(例如,B字段)和第二位(例如,BX位;被连接的)用于指派第二寄存器。样本伪代码如下:
reset_xflags()
src←VSR[32xBX+B].dword[0]
result←ConvertDPtoSP_NS(src)
do i=0to 3
VSR[32xTX+T].word[i]←result
end
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使SRC为以双精度格式表示的VSR[XB]的双字元素0中的单精度浮点值。SNaN值的编码被保留(即,不转换为QNaN)。
将src以单精度格式放置入VSR[XT]的每个字元素中。
改变的特殊寄存器
xscvsspvspsplt的VSR数据布局
src=VSR[XB]
128位的位0-63包括SP
tgt=VSR[XT]
128位的位0-31、位32-63、位64-96和位97-127包括SP
此外,下面描述用于利用复制(splat)转换64位单精度标量到32位单精度矢量元素的代码片段示例:
另外,下面提供关于XSCVDPSP指令的细节。在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段具有主要操作码,主要操作码与另一字段的扩展操作码组合(例如,连接)),以识别指令;第一字段(例如,T字段)和第一位(例如,TX位;被连接的)用于指派第一寄存器;以及第二字段(例如,B字段)和第二位(例如,BX位;被连接的)用于指派第二寄存器。样本伪代码如下:
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使src为VSR[XB]的双字元素0中的双精度浮点值。
如果src是SNaN,则结果是转换为QNaN的src(即,src的位12设置为1)。VXSNAN设置为1。
否则,如果src是QNaN、无穷大或者零,则结果是src。
否则,结果是使用由RN规定的舍入模式舍入到单精度的src。
将结果以单精度格式放置入VSR[XT]的字元素0中。
未定义VSR[XT]的元素1、2和3的内容。
FPRF设置为结果的类和符号。FR设置为指示当舍入时结果是否被增大。FI设置为指示结果不准确。
如果俘获启用的无效操作异常发生,则不修改VSR[XT]和FPRF,并且FR和F1设置为0。
改变的特殊寄存器
FPRF FR FI FX OX UX XX VXSNAN
xscvdpsp的VSR数据布局
src=VSR[XB]
128位的位0-63包括DP
tgt–VSR[XT]
128位的位0-31包括SP
这里详细描述的是扩展的VSX工具,该扩展的VSX设备支持使用64位表示在标量单精度数上计算的指令和使用32位表示在矢量单精度数上计算的指令。另外提供从第一表示转变到第二表示的能力。在第一实施例中,使用从64位到32位和32位到64位运算的显式转换。在第二实施例中,使用 通过使用双精度/单精度转换在单精度表示之间转换的指令,从而在单精度数的32位和64位之间转换,其中单精度数的64位表示具有与双精度运算类似的格式。在另一实施例中,转换操作还提供splat函数,其中32位单精度值被复制到多个元素位置。在一个实施例中,转换操作还提供选择函数,在选择函数中,借助位置指示符从多个元素位置选择32位单精度值。
根据一个或者多个方面,使用多个架构表示。提供包括并且识别操作的第一模式中的64位单精度数、以及操作的第二模式中的32位单精度数的能力。提供基于与表示第一和第二编码的第一和第二传统编码兼容地交互操作所需要的操作类型识别第一和第二操作的能力。提供在第一和第二表示之间转变的技术。
通过在一个表示和另一个之间转换,可以通过消除执行边界条件的检查的需要而减小执行复杂性。另外,通过插入转换指令,将一种数据表示转换到另一种,可以减小要编码的指令的数量、编码逻辑和实现成本。
根据一个或者多个方面,启用用于矢量计算的32位单精度表示和使用标量计算的单精度浮点的65位表示的混合。提供新的单精度-到-单精度格式换转指令,以从一个64位格式转换到另一个32位格式或者相反。此外,提供转换指令以转换64位单精度为32位单精度并且复制,其中在寄存器中复制相同值四次,这对于矢量-标量计算是通用的操作。在不涉及用信号通知特性的情况下执行转换,因为这个类型的转换不是计算指令。
此外,提供编译器技术以促进对于相同的32位单精度浮点数据类型使用两种不同浮点表示的计算。扩展编译器以识别什么时候使用数据其可以在一个或者另一表示中,并且要执行检查以确保使用的数据在由指令使用的适当格式中。这通过将每个指令与数据类型相关联来完成,并且生成结果的指令的数据类型要与使用该结果的指令的数据类型相同。如果不是该情况,则插入转换。直接从寄存器到寄存器执行格式转换,而不设置异常。
在一个方面中,使用可以包含每个浮点数的两个不同表示的浮点寄存器。指令指定哪种浮点数的类型要用于该指令的操作数,并且如果存在的话获取/存储来自所选择的一个表示的操作数。此外,编译器知道浮点寄存器并且如在浮点寄存器包含错误表示时所需要的,插入转换指令。
在一个具体示例中,提供从寄存器类(其可以是多可寻址寄存器文件)的寄存器中的第一架构格式(例如,根据Power ISA的定义的SP6464位宽 单精度二进制浮点格式)转换为用于寄存器文件格式的第二架构格式(例如,根据IEEE 754存储器格式定义和类似的Power ISA定义的SP3232位宽单精度二进制浮点格式)。
使用SP64到SP32的转换,例如以根据架构定义(其中每个数例如具有准确的对应关系(SP64到SP32格式转换))容纳编译器对不同内部格式的维持。这与作为用户定义的操作的DP到SP转换不同。
例如,即使对于不具有SP格式的表示的DP数,DP到SP转换也需要将DP数映射到SP数。这可以通过如下方式做到:执行多余尾数位的舍入(根据很多可能的舍入模式之一,诸如截位、舍入到0、舍入到-无穷大、舍入到+无穷大、离开零的舍入、舍入到偶数、舍入到奇数以及其他)、可以在DP中表示而不可以在SP中表示的小数字冲(flush)为零,以及使可以在DP中表示而不可以在SP中表示的大数字充满到+无穷大或者-无穷。相比之下,SP64到SP32的转换在一个示例中仅对SP数运算,所以在至少一个实施例中,当输入不在可表示的IEEESP浮点范围中时,SP64到SP32转换的操作未被定义。兼容的硬件可以根据本实施例的一个方面做其选择的任何事情;可以选择就像其是DP数那样处理范围之外(非法)的SP64位输入,并且对其舍入;可以选择对于范围之外的数产生规范中断;可以选择生成随机结果;或者可以根本不生成结果。
作为另一示例,DP到SP转换是用于数据类型转换的用户指定指令,并且根据这个用户指定指令的定义,SNaN(即,信令NaN,其中NaN是根据IEEE标准的非数值指示)将产生异常。此外,在一个实施例中,这个用户指定指令可以被定义为对数转换期间的算术条件设置异常(例如,下溢或溢出)。相比之下,SP64到SP32是与利用硬件的编译器的内部操作对应的格式转换。在一个示例中,SP64位格式的每个有效数据点与SP32格式的正好一个数据点对应。当任何这种数据点被提供作为输入(并且特别地包括SNaNs)时,数据点被从一个格式表示映射到第二表示,并且不产生中断。
在一个实施例中,合法单精度数被直接从第一架构寄存器格式转换到第二寄存器格式,其中指令被完成,并且转换后的结果被写入目标寄存器用于IEEE单精度浮点数或者非数值输入。在一个示例中,信令NaN被保留在目标寄存器中作为信令NaN。
所属技术领域的技术人员知道,本发明可以实现为系统、方法或计算机 程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
现在参考图11,在一个例子中,计算机程序产品1100包括,例如,一个或多个非暂时性计算机可读存储介质1102,在其上存储有计算机可读的程序代码装置或逻辑1104,以提供并方便本发明的一个或多个方面。
体现在计算机可读介质上的程序代码可以用任何适当的介质传输,所述介质包括但不限于:无线、有线、光缆、RF等,或上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如 利用因特网服务提供商来通过因特网连接)。
本文中将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instructionmeans)的制造品(manufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
除了上述,本发明的一个或多个方面可由服务提供商提供、许诺(offer)、 部署、管理、服务等,该服务提供商提供用户环境的管理。例如,服务提供商可创建、维持、支持等计算机代码和/或计算机基础设施,其为一个或多个用户执行本发明的一个或多个方面。反过来,服务提供商可例如根据预订和/或费用协议从用户接受付费。额外地或可替换地,服务提供商可从向一个或多个第三方销售广告内容接受付费。
在本发明的一个方面,可部署用于执行本发明的一个或多个方面的应用。作为一个例子,部署应用包括提供计算机基础设施,其可操作以执行本发明的一个或多个方面。
作为本发明的又一个方面,可部署计算基础设施,其包括将计算机可读代码集成到计算机系统,其中与计算系统结合的代码能够执行本发明的一个或多个方面。
作为本发明的再一个方面,可提供用于集成计算基础设施包括将计算机可读码集成到计算机系统的过程。计算机系统包括计算机可读介质,其中计算机介质包括本发明的一个或多个方面。与计算机系统结合的代码能够执行本发明的一个或多个方面。
虽然上面描述了各种实施例,但是这些仅仅是示例。例如,其他架构的计算环境可以合并并且使用本发明的一个或者多个方面。另外,本发明的一个或者多个方面应用于具有多个表示的任何格式。作为一个特定示例,一个或者多个方面可以应用于支持64位双精度格式和128位双精度格式二者的四精度(128位)浮点扩展的定义。一个或者多个方面可以应用于合并支持用于数据类型的不同格式定义的多个扩展。另外,在不脱离本发明的情况下,可以使用其他指令。
而且,其他类型的计算环境可受益于本发明的一个或多个方面。作为例子,环境可包括仿真器(例如,软件或其他仿真机制),其中特定架构(包括例如指令执行、诸如地址转换的架构功能、以及架构寄存器)或其子集被仿真(例如,在具有处理器和存储器的本机计算机系统中)。在这样的环境中,仿真器的一个或多个仿真功能可实施本发明的一个或多个方面,即使执行仿真器的计算机可具有与正被仿真的能力不同的架构。作为一个例子,在仿真模式中,解码正被仿真的特定指令或操作,且建立合适的仿真功能以实施单 个指令或操作。
在仿真环境中,主计算机包括例如存储器以存储指令和数据;指令获取单元以从存储器获取指令,且可选地,提供用于获取的指令的本地缓冲;指令解码单元以接收获取的指令并确定已被获取的指令的类型;以及指令执行单元以执行该指令。执行可包括将数据从存储器加载到寄存器;从寄存器将数据存储回存储器;或执行如由解码单元确定的某些类型的算术或逻辑运算。在一个例子中,每个单元在软件中实现。例如,被所述单元执行的操作被实现为仿真器软件中的一个或多个子例程。在仿真环境中,主计算机包括例如存储器以存储指令和数据;指令获取单元以从存储器获取指令,且可选地,提供用于获取的指令的本地缓冲;指令解码单元以接收获取的指令并确定已被获取的指令的类型;以及指令执行单元以执行该指令。执行可包括将数据从存储器加载到寄存器;从寄存器将数据存储回存储器;或执行如由解码单元确定的某些类型的算术或逻辑运算。在一个例子中,每个单元在软件中实现。例如,被所述单元执行的操作被实现为仿真器软件中的一个或多个子例程。
作为另一示例,可使用包括通过系统总线直接或者间接耦合到存储器元件的至少一个处理器的适用于存储和/或执行程序代码的数据处理系统。存储器元件例如包括在程序代码的实际执行期间使用的本地存储器、大容量存储器和提供至少一些程序代码的临时存储以减少在执行期间必须从大容量存储器获取代码的次数的高速缓冲存储器。
输入/输出或者I/O设备(包括但不限于键盘、显示器、指点设备、DASD、磁带、CD、DVD、拇指驱动和其它存储器介质等)可以直接或者通过中间I/O控制器耦合到系统。网络适配器也可以耦合到系统,以使得数据处理系统能够通过中间私有或者公共网络变成耦合到其它数据处理系统或者远程打印机。调制解调器、线缆调制解调器和以太网卡仅是网络适配器可用类型中的几种。
在此使用的术语仅是为了描述特定实施例,且不旨在限制本发明。如在此使用的,单数形式“一”、“一个”和“该”也旨在包括复数形式,除非上下文另 外清楚地指明。还将理解,当在说明书中使用时,术语“包括”和/或“包含”指明存在所述的特征、整体、步骤、操作、元件和/或组件,但不排除存在或附加一个或多个其他特征、整体、步骤、操作、元件和/或组件。
所附权利要求书中的所有装置或步骤加功能元件的相应结构、材料、操作以及等价物,如有的话,旨在包括用于结合如特别要求保护的其他所要求保护的元件来执行所述功能的任何结构、材料或操作。呈现本发明的说明是为了示出和描述的作用,但不是穷尽性的或将本发明限制于所公开的形式。许多修改和变化对本领域普通技术人员来说是明显的,且不脱离本发明的范围。选择和描述实施例是为了最佳地解释本发明的原理和实际应用,并使得本领域普通技术人员能针对适于考虑的特定用途的具有各种修改的各种实施例理解本发明。
RFC02182.r6-VSX标量单精度
在VSR和存储器(storage)中以双精度格式表示标量双精度浮点数据。
在VSR和存储器中以双精度格式表示矢量双精度浮点数据。
在VSR中以双精度格式以及在存储器中以单精度格式表示标量单精度浮点数据。
在VSR和存储器中以单精度格式表示矢量单精度浮点数据。
双精度操作数可以被用作双精度标量算术运算的输入。
当对溢出和下溢异常的俘获禁用时,双精度操作数可以用作单精度标量算术运算的输入。
单精度操作数可以用作双精度和单精度标量算术运算的输入。
双精度操作数可以用作双精度矢量算术运算的输入。
单精度操作数可以用作单精度矢量算数运算的输入。
还提供指令用于不要求双精度或单精度的操纵。此外,提供指令以存取VSR中的整数表示。
对于单精度标量数据,当从存储器向VSR进行加载时,执行从单精度格式到双精度格式的转换,并且当从VSR向存储器进行存储时,执行从双精度格式到单精度格式的转换。这些指令不引起浮点异常。
提供指令以在用于VSR中的标量和矢量数据的单精度和双精度格式之间转换。
另外,提供指令以显式地转换VSR中的双格式操作数为单精度。以六种类型的指令启用标量单精度浮点。
1.加载标量单精度
这个形式的指令存取存储器中的单精度格式的浮点操作数,将其转换为双精度格式,并且将其加载到VSR。这些指令不引起浮点异常。
2.标量舍入到单精度
xsrsp舍入双精度操作数为单精度,以检查用于单精度范围的指数并且根据各个使能位处理任何异常,并且将该操作数以双精度格式放置入VSR中。对于由单精度算术指令、单精度负载和xsrsp的其他实例产生的结果,xsrsp不改变值。数量上大于溢出使能(OE=1)时的2319的值产生未定义的结果,这是因为该值不能被缩放回到标准化范围(normalized range)。数量上小于下溢使能(UE=1)时的2-318的值产生未定义的结果,这是因为该值不能被缩放回到标准化范围。
3.标量转换单精度为双精度
xscvspdp从源VSR的字元素0存取单精度格式的浮点操作数,将其转换为双精度格式,并且将其放置在目标VSR的双字元素0中。
4.标量转换双精度为单精度
xscvdpsp舍入源VSR的双字元素0中的双精度浮点值到单精度并且将结果以单精度格式放置在目标VSR的字元素0中。这个函数将用于将标量浮点数据转移到兼容单精度矢量运算的格式。数量上大于溢出使能(OE=1)时的2319的值产生未定义的结果,这是因为该值不能被缩放回到标准化范围。数量上小于下溢使能(UE=1)时的2-318的值产生未定义的结果,这是因为该值不能被缩放回到标准化范围。
5.VSX标量单精度算术
这个形式的指令从双格式的VSR获取操作数,仿佛其产生具有无穷大精度和无限指数范围的中间结果那样执行运算,并且然后迫使这个中间值适合单精度格式。FPSCR和可选的条件寄存器中的状态位被设置为反映单精度结果。然后该结果以双精度格式放置入目标VSR。该结果位于单格式支持的范围中。
如果任何输入值在单精度格式中不可表示并且OE=1或UE=1,则放置入目标VSR的结果和FPSCR的状态位的设置未被定义。如果xsresp或xsrsqrtesp的输入值在单精度格式中不可表示,则放置入目标VSR的结果和FPSCR的状态位的设置未被定义。
6.存储VSX标量单精度
stxsspx转换在双精度格式中的单精度值为单精度格式并且将该操作数存储到存储器中。stxsspx不引起浮点异常。(存储的值被有效地假定为前面五种类型之一的指令的结果。)
当加载VSX标量单精度(lxsspx)、VSX标量舍入到单精度(xsrsp)或VSX标量单精度算术[1]指令的结果被存储在VSR中时,FRACTION的低序29个位是零。VSX标量单精度算术指令:xsaddsp、xsdivsp、xsmulsp、xsresp、xssubsp、xsmaddasp、xsmaddmsp、xsmsubasp、xsmsubmsp、xsnmaddasp、xsnmaddmsp、xsnmsubasp、xsnmsubmsp。
提供VSX标量舍入到单精度(xsrsp),以允许具有适当异常检查和舍入的从双精度到单精度的值转换。xsrsp应被用于在将双精度浮点值存储到单格式存储元素或者使用它们作为用于单精度算术指令的操作数之前,将双精度浮点值转换到单精度值。由单精度加载和算术指令产生的值已经是单精度值并且可以直接存储到单格式存储元素中,或者直接用作单精度算术指令的操作数,而不需要在存储或者算术指令之前通过xsrsp。
单精度值可以用在双精度标量算术运算中。除了xsresp或者xsrsqrtesp,当OE=0和UE=0时,任何双精度值可以用在单精度矢量算术运算中,当OE=0或UE=0时,或者在指令是xsresp或xsrsqrtesp的情况下,源操作数必须在单精度格式中可表示。
一些实现方式可以比双精度算术指令更快地执行单精度算术指令。因此,如果不要求双精度,则应当使用单精度数据和指令。
整数值操作数
提供指令以舍入浮点操作数到浮点格式的整数值。为了便于浮点和整数处理之间的数据交换,提供指令以在VSR的浮点双和单精度格式与整数字和双字格式之间转换。对整数值操作数的计算可以使用要求的精度的算术指令执行(该结果可能不是整数值)。下面描述特别提供的支持整数值运算的三组指令。
1.舍入到浮点整数
VSX标量舍入到双精度整数指令舍入双精度操作数到双精度格式的整数值。VSX标量舍入到双精度整数指令:xsrdpi、xsrdpip、xsrdpim、xsrdpiz、xsrdpic。
VSX矢量舍入到双精度整数指令舍入每个双精度矢量操作数元素到双精度格式的整数值。VSX矢量舍入到双精度整数指令:xvrdpi、xvrdpip、xvrdpim、xvrdpiz、xvrdpic。
VSX矢量舍入到单精度整数指令舍入每个单精度矢量操作数元素到单精度格式的整数值。VSX矢量舍入到单精度整数指令:xvrspi、xvrspip、xvrspim、xvrspiz、xvrspic。
除了xsrdpic、xvrdpic和xvrspic,使用由操作码指定的舍入模式执行舍入。对于xsrdpic、xvrdpic和xvrspic,使用由RN规定的舍入模式执行舍入。
VSX舍入到浮点整数指令可以引起无效操作(VXSNAN)异常。VSX舍入到浮点整数指令:xsrdpi、xsrdpip、xsrdpim、xsrdpiz、xsrdpic、xvrdpi、xvrdpip、xvrdpim、xvrdpiz、xvrdpic、xvrspi、xvrspip、xvrspim、xvrspiz和xvrspic。
xsrdpic、xvrdpic和xvrspic可以引起不准确异常。
2.转换浮点格式为整数格式
VSX标量双精度到整数格式转换指令转换双精度操作数为32位或者64位带符号或不带符号整数格式。VSX标量双精度到整数格式转换指令:xscvdpsxds、xscvdpsxws、xscvdpuxds、xscvdpuxws。
VSX矢量双精度到整数格式转换指令转换双精度矢量操作数元素为32位或者64位带符号或不带符号整数格式。VSX矢量双精度到整数格式转换指令:xvcvdpsxds、xvcvdpsxws、xvcvdpuxds、xvcvdpuxws。
VSX矢量单精度到整数双字格式转换指令转换源矢量操作数的每个奇数编号字元素中的单精度值为64位带符号或不带符号整数格式。VSX矢量单精度到整数双字格式转换指令:xvcvspsxds、xvcvspuxds。
VSX矢量单精度到整数字格式转换指令转换源矢量操作数的每个字元素的单精度值为32位带符号或不带符号整数格式。VSX矢量单精度到整数字格式转换指令:xvcvspsxws、xvcvspuxws。
使用朝零舍入模式的舍入执行舍入。这些指令可以引起无效操作(VXSNAN,VXCVI)和不准确异常。
3.转换整数格式为浮点格式
VSX标量整数双字到双精度格式转换指令转换64位带符号或不带符号整数到双精度浮点值并且返回双精度格式的结果。VSX标量整数双字到双精度格式转换指令:xscvsxdsp、xscvuxdsp。
VSX标量整数双字到单精度格式转换指令转换64位带符号或不带符号整数到单精度浮点值并且返回双精度格式的结果。VSX矢量整数双字到单精度格式转换指令:xscvsxdsp、xscvuxdsp。
VSX矢量整数双字到双精度格式转换指令转换源矢量操作数的每个双字元素的64位带符号或不带符号整数到双精度浮点格式。VSX矢量整数双字到双精度格式转换指令:xscvsxddp、xscvuxddp。
VSX矢量整数字到双精度格式转换指令转换源矢量操作数的每个奇数编号元素的32位带符号或不带符号整数到双精度浮点格式。VSX矢量整数字到双精度格式转换指令:xscvsxwdp、xscvuxwdp。
VSX矢量整数双字到单精度格式转换指令转换源矢量操作数的每个双字元素的64位带符号或不带符号整数到单精度浮点格式。VSX矢量整数双字到单精度格式转换指令:xscvsxdsp、xscvuxdsp。
VSX矢量整数字到单精度格式转换指令转换源矢量操作数的每个字元素的32位带符号或不带符号整数到单精度浮点格式。VSX矢量整数字到单精度格式转换指令:xscvsxwsp、xscvuxwsp。
使用RN中规定的舍入模式执行舍入。因为源格式的限制,仅可以生成不准确异常。
ConvertSP64toSP(x)
x是双精度格式的单精度浮点值。
返回单精度格式的值x。x必须可以单精度表示,或者,返回的结果未被定义。x可以要求去标准化(denormalization)。不执行舍入。如果x是SNaN,则其转换到具有相同有效负载(payload)的单精度SNaN作为x。
ConvertSPtoSP64(x)
x是单精度格式的浮点值x。
返回双精度格式的值x。如果x是SNaN,则其转换到具有相同有效负载的双精度SNaN作为x。
加载VSX标量作为整数字代数索引XX1形式
lxsiwax XT,RA,RB(0x7C00_0098)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-30)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,RA;位11-15)和第三字段(例如,RB;位16-20)。
EA←((RA=0)?0:GPR[RA])+tea GPR[RB]
VSR[32×TX+T].doubleword[0]←ExtendSign(MEM(EA,4))
VSR[32×TX+T].doubleword[1]←0xUUUU_UUUU_UUUU_UUUU
使XT为与T连接后的TX值。
使EA为GPR[RA]的内容(或者在RA等于0的情况下0)以及GPR[RB]的内容的和。
地址EA处的存储器中的字中的32位有符号整数值被符号扩展(sign-extend)到双字并且放置在VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
如果EA不被字对齐(也就是,EA的位62:63不是0),则允许调用系统对齐错误处理程序(handler),而不是执行存储存取。
改变的特殊寄存器
lxsiwax的VSR数据布局
tgt=VSR[XT]
128位的位0-63包括SD
加载VSX标量作为整数字和零索引XX1形式
lxsiwzx XT,RA,RB(0x7C00_0018)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-30)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,RA;位11-15)和第三字段(例如,RB;位16-20)。
EA←((RA=0)?0:GPR[RA])+tea GPR[RB]
VSR[32×TX+T].doubleword[0]←ExtendZero(MEM(EA,4))
VSR[32×TX+T].doubleword[1]←0xUUUU_UUUU_UUUU_UUUU
使XT为与T连接后的TX值。
使EA为GPR[RA]的内容(或者在RA等于0的情况下0)以及GPR[RB]的内容的和。
地址EA处的存储器中的字中的32位带符号整数值被零扩展(zero-extend)到双字并且放置在VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
如果EA不被字对齐(也就是,EA的位62:63不是0),则允许调用系统对齐错误处理程序,而不是执行存储存取。
改变的特殊寄存器
lxsiwzx的VSR数据布局
tgt=VSR[XT]
128位的位0-63包括UD
加载VSX标量单精度索引XX1形式
lxsspx XT,RA,RB(0x7C00_0418)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-30)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,RA;位11-15)和第三字段(例如, RB;位16-20)。
EA←((RA=0)?0:GPR[RA])+tea GPR[RB]
VSR[32×TX+T].doubleword[0]←ConvertSPtoSP64(MEM(EA,4))
VSR[32×TX+T].doubleword[1]←0xUUUU_UUUU_UUUU_UUUU
使XT为与T连接后的TX值。
使EA为GPR[RA]的内容(或者在RA等于0的情况下0)以及GPR[RB]的内容的和。
地址EA处的存储器中的字中的单精度浮点值被以双精度格式放置在VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
如果EA不被字对齐(也就是,EA的位62:63不是0),则可以调用系统对齐错误处理程序,而不是执行存储存取。
改变的特殊寄存器
lxsspx的VSR数据布局
tgt=VSR[XT]
128位的位0-63包括DP。
存储VSX标量作为整数字索引XX1形式
stxsiwx XS,RA,RB(0x7C00_0118)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-30)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,S字段;位6-10)和第一位(例如,SX字段;位31);第二字段(例如,RA;位11-15)和第三字段(例如,RB;位16-20)。
EA←((RA=0)?0:GPR[RA])+tea GPR[RB]
MEM(EA,4)←VSR[32×SX+S].word[1]
MEMtag(EA,4)←0
使XS为与S连接后的SX值。
使EA为GPR[RA]的内容(或者在RA等于0的情况下0)以及GPR[RB]的内容的和。
VSR[XS]的字元素1的内容以单精度格式放置在地址EA处的存储器中的字中。
如果EA不被字对齐(也就是,EA的位62:63不是0),则可以调用系统对齐错误处理程序,而不是执行存储存取。
改变的特殊寄存器
stxsspx的VSR数据布局
src=VSR[XS]
128位的位32-63包括SW/UW。
存储VSX标量单精度索引XX1形式
stxsspx XS,RA,RB(0x7C00_0518)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-30)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,S字段;位6-10)和第一位(例如,SX字段;位31);第二字段(例如,RA;位11-15)和第三字段(例如,RB;位16-20)。
EA←((RA=0)?0:GPR[RA])+tea GPR[RB]
MEM(EA,4)←ConvertSP64toSP(VSR[32×SX+S].doubleword[0])
MEMtag(EA,4)←0
使XS为与S连接后的SX值。
使EA为GPR[RA]的内容(或者在RA等于0的情况下0)以及GPR[RB]的内容的和。
VSR[XS]的双字元素0中的双精度浮点格式的单精度值以单精度格式放置在地址EA处的存储器中的字中。
如果EA不被字对齐(也就是,EA的位62:63不是0),则可以调用系统对齐错误处理程序,而不是执行存储存取。
改变的特殊寄存器
stxsspx的VSR数据布局
src=VSR[XS]
128位的位0-63包括DP。
VSX标量相加单精度XX3形式
xsaddsp XT,XA,XB(0xF000_0000)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XA为与A连接后的AX值。
使XB为与B连接后的BX值。
使scr1为VSR[XA]的双字元素0的双精度浮点值。
使scr2为VSR[XB]的双字元素0的双精度浮点值。
将scr2相加到scr1,以产生具有无限范围和精度的和。浮点相加基于两个指数比较和有效数的相加。比较两个操作数的指数,并且向右移位伴随较小指数的有效数,其指数对于每个移位位增加1,直至两个指数相等。然后依赖于操作数的符号,适当相加或者相减两个有效数,以形成中间和。有效数的所有53位以及所有三个保护位(G、R和X)进入计算。标准化该和。浮点标准化基于向左移位有效数直至最高有效位是1以及将指数减小有效数被移位的位数。使用由RN规定的舍入模式将中间结果舍入到单精度。
该结果被以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号,FR设置为指示在舍入时该结果是否被增大。FI设置为指示该结果不准确。
如果俘获启用无效操作异常发生,则不修改VSR[XT]和FPRF,并且FR和FI设置为0。
改变的特殊寄存器
FPRF FR FI FX OX UX XX
VXSNAN VXISI
xsaddsp的VSR数据布局
src1=VSR[XA]
128位的位0-63包括DP
src2=VSR[XB]
128位的位0-63包括DP
tgt=VSR[XT]
128位的位0-63包括DP。
VSX标量转换带符号整数双字到浮点格式并且舍入到单精度XX2形式
xscvsxdsp XT,XB(0xF000_04E0)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-29)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);以及第二字段(例如,B字段;位16-20)和第二位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使scr为VSR[XB]的双字元素0中的2的补数整数值。
scr转换为浮点格式,并且使用由RN规定的舍入模式舍入到单精度。
该结果被以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号,FR设置为指示当舍入时该结果是否增大。FI设置为指示该结果不准确。
改变的特殊寄存器
FPRF FR FI FX XX
xscvsxdsp的VSR数据布局
src=VSR[XB]
128位的位0-63包括SD
tgt=VSR[XT]
128位的位0-63包括DP
VSX标量转换无符号整数双字到浮点格式并且舍入到单精度XX2形式
xscvuxdsp XT,XB(0xF000_04A0)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-29)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);以及第二字段(例如,B字段;位16-20)和第二位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使scr为VSR[XB]的双字元素0的无符号整数值。
scr转换为浮点格式,并且使用由RN规定的舍入模式舍入到单精度。
该结果被以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号,FR设置为指示当舍入时该结果是否被增大。FI设置为指示该结果不准确。
改变的特殊寄存器
FPRF FR FI FX XX
xscvuxdsp的VSR数据布局
src=VSR[XB]
128位的位0-63包括UD。
tgt=VSR[XT]
128位的位0-63包括DP。
VSX标量除法单精度XX3形式
xsdivsp XT,XA,XB(0xF000_00C0)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XA为与A连接后的AX值。
使XB为与B连接后的BX值。
使scr1为VSR[XA]的双字元素0的双精度浮点值。
使scr2为VSR[XB]的双字元素0的双精度浮点值。
scr1除以scr2,以产生具有无限范围和精度的商数。浮点除法基于指数减法和有效数的除法。
商数被标准化。浮点标准化基于向左移位有效数直至最高有效位是1以及将指数减小有效数被移位的位数。
中间结果使用由RN规定的舍入模式舍入到单精度。
该结果被以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号,FR设置为指示当舍入时该结果是否被增大。FI设置为指示该结果不准确。
如果俘获启用操作异常或俘获启用除零异常发生,则不修改VSR[XT]和FPRF,并且FR和FI设置为0。
改变的特殊寄存器
FPRF FR FI FX OX UX ZX XX
VXSNAN VXIDI VXZDZ
xsdivsp的VSR数据布局
src1=VSR[XA]
128位的位0-63包括DP。
src2=VSR[XB]
128位的位0-63包括DP
tgt=VSR[XT]
128位的位0-63包括DP
VSX标量乘法加法单精度XX3形式
xsmaddasp XT,XA,XB(0xF000_0008)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
xsmaddmsp XT,XA,XB(0xF000_0048)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XA为与A连接后的AX值。
使XB为与B连接后的BX值。
对于xsmaddasp,进行如下:
-使scr1为VSR[XA]的双字元素0的双精度浮点值。
-使scr2为VSR[XT]的双字元素0的双精度浮点值。
-使scr3为VSR[XB]的双字元素0的双精度浮点值。
对于xsmaddmsp,进行如下:
-使scr1为VSR[XA]的双字元素0的双精度浮点值。
-使scr2为VSR[XB]的双字元素0的双精度浮点值。
-使scr3为VSR[XT]的双字元素0的双精度浮点值。
将scr3乘以scr1,以产生具有无限范围和精度的乘积。浮点相乘基于指数相加和有效数的相乘。
将scr2加到该乘积,以产生具有无限范围和精度的和。浮点相加基于指数比较和两个有效数的相加。比较两个操作数的指数,并且向右移位伴随较小指数的有效数,其指数针对每个移位位增加1,直至两个指数相等。然后依赖于操作数的符号,适当相加或者相减两个有效数,以形成中间和。所有53位有效数以及所有三个保护位(G、R和X)进入计算。标准化该和。浮点标准化基于向左移位有效数直至最高有效数位是1以及将指数减小有效数被移位的位数。
中间结果使用由RN规定的舍入模式舍入到单精度。
该结果被以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号,FR设置为指示当舍入时该结果是否被增大。FI设置为指示该结果不准确。
如果俘获启用无效操作异常发生,则不修改VSR[XT]和FPRF,并且FR和FI设置为0。
改变的特殊寄存器
FPRF FR FI FX OX UX XX
VXSNAN VXISI VXIMZ
xsmadd(a|m)sp的VSR数据布局
src1=VSR[XA]
128位的位0-63包括DP
src2=xsmaddasp?VSR[XT]:VSR[XB]
128位的位0-63包括DP
src3=xsmaddasp?VSR[XB]:VSR[XT]
128位的位0-63包括DP
tgt=VSR[XT]
128位的位0-63包括DP
VSX标量乘法减法单精度XX3形式
xsmsubasp XT,XA,XB(0xF000_0088)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
xsmsubmsp XT,XA,XB(0xF000_00C8)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XA为与A连接后的AX值。
使XB为与B连接后的BX值。
对于xsmsubasp,进行如下:
-使scr1为VSR[XA]的双字元素0的双精度浮点值。
-使scr2为VSR[XT]的双字元素0的双精度浮点值。
-使scr3为VSR[XB]的双字元素0的双精度浮点值。
对于xsmsubmsp,进行如下:
-使scr1为VSR[XA]的双字元素0的双精度浮点值。
-使scr2为VSR[XB]的双字元素0的双精度浮点值。
-使scr3为VSR[XT]的双字元素0的双精度浮点值。
将scr3乘以scr1,以产生具有无限范围和精度的乘积。浮点相乘基于指数相加和有效数的相乘。
scr2被求反并相加到该乘积,以产生具有无限范围和精度的和。浮点相加基于指数比较和两个有效数的相加。比较两个操作数的指数,并且向右移位伴随较小指数的有效数,其指数针对每个移位位增加1,直至两个指数相等。然后依赖于操作数的符号,适当相加或者相减两个有效数,以形成中间和。所有53位有效数以及所有三个保护位(G、R和X)进入计算。
标准化具有无限范围和精度的该结果。浮点标准化基于向左移位有效数直至最高有效位是1以及将指数减小有效数被移位的位数。
中间结果使用由RN规定的舍入模式舍入到单精度。
该结果被以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号,FR设置为指示当舍入时该结果是否被增大。FI设置为指示该结果不准确。
如果俘获启用无效操作异常发生,则不修改VSR[XT]和FPRF,并且FR和FI设置为0。
改变的特殊寄存器
FPRF FR FI FX OX UX XX
VXSNAN VXISI VXIMZ
xsmsub(a|m)sp的VSR数据布局
src1=VSR[XA]
128位的位0-63包括DP
src2=xsmsubasp?VSR[XT]:VSR[XB]
128位的位0-63包括DP
src3=xsmsubasp?VSR[XB]:VSR[XT]
128位的位0-63包括DP
tgt=VSR[XT]
128位的位0-63包括DP
VSX标量乘法单精度XX3形式
xsmsubasp XT,XA,XB(0xF000_0088)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
reset_xflags()
src1←VSR[32×AX+A].doubleword[0]
src2←VSR[32×BX+B].doubleword[0]
v←MultiplyDP(src1,src2)
result←RoundToSP(RN,v)
if(vxsnan_flag)then SetFX(VXSNAN)
if(vximz_flag)then SetFX(VXIMZ)
if(ox_flag)then SetFX(OX)
if(ux_flag)then SetFX(UX)
if(xx_flag)then SetFX(XX)
vex_flag←VE&(vxsnan_flag|vximz_flag)
if(~vex_flag)then do
VSR[32×TX+T].doubleword[0]←ConvertSPtoSP64(result)
VSR[32×TX+T].doubleword[1]←0xUUUU_UUUU_UUUU_UUUU
FPRF←ClassSP(result)
FR←inc_flag
FI←xx_flag
end
else do
FR←0b0
FI←0b0
end
使XT为与T连接后的TX值。
使XA为与A连接后的AX值。
使XB为与B连接后的BX值。
使scr1为VSR[XA]的双字元素0的双精度浮点值。
使scr2为VSR[XB]的双字元素0的双精度浮点值。
将scr2乘以scr1,以产生具有无限范围和精度的乘积。浮点相乘基于指数相加和有效数的相乘。
标准化该乘积。浮点标准化基于向左移位有效数直至最高有效位是1以及将指数减小有效数被移位的位数。
中间结果使用由RN规定的舍入模式舍入到单精度。
该结果被以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号,FR设置为指示当舍入时该结果是否被增大。FI设置为指示该结果不准确。
如果俘获启用有效操作异常发生,则不修改VSR[XT]和FPRF,并且FR和FI设置为0。
改变的特殊寄存器
FPRF FR FI FX OX UX XX
VXSNAN VXIMZ
xsmulsp的VSR数据布局
src1=VSR[XA]
128位的位0-63包括DP
src2=VSR[XB]
128位的位0-63包括DP
tgt=VSR[XT]
128位的位0-63包括DP
VSX标量求反乘法加法单精度XX3形式
xsnmaddasp XT,XA,XB(0xF000_0408)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段 (位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
xsnmaddmsp XT,XA,XB(0xF000_0448)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XA为与A连接后的AX值。
使XB为与B连接后的BX值。
对于xsnmaddasp,进行如下:
-使scr1为VSR[XA]的双字元素0的双精度浮点值。
-使scr2为VSR[XT]的双字元素0的双精度浮点值。
-使scr3为VSR[XB]的双字元素0的双精度浮点值。
对于xsnmaddmsp,进行如下:
-使scr1为VSR[XA]的双字元素0的双精度浮点值。
-使scr2为VSR[XB]的双字元素0的双精度浮点值。
-使scr3为VSR[XT]的双字元素0的双精度浮点值
将scr3乘以scr1,以产生具有无限范围和精度的乘积。浮点相乘基于指数相加和有效数的相乘。
将scr2相加到该乘积,以产生具有无限范围和精度的和。浮点相加加基于指数比较和两个有效数的相加。比较两个操作数的指数,并且向右移位伴 随较小指数的有效数,其指数针对每个移位位增加1,直至两个指数相等。然后依赖于操作数的符号,适当相加或者相减两个有效数,以形成中间和。有效数的所有53位以及所有三个保护位(G、R和X)进入计算。标准化该和。浮点标准化基于向左移位有效数直至最高有效位是1以及将指数减小有效数被移位的位数。
中间结果使用由RN规定的舍入模式舍入到单精度。
该结果被求反并且以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号,FR设置为指示当舍入时该结果是否被增大。FI设置为指示该结果不准确。
如果俘获启用无效操作异常发生,则不修改VSR[XT]和FPRF,并且FR和FI设置为0。
改变的特殊寄存器
FPRF FR FI FX OX UX XX
VXSNAN VXISI VXIMZ
xsnmadd(a|m)sp的VSR数据布局
src1=VSR[XA]
128位的位0-63包括DP
src2=xsnmadda(dp|sp)?VSR[XT]:VSR[XB]
128位的位0-63包括DP
src3=xsnmadda(dp|sp)?VSR[XB]:VSR[XT]
128位的位0-63包括DP
tgt=VSR[XT]
128位的位0-63包括DP
VSX标量求反乘法减法单精度XX3形式
xsmsubasp XT,XA,XB(0xF000_0088)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例 如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
xsnmsubmsp XT,XA,XB(0xF000_04C8)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XA为与A连接后的AX值。
使XB为与B连接后的BX值。
对于xsnmsubasp,进行如下:
-使scr1为VSR[XA]的双字元素0的双精度浮点值。
-使scr2为VSR[XT]的双字元素0的双精度浮点值。
-使scr3为VSR[XB]的双字元素0的双精度浮点值。
对于xsnmsubmsp,进行如下:
-使scr1为VSR[XA]的双字元素0的双精度浮点值。
-使scr2为VSR[XB]的双字元素0的双精度浮点值。
-使scr3为VSR[XT]的双字元素0的双精度浮点值。
将scr3乘以scr1,以产生具有无限范围和精度的乘积。浮点相乘基于指数相加和有效数的相乘。
scr2被求反并相加到该乘积,以产生具有无限范围和精度的和。浮点相加基于指数比较和两个有效数的相加。比较两个操作数的指数,并且向右移位伴随较小指数的有效数,其指数针对每个移位位增加1,直至两个指数相等。然后依赖于操作数的符号,适当相加或者相减两个有效数,以形成中间和。有效数的所有53位以及所有三个保护位(G、R和X)进入计算。
标准化和。浮点标准化基于向左移位有效数直至最高有效位是1以及将指数减小有效数被移位的位数。
中间结果使用由RN规定的舍入模式舍入到单精度。
该结果被求反并且以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号,FR设置为指示当舍入时该结果是否被增大。FI设置为指示该结果不准确。
如果俘获启用无效操作异常发生,则不修改VSR[XT]和FPRF,并且FR和FI设置为0。
改变的特殊寄存器
FPRF FR FI FX OX UX XX
VXSNAN VXISI VXIMZ
xsnmsub(a|m)sp的VSR数据布局
src1=VSR[XA]
128位的位0-63包括DP
src2=xsnmsubasp?VSR[XT]:VSR[XB]
128位的位0-63包括DP
src3=xsnmsubasp?VSR[XB]:VSR[XT]
128位的位0-63包括DP
tgt=VSR[XT]
VSX标量倒数估计单精度XX2形式
xsresp XT,XB(0xF000_0068)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-29)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);以及第二字段(例如,B字段;位16-20)和第二位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使scr为VSR[XB]的双字元素0的双精度浮点值。
scr的倒数的双精度浮点估计被以双精度格式放置入VSR[XT]的双字元素0中。
除非src的倒数将是零、无穷大或者QNaN,否则该估计在精度上具有不大于src的倒数的16384分之一的相对误差。也就是,
利用操作数的各种特别值的运算总结如下。
1.如果ZE=1则无结果
2.如果VE=1则无结果
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号,FR设置为未定义的值。FI设置为未定义的值。
如果俘获启用无效操作异常或者俘获启用除零异常发生,则不修改VSR[XT]和FPRF。
执行这个指令的结果可以在实现方式之间以及相同实现方式上的不同执行之间发生变化。
改变的特殊寄存器
FPRF FR=0bU FI=0bU FX OX UX ZX
XX=0bU VXSNAN
xsresp的VSR数据布局
src=VSR[XB]
128位的位0-63包括DP
tgt=VSR[XT]
128位的位0-63包括DP。
VSX标量舍入到单精度XX2形式
xsrsp XT,XB(0xF000_0464)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-29)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例 如,TX字段;位31);以及第二字段(例如,B字段;位16-20)和第二位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使scr为VSR[XB]的双字元素0的双精度浮点值。
使用由FPSCR的浮点舍入控制字段RN规定的舍入模式将scr舍入到单精度。
该结果被以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号。
如果俘获启用无效操作异常发生,则不修改VSR[XT]和FPRF。
改变的特殊寄存器
FPRF FR FI FX OX UX XX VXSNAN
xsrsp的VSR数据布局
src=VSR[XB]
128位的位0-63包括DP
tgt=VSR[XT]
128位的位0-63包括DP
VSX标量舍入到单精度XX2形式
xsrsp XT,XB(0xF000_0464)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-29)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);以及第二字段(例如,B字段;位16-20)和第二位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使scr为VSR[XB]的双字元素0的双精度浮点值。
使用由FPSCR的浮点舍入控制字段RN规定的舍入模式将scr舍入到单精度。
该结果被以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号。
如果俘获启用无效操作异常发生,则不修改VSR[XT]和FPRF。
改变的特殊寄存器
FPRF FR FI FX OX UX XX VXSNAN
xsrsp的VSR数据布局
src=VSR[XB]
128位的位0-63包括DP
tgt=VSR[XT]
128位的位0-63包括DP
VSX标量倒数平方根估计单精度XX2形式
xsrsqrtesp XT,XB(0xF000_0028)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-29)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);以及第二字段(例如,B字段;位16-20)和第二位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使scr为VSR[XB]的双字元素0的双精度浮点值。
scr的倒数平方根的单双精度浮点估计被以双精度格式放置入VSR[XT]的双字元素0中。
除非src的平方根的倒数将是零、无穷大或者QNaN,否则该估计在精度上相对于src的倒数具有不大于16384分之一的相对误差。也就是,
利用操作数的各种特殊值的运算总结如下。
1.如果VE=1则无结果
2.如果ZE=1则无结果
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号,FR设置为未定义的值。FI设置为未定义的值。
如果俘获启用无效操作异常或者俘获启用除零异常发生,则不修改VSR[XT]和FPRF。
执行这个指令的结果可以在实现方式之间以及相同实现方式上的不同执行之间发生变化。
改变的特殊寄存器
FPRF FR=0bU FI=0bU FX ZX XX=0bU
VXSNAN VXSQRT
xsrsqrtesp的VSR数据布局
src=VSR[XB]
128位的位0-63包括DP
tgt=VSR[XT]
128位的位0-63包括DP
VSX标量平方根单精度XX形式
xssqrtsp XT,XB(0xF000_002C)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-29)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);以及第二字段(例如,B字段;位16-20)和第二位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使scr为VSR[XB]的双字元素0的双精度浮点值。
产生src的无限精度平方根。
使用由FPSCR的浮点舍入控制字段RN规定的舍入模式将中间结果舍入到单精度。
该结果被以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号,FR设置为指示当舍入时该结果是否被增大。FI设置为指示该结果不准确。
如果俘获启用无效操作异常发生,则不修改VSR[XT]和FPRF,并且FR和FI设置为0。
改变的特殊寄存器
FPRF FR FI FX OX UX XX
VXSNAN VXSQRT
xssqrtsp的VSR数据布局
src=VSR[XB]
128位的位0-63包括DP
tgt=VSR[XT]
128位的位0-63包括DP
VSX标量减法单精度XX3形式
xssubsp XT,XA,XB(0xF000_0040)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XA为与A连接后的AX值。
使XB为与B连接后的BX值。
使scr1为VSR[XA]的双字元素0的双精度浮点值。
使scr2为VSR[XB]的双字元素0的双精度浮点值。
scr2被求反并相加到src1,以产生具有无限范围和精度的和v。浮点相加基于指数比较和两个有效数的相加。比较两个操作数的指数,并且向右移位伴随较小指数的有效数,其指数针对每个移位位增加1,直至两个指数相等。然后依赖于操作数的符号,适当相加或者相减两个有效数,以形成中间和。有效数的所有53位以及所有三个保护位(G、R和X)进入计算。
v被标准化,并使用由FPSCR的浮点舍入控制字段RN规定的舍入模式 将v舍入到单精度。浮点标准化基于向左移位有效数直至最高有效位是1以及将指数减小有效数被移位的位数。
该结果被放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为单精度格式表示的结果的类和符号,FR设置为指示当舍入时该结果是否被增大。FI设置为指示该结果不准确。
如果俘获启用无效操作异常发生,则不修改VSR[XT]和FPRF,并且FR和FI设置为0。
改变的特殊寄存器
FPRF FR FI FX OX UX XX
VXSNAN VXISI
xssubsp的VSR数据布局
src1=VSR[XA]
128位的位0-63包括DP
src2=VSR[XB]
128位的位0-63包括DP
tgt=VSR[XT]
128位的位0-63包括DP
POWER ISA AS–书1–第7章,矢量-标量浮点运算[类别:VSX]
7.6.2VSX指令描述转换
7.6.2.1VSX指令RTL运算符
x{y}
返回x的位y。
x{y:z}
返回x的位y:z。
x=y
y的值被放置入x。
x|=y
y的值与x的值“或”并被置入x。
~x
返回x的1的补数。
!x
在x的内容等于0的情况下返回1,否则返回0
x||y
返回与y的值连接后的x的值。例如,0b010||0b111与0b010111相同。
x^y
返回与y的值与x的值的“异或”。
x?y:z
如果x的值为真,则返回y的值,否则返回值z。
x+y
x和y是整数值。
返回x和y的和。
+tea
见Power AS ISA.
x–y
x和y是整数值。
返回x和y的差。
x!=y
x和y是整数值。
在x不等于y的情况下返回1,否则返回0。
x<=y
x和y是整数值。
在x小于y的情况下返回1,否则返回0。
x>=y
x和y是整数值。
在x大于或等于y的情况下返回1,否则返回0。
7.6.2.2VSX指令RTL函数调用
AddDP(x,y)
x和y是双精度浮点值。
如果x或y是SNaN,则vxsnan_flag设置为1.
如果x是无穷大并且y是相反符号的无穷大,则vxisi_flag设置为1。.
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果y是QNaN,则返回y。
否则,如果y是SNaN,则返回表示为QNaN的y。
否则,如果x和y是相反符号的无穷大,则返回标准QNaN。
否则,返回具有无限范围的精度的、x和y的标准化和。
AddSP(x,y)
x和y是单精度浮点值。
如果x或y是SNaN,则vxsnan_flag设置为1.
如果x是无穷大并且y是相反符号的无穷大,则vxisi_flag设置为1。.
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果y是QNaN,则返回y。
否则,如果y是SNaN,则返回表示为QNaN的y。
否则,如果x和y是相反符号的无穷大,则返回标准QNaN。
否则,返回具有无限范围的精度的、y与x相加的标准化和。
ClassDP(x,y)
返回双精度浮点数x的5位特征描述(characterization)。
0b10001=安静NaN
0b01001=-无穷大
0b01000=-标准化的数
0b11000=-去标准化的数
0b10010=-零
0b00010=+零
0b10100=+去标准化的数
0b00100=+标准化的数
0b00101=+无穷大
ClassSP(x,y)
返回单精度浮点数x的5位特征描述。
0b10001=安静NaN
0b01001=-无穷大
0b01000=-标准化的数
0b11000=-去标准化的数
0b10010=-零
0b00010=+零
0b10100=+去标准化的数
0b00100=+标准化的数
0b00101=+无穷大
CompareEQDP(x,y)
x和y是双精度浮点值。
如果x或y是NaN,则返回0。
否则,如果x等于y,则返回1。
否则,返回0。
CompareEQSP(x,y)
x和y是单精度浮点值。
如果x或y是NaN,则返回0。
否则,如果x等于y,则返回1。
否则,返回0。
CompareGTDP(x,y)
x和y是双精度浮点值。
如果x或y是NaN,则返回0。
否则,如果x大于y,则返回1。
否则,返回0。
CompareGTSP(x,y)
x和y是单精度浮点值。
如果x或y是NaN,则返回0。
否则,如果x大于y,则返回1。
否则,返回0。
CompareLTDP(x,y)
x和y是双精度浮点值。
如果x或y是NaN,则返回0。
否则,如果x小于y,则返回1。
否则,返回0。
CompareLTSP(x,y)
x和y是单精度浮点值。
如果x或y是NaN,则返回0。
否则,如果x小于y,则返回1。
否则,返回0。
ConvertDPtoSD(x)
x是双精度整数值。
如果x是NaN,
则返回0x8000_0000_0000_0000,vxcvi_flag设置为1,并且在x是SNaN的情况下vxsnan_flag设置为1。
否则,进行如下。
如果x大于263-1,则返回0x7FFF_FFFF_FFFF_FFFF并且vxcvi_flag设置为1。
否则,如果x小于-263,则返回0x8000_0000_0000_0000并且 vxcvi_flag设置为1。.
否则,返回64位带符号整数格式的值x。
ConvertDPtoSW(x)
x是双精度整数值。
如果x是NaN,则返回0x8000_0000,vxcvi_flag设置为1,并且在x是SNaN的情况下vxsnan_flag设置为1。
否则,进行如下。
如果x大于231-1,则返回0x7FFF_FFFF并且vxcvi_flag设置为1。
否则,如果x小于-231,则返回0x8000_0000并且vxcvi_flag设置为1。
否则,返回32位带符号整数格式的值x。
ConvertDPtoUD(x)
x是双精度整数值。
如果x是NaN,则返回0x0000_0000_0000_0000,vxcvi_flag设置为1,并且在x是SNaN的情况下vxsnan_flag设置为1。
否则,进行如下。
如果x大于264-1,则返回0xFFFF_FFFF_FFFF_FFFF并且vxcvi_flag设置为1。
否则,如果x小于0,则返回0x0000_0000_0000_0000并且vxcvi_flag设置为1。
否则,返回64位不带符号整数格式的值x。
ConvertDPtoUW(x)
x是双精度整数值。
如果x是NaN,则返回0x0000_0000,vxcvi_flag设置为1,并且在x是SNaN的情况下vxsnan_flag设置为1。
否则,进行如下。
如果x大于232-1,则返回0xFFFF_FFFF并且vxcvi_flag设置为1。
否则,如果x小于0,则返回0x0000_0000并且vxcvi_flag设置为1。
否则,返回32位不带符号整数格式的值x。
ConvertFPtoDP(x)
返回DP格式的浮点值。
ConvertFPtoSP(x)
返回单精度格式的浮点值x。
ConvertSDtoFP(x)
x是64位不带符号整数值。
返回转换为具有无限有效数精度的浮点格式的值x。
ConvertSP64toSP(x)
x是双精度格式的单精度浮点值。
返回x单精度格式的值x。x必须可以单精度表示,否则未定义返回的结果。x可以要求去标准化。不执行舍入。如果x是SNaN,则其转换为具有相同有效负载的单精度作为x。
ConvertSPtoDP(x)
x是单精度浮点值。
如果x SNaN,则vxsnan_flag设置为1.
如果x是SNaN,则返回表示为双精度浮点格式的QNaN的x。
否则,如果x是QNaN,则返回双精度格式的x。
否则,返回双精度浮点格式的x。
ConvertSPtoSD(x)
x是单精度整数值。
如果x是NaN,则返回0x8000_0000_0000_0000并且vxcvi_flag设置为1,并且在x是SNaN的情况下vxsnan_flag设置为1。
否则,进行如下。
如果x大于263-1,则返回0x7FFF_FFFF_FFFF_FFFF并且vxcvi_flag设置为1。
否则,如果x小于-263,则返回0x8000_0000_0000_0000并且vxcvi_flag设置为1。
否则,返回64位带符号整数格式的值x。
ConvertSPtoSP64(x)
x是单精度格式的浮点值。
返回双精度格式的值x。如果x是SNaN,则其转换到具有相同有效负载的双精度SNaN作为x。
ConvertSPtoSW(x)
x是单精度整数值。
如果x是NaN,则返回0x8000_0000,vxcvi_flag设置为1,并且在x是SNaN的情况下vxsnan_flag设置为1。
否则,进行如下。
如果x大于231-1,则返回0x7FFF_FFFF并且vxcvi_flag设置为1。
否则,如果x小于-231,则返回0x8000_0000并且vxcvi_flag设置为1。
否则,返回32位带符号整数格式的值x。
ConvertSPtoUD(x)
x是单精度整数值。
如果x是NaN,则返回0x0000_0000_0000_0000,vxcvi_flag设置为1,并且在x是SNaN的情况下vxsnan_flag设置为1
否则,进行如下。
如果x大于264-1,则返回0xFFFF_FFFF_FFFF_FFFF并且vxcvi_flag设置为1。
否则,如果x小于0,则返回0x0000_0000_0000_0000并且vxcvi_flag设置为1。
否则,返回64位不带符号整数格式的值x。
ConvertSPtoUW(x)
x是单精度整数值。
如果x是NaN,则返回0x0000_0000,vxcvi_flag设置为1,并且在x是SNaN的情况下vxsnan_flag设置为1。
否则,进行如下。
如果x大于232-1,则返回0xFFFF_FFFF并且vxcvi_flag设置为1。
否则,如果x小于0,则返回0x0000_0000并且vxcvi_flag设置为1。
否则,返回32位不带符号整数格式的值x。
ConvertSWtoFP(x)
x是32位带符号整数值。
返回转换为具有无限有效数精度的浮点格式的值x。
ConvertUDtoFP(x)
x是64位不带符号整数值。
返回转换为具有无限有效数精度的浮点格式的值x。
ConvertUWtoFP(x)
x是32位不带符号整数值。
返回转换为具有无限有效数精度的浮点格式的值x。
DivideDP(x,y)
x和y是双精度浮点值。
如果x或y是SNaN,则vxsnan_flag设置为1。
如果x是零并且y是零,则vxzdz_flag设置为1。
如果x是有限大的非零值,并且y是零,则zx_flag设置为1。
如果x无穷大并且y无穷大,则vxidi_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果y是QNaN,则返回y。
否则,如果y是SNaN,则返回表示为QNaN的y。
否则,如果x是零并且y是零,则返回标准QNaN。
否则,如果x是有限大的非零值并且y是具有与x相同符号的零,则返回+无穷大。
否则,如果x是有限大的非零值并且y是具有与x相反符号的零,则返回-无穷大。
否则,如果x是无穷大并且是无穷大,则返回标准QNaN。
否则,返回具有无限范围和精度的、x除以y的标准化商数。
DivideSP(x,y)
x和y是单精度浮点值。
如果x或y是SNaN,则vxsnan_flag设置为1。
如果x是零并且y是零,则vxzdz_flag设置为1。
如果x是有限大的非零值,并且y是零,则zx_flag设置为1。
如果x无穷大并且y无穷大,则vxidi_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果y是QNaN,则返回y。
否则,如果y是SNaN,则返回表示为QNaN的y。
否则,如果x是零并且y是零,则返回标准QNaN。
否则,如果x是有限大的非零值并且y是具有与x相同符号的零,则返回+无穷大。
否则,如果x是有限大的非零值并且y是具有与x相反符号的零,则返回-无穷大。
否则,如果x是无穷大并且y是无穷大,则返回标准QNaN。
否则,返回具有无限范围和精度的、x除以y的标准化商数。
DenormDP(x)
x是具有无限范围和精度的浮点值。
返回值x,其中值x的有效数被向右移位等于-1022与x的无偏指数之间的差的位数,并将x的无偏指数设置为-1022。
DenormSP(x)
x是具有无限范围和精度的浮点值。
返回值x,其中值x的有效数被向右移位等于-126与x的无偏指数之间的差的位数,并且将x的无偏指数设置为-126。
IsInf(x)
在x是无穷大的情况下返回1,否则返回0。
IsNaN(x)
在x是SNaN或QNaN的情况下返回1,否则返回0。
IsNeg(x)
在x是负非零值的情况下返回1,否则返回0。
IsSNaN(x)
在x是SNaN的情况下返回1,否则返回0。,
IsZero(x)
在x是零的情况下返回1,否则返回0。
MaximumDP(x,y)
x和y是双精度浮点值。
如果x或y是SNaN,则vxsnan_flag设置为1。
如果x是QNaN并且y不是NaN,则返回y。
否则,如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果y是QNaN,则返回x。
否则,如果y是SNaN,则返回表示为QNaN的y。
否则,返回x和y中的更大者,其中+0被认为大于–0。
MaximumSP(x,y)
x和y是单精度浮点值。
如果x或y是SNaN,则vxsnan_flag设置为1。
如果x是QNaN并且y不是NaN,则返回y。
否则,如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果y是QNaN,则返回x。
否则,如果y是SNaN,则返回表示为QNaN的y。
否则,返回x和y中的更大者,其中+0被认为大于–0。
MEM(x,y)
存储器的y个字节的序列的内容。该序列依赖于如下的存储器存取的字节顺序(endianness)。
–对于大端(big-endian)存储器存取,序列以地址x处的字节开始并且以地址x+y-1处的字节结束。
–对于小端(little-endian)存储器存取,序列以地址x+y-1处的字节开始并且以地址x处的字节结束。
MEMtag(x,y)
与存储器的y个字节的序列相关联的标签位。
MinimumDP(x,y)
x和y是双精度浮点值。
如果x或y是SNaN,则vxsnan_flag设置为1。
如果x是QNaN并且y不是NaN,则返回y。
否则,如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果y是QNaN,则返回x。
否则,如果y是SNaN,则返回表示为QNaN的y。
否则,返回x和y中的更小者,其中-0被认为小于+0。
MinimumSP(x,y)
x和y是单精度浮点值。
如果x或y是SNaN,则vxsnan_flag设置为1。
如果x是QNaN并且y不是NaN,则返回y。
否则,如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果y是QNaN,则返回x。
否则,如果y是SNaN,则返回表示为QNaN的y。
否则,返回x和y中的更小者,其中-0被认为小于+0。
MultiplyAddDP(x,y,z)
x、y和z是双精度浮点值。
如果x、y或z是SNaN,则vxsnan_flag设置为1。
如果x是零并且y是无穷大,或者x是无穷大并且y是零,则vximz_flag设置为1。
如果x和y的乘积是无穷大并且z是相反符号的无穷大,则vxisi_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果z是QNaN,则返回z。
否则,如果z是SNaN,则返回表示为QNaN的z。
否则,如果y是QNaN,则返回y。
否则,如果y是SNaN,则返回表示为QNaN的y。
否则,如果x是零并且y是无穷大,或者x是无穷大并且y是零,则返回标准QNaN。
否则,如果x和y的乘积是无穷大,并且z是相反符号的无穷大,则返回标准QNaN。
否则,返回具有无限范围和精度的、z与x和y的乘积的标准化和。
MultiplyAddSP(x,y,z)
x、y和z是单精度浮点值。
如果x、y或z是SNaN,则vxsnan_flag设置为1。
如果x是零并且y是无穷大,或者x是无穷大并且y是零,则vximz_flag设置为1。
如果x和y的乘积是无穷大并且z是相反符号的无穷大,则vxisi_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果z是QNaN,则返回z。
否则,如果z是SNaN,则返回表示为QNaN的z。
否则,如果y是QNaN,则返回y。
否则,如果y是SNaN,则返回表示为QNaN的y。
否则,如果x是零并且y是无穷大,或者x是无穷大并且y是零,则返回标准QNaN。
否则,如果x和y的乘积是无穷大,并且z是相反符号的无穷大,则返回标准QNaN。
否则,返回具有无限范围和精度的、z与x和y的乘积的标准化和。
MultiplyDP(x,y)
x和y是双精度浮点值。
如果x或z是SNaN,则vxsnan_flag设置为1。
如果x是零并且y是无穷大,或者x是无穷大并且y是零,则vximz_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果y是QNaN,则返回y。
否则,如果y是SNaN,则返回表示为QNaN的y。
否则,如果x是零并且y是无穷大,或者x是无穷大并且y是零,则返回标准QNaN。
否则,返回具有无限范围和精度的、x和y的标准化乘积。
MultiplySP(x,y)
x和y是单精度浮点值。
如果x或z是SNaN,则vxsnan_flag设置为1。
如果x是零并且y是无穷大,或者x是无穷大并且y是零,则vximz_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果y是QNaN,则返回y。
否则,如果y是SNaN,则返回表示为QNaN的y。
否则,如果x是零并且y是无穷大,或者x是无穷大并且y是零,则返回标准QNaN。
否则,返回具有无限范围和精度的、x和y的标准化乘积。
NegateDP(x)
如果双精度浮点值x是NaN,则返回x。
否则,返回其符号位被求补后的双精度浮点值x。
NegateSP(x)
如果单精度浮点值x是NaN,则返回x。
否则,返回具有其互补符号位的单精度浮点值。
ReciprocalEstimateDP(x)
x是双精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是零,则zx_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是零,则返回具有x的符号的无穷大。
否则,如果x是无穷大,则返回具有x的符号的零。
否则,返回具有无限指数范围的、x的倒数的估计。
ReciprocalEstimateSP(x)
x是单精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是零,则zx_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是零,则返回具有x的符号的无穷大。
否则,如果x是无穷大,则返回具有x的符号的零。
否则,返回具有无限指数范围的、x的倒数的估计。
ReciprocalSquareRootEstimateDP(x)
x是双精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是零,则zx_flag设置为1。
如果x是负非零数,则vxsqrt_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是负非零值,则返回默认QNaN。
否则,返回具有无限指数范围的、x的平方根的倒数的估计。
ReciprocalSquareRootEstimateSP(x)
x是单精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是零,则zx_flag设置为1。
如果x是负非零数,则vxsqrt_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是负非零值,则返回默认QNaN。
否则,返回无限的、x的平方根的倒数的估计。
reset_xflags()
vxsnan_flag设置为0。
vximz_flag设置为0。
vxidi_flag设置为0。
vxisi_flag设置为0。
vxzdz_flag设置为0。
vxsqrt_flag设置为0。
vxcvi_flag设置为0。
vxvc_flag设置为0。
ox_flag设置为0。
ux_flag设置为0。
xx_flag设置为0。
zx_flag设置为0。
RoundToDP(x,y)
x是指定四个舍入模式之一的2位不带符号整数。
0b00舍入到最接近的偶数
0b01朝零舍入
0b10朝+无穷大舍入
0b11朝–无穷大舍入
y是具有无限范围和精度的标准化浮点值。
返回在由x指定的舍入模式的控制下舍入到双精度的值y。
RoundToDPCeil(x)
x是具有无限范围和精度的浮点值。
如果x是QNaN,则返回x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
返回具有无限指数范围但具有双精度有效数精度的、在值上大于或者等于x的最小浮点数。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToDPFloor(x)
x是具有无限范围和精度的浮点值。
如果x是QNaN,则返回x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
返回具有无限指数范围但具有双精度有效数精度的、在值上小于或者等于x的最大浮点数。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToDPIntegerCeil(x)
x是双精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
返回在值上大于或者等于x的最小双精度浮点整数值。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToDPIntegerFloor(x)
x是双精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
返回在值上小于或者等于x的最大双精度浮点整数值。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToDPIntegerNearAway(x)
x是双精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
在x>0的情况下,返回在值上小于或者等于x+0.5的最大单精度浮点整数值,或者在x<0的情况下,返回在值上大于或者等于x-0.5的最小单精度浮点整数值。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToDPIntegerNearEven(x)
x是双精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
返回在值上最接近x的双精度浮点整数值(在平局的情况下,使用最 小有效位等于0的双精度浮点整数值)。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToDPIntegerTrunc(x)
x是双精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
在x>0的情况下,返回在值上小于或者等于x的最大双精度浮点整数值,或者在x<0的情况下,返回在值上大于或者等于x的最小双精度浮点整数值。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToDPNearEven(x)
x是具有无限范围和精度的双精度浮点值。
如果x是QNaN,则返回x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
返回具有无限指数范围但具有双精度有效数精度的、在值上最接近x的浮点数(在平局的情况下,使用最小有效位等于0的具有无限指数范围但具有双精度有效数精度的浮点数)。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToDPTrunc(x)
x是具有无限范围和精度的双精度浮点值。
如果x是QNaN,则返回x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
在x>0的情况下,返回在值上小于或者等于x的具有无限指数范围但具有双精度有效数精度的最大浮点数,或者在x<0的情况下,返回在值上大于或者等于x的具有无限指数范围但是具有双精度有效数精度的最小浮点数。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToSP(x,y)
x是指定四个舍入模式之一的2位不带符号整数。
0b00舍入到最接近偶数
0b01朝零舍入
0b10朝+无穷大舍入
0b11朝–无穷大舍入
y是具有无限范围和精度的标准化浮点值。
返回在由x指定的舍入模式的控制下舍入到单精度的值y。
RoundToSPCeil(x)
x是具有无限范围和精度的浮点值。
如果x是QNaN,则返回x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
返回具有无限指数范围但是具有单精度有效数精度的、在值上大于或者等于x的最小浮点数。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToSPFloor(x)
x是具有无限范围和精度的浮点值。
如果x是QNaN,则返回x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
返回具有无限指数范围但是具有单精度有效数精度的、在值上小于或者等于x的的最大浮点数。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToSPIntegerCeil(x)
x是单精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
返回在值上大于或者等于x的最小双精度浮点整数值。
如果返回值的量级大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToSPIntegerFloor(x)
x是单精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
返回在值上小于或者等于x的最大双精度浮点整数值。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToSPIntegerNearAway(x)
x是单精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
在x是浮点整数的情况下返回x;否则在x>0的情况下,返回在值上小于或者等于x+0.5的最大单精度浮点整数值,或者在x<0的情况下,返回在值上大于或者等于x-0.5的最小单精度浮点整数值。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToSPIntegerNearEven(x)
x是单精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
在x是浮点整数的情况下返回x;否则返回在值上最接近x的单精度浮点整数值(在平局的情况下,使用最小有效位等于0的单精度浮点整数值)。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToSPIntegerTrunc(x)
x是单精度浮点值。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x,并且vxsnan_flag设置为1。
否则,如果x是无穷大,则返回x。
否则,进行如下。
在x>0的情况下,返回在值上小于或者等于x的最大单精度浮点整数值,或者在x<0的情况下,返回在值上大于或者等于x的最小单精度浮点整数值。
如果返回值的量级大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToSPNearEven(x)
x是具有无限范围和精度的浮点值。
如果x是QNaN,则返回x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
返回具有无限指数范围但是具有单精度有效数精度的、在值上最接近x的浮点数(在平局的情况下,使用最小有效位等于0的具有无限指数范围但具有单精度有效数精度的浮点数)。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
RoundToSPTrunc(x)
x是具有无限范围和精度的浮点值。
如果x是QNaN,则返回x。
否则,如果x是无穷大,则返回x。
否则,进行如下。
在x>0的情况下,返回在值上小于或者等于x的具有无限指数范围但具有单精度有效数精度的最大浮点数,或者在x<0的情况下,返回在值上大于或者等于x的最小单精度浮点数。
如果返回值的大小大于x,则inc_flag设置为1。
如果返回值不等于x,则xx_flag设置为1。
Scalb(x,y)
x是具有无限范围和精度的浮点值。
y是带符号整数。.
浮点值x乘以2y的结果。
SetFX(x)
x是FPSCR中的异常标志之一。
如果x的内容是0,则FX和x设置为1。
SquareRootDP(x)
x是双精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是负非零值,则vxsqrt_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是负非零值,则返回默认QNaN。
否则,返回具有无限范围和精度的、x的标准化平方根。
SquareRootSP(x)
x是单精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是负非零值,则vxsqrt_flag设置为1。
如果x是QNaN,则返回x。
否则,如果x是SNaN,则返回表示为QNaN的x。
否则,如果x是负非零值,则返回默认QNaN。
否则,返回具有无限范围和精度的、x的标准化平方根。
VSX矢量加法单精度XX3形式
xvaddsp XT,XA,XB(0xF000_0200)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XA为与A连接后的AX值。
使XB为与B连接后的BX值。
对于从0到3的每个矢量元素i,进行如下:
使scr1为VSR[XA]的字元素i的单精度浮点操作数。
使scr2为VSR[XB]的字元素i的单精度浮点操作数。
将scr2加到scr1,以产生具有无限范围和精度的和。浮点加法基于指数比较和两个有效数的相加。比较两个操作数的指数,并且向右移位伴随较小指数的有效数,其指数针对每个移位位增加1,直至两个指数相等。然后依赖于操作数的符号,适当相加或者相减两个有效数,以形成中间和。有效数的所有53位以及所有三个保护位(G、R和X)进入计算。
标准化该和。浮点标准化基于向左移位有效数直至最高有效位是1以及将指数减少有效数被移位的位数。
使用由FPSCR的浮点舍入控制字段RN规定的舍入模式将中间结果舍入到单精度。
该结果被以单精度格式放置入VSR[XT]的字元素i中。
如果俘获启用异常发生在矢量的任何元素中,则没有结果写入到VSR[XT]。
改变的特殊寄存器
FX OX UX XX VXSNAN VXISI
xvaddsp的VSR数据布局
src1=VSR[XA]
128位的位0-31、位32-63、位64-95以及位96-127包括SP
src2=VSR[XB]
128位的位0-31、位32-63、位64-95和位96-127包括SP
tgt=VSR[XT]
128位的位0-31、位32-63、位64-95和位96-127包括SP
RFC02242.r3:BFP/VSX杂项运算
ConvertDPtoSP(x)
x是双精度浮点值。
如果x是SNaN,则vxsnan_flag设置为1。
如果x是SNaN,则返回单精度浮点格式的被转换为QNaN的x。
否则,如果x是QNaN、无穷大或者零,则返回单精度浮点格式的x。
否则,返回使用RN中规定的舍入模式舍入到单精度的、单精度浮点格式的x。
如果舍入x导致溢出异常,则ox_flag设置为1。
如果舍入x导致下溢异常,则ux_flag设置为1。
如果舍入x返回不准确的结果,则xx_flag设置为1。
如果舍入期间增大了结果的有效数,则inc_flag设置为1。
ConvertDPtoSP_NS(x)
x是以双精度格式表示的单精度浮点值。
返回单精度格式的x。
如果x不可以单精度表示,则将丢弃可能产生不期望结果的一些指数和/或有效数。丢弃x的有效数的低序位29个位,在x的无偏指数小于-126的情况(即,非标准)下,丢弃更多。具有小于-155的无偏指数的x的有限值将返回零的结果。具有大于+127的无偏指数的x的有限值将导致丢弃指数的有效位。有效数的上23位中不具有有效位的SNaN输入将返回无穷大作为结果。对于任何这些情况不设置状态。
ConvertSPtoDP_NS(x)
x是单精度浮点值。.
返回双精度格式的x。
标量舍入双精度到单精度并且转换到单精度格式
xscvdpsp XT,XB(0xF000_0424)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-29)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);以及第二字段(例如,B字段;位16-20)和第二位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使scr为VSR[XB]的双字元素0的双精度浮点值。
如果src是SNaN,则该结果是转换为QNaN的src(即,src的位12设置为1)。VXSNAN设置为1。
否则,如果src是QNaN、无穷大或者零,则结果是src。
否则,结果是使用由RN规定的舍入模式舍入到单精度的src。
该结果被以单精度格式放置入VSR[XT]的字元素0中。
未定义VSR[XT]的字元素1、2和3的内容。
FPRF设置为结果的类和符号。FR设置为指示当舍入时该结果是否被增大。FI设置为指示该结果不准确。
如果俘获无效操作异常发生,则不修改VSR[XT]和FPFR,并且FR和FI设置为0。
改变的特殊寄存器
FPRF FR FI FX OX UX XX VXSNAN
xscvdpsp的VSR数据布局
src=VSR[XB]
128位的位0-63包括DP
tgt=VSR[XT]
128位的位0-31包括SP
标量转换标量单精度到矢量单精度格式无信令
xscvdpspn XT,XB(0xF000_042C)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-29)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);以及第二字段(例如,B字段;位16-20)和第二位(例如,BX字段;位30)。
reset_xflags()
src←VSR[32×BX+B].dword[0]
result←ConvertDPtoSP_NS(src)
VSR[32×TX+T].word[0]←result
VSR[32×TX+T].word[1]←0xUUUU_UUUU
VSR[32×TX+T].word[2]←0xUUUU_UUUU
VSR[32×TX+T].word[3]←0xUUUU_UUUU
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使scr为以双精度格式表示的VSR[XB]的双字元素0中的单精度浮点值。
src被以单精度格式放置入VSR[XT]的字元素0中。
未定义VSR[XT]的字元素1、2和3的内容。
改变的特殊寄存器
xscvdpspn的VSR数据布局
src=VSR[XB]
128位的位0-63包括SP
tgt=VSR[XT]
128位的位0-31包括SP
xscvdpsp应被用于转换标量双精度值到矢量单精度格式。
xscvdpspn应被用于转换标量单精度值到矢量单精度格式。
标量转换单精度到双精度格式
xscvspdp XT,XB(0xF000_0524)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-29)的扩展操作码组合(例如,连接)的 主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);以及第二字段(例如,B字段)和第二位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XB为与B连接后的BX值。
使scr为VSR[XB]的字元素0的单精度浮点值。
如果src是SNaN,则该结果是转换为QNaN的src(即,src的位9设置为1)。VXSNAN设置为1。
否则,结果是src。
该结果被以双精度格式放置入VSR[XT]的字元素0中。
未定义VSR[XT]的双字元素1的内容。
FPRF设置为结果的类和符号。FR设置为0。FI设置为0。
如果俘获无效操作异常发生,则不修改VSR[XT],不修改FPFR,并且FR设置为0并且FI设置为0。
改变的特殊寄存器
FPRF FR←0b0 FI←0b0 FX VXSNAN
xscvspdp的VSR数据布局
src=VSR[XB]
128位的位0-31包括SP
tgt=VSR[XT]
128位的位0-63包括DP
标量转换单精度到双精度格式无信令
xscvspdpn XT,XB(0xF000_052C)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-29)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);以及第二字段(例如,B字段;位16-20)和第二位(例如,BX字段;位30)。
reset_xflags()
src←VSR[32×BX+B].word[0]
result←ConvertSPtoDP_NS(src)
VSR[32×TX+T].dword[0]←result
VSR[32×TX+T].dword[1]←0xUUUU_UUUU_UUUU_UUUU
使XT为与T连接后的TX值。
使XB为与B连接后的值BX。
使scr为VSR[XB]的字元素0的单精度浮点值。
src被以双精度格式放置入VSR[XT]的双字元素0中。
未定义VSR[XT]的双字元素1的内容。
改变的特殊寄存器
xscvspdpn的VSR数据布局
src=VSR[XB]
128位的位0-31包括SP
tgt=VSR[XT]
128位的位0-63包括DP
xscvspdp应被用于转换矢量单精度值到标量双精度格式。
xscvspdpn应被用于转换矢量单精度值到标量单精度格式。
VSX逻辑等效
xxleqv XT,XA,XB(0xF000_05D0)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
VSR[32×TX+T]←VSR[32×AX+A]h VSR[32×BX+B]
使XT为与T连接后的TX值。
使XA为与A连接后的AX值。
使XB为与B连接后的BX值。
将VSR[XA]的内容与VSR[XB]的内容“异或”,并且将求补后的结果放置入VSR[XT]。
改变的特殊寄存器
VSX逻辑NAND
xxlnand XT,XA,XB(0xF000_0590)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XA为与A连接后的AX值。
使XB为与B连接后的BX值。
将VSR[XA]的内容和VSR[XB]的内容“与”,并且将求补后的结果放置入VSR[XT]。
改变的特殊寄存器
与互补或的VSX逻辑
xxlorc XT,XA,XB(0xF000_0550)
在一个示例中,这个指令包括识别操作码的两个字段(例如,一个字段(位0-5)具有与另一字段(位21-28)的扩展操作码组合(例如,连接)的主要操作码),以识别指令;第一字段(例如,T字段;位6-10)和第一位(例如,TX字段;位31);第二字段(例如,A字段;位11-15)和第二位(例如,AX字段;位29);以及第三字段(例如,B字段;位16-20)和第三位(例如,BX字段;位30)。
使XT为与T连接后的TX值。
使XA为与A连接后的AX值。
使XB为与B连接后的BX值。
将VSR[XA]的内容和VSR[XB]的内容的补进行“或”,并且结果被放置入VSR[XT]。
改变的特殊寄存器

Claims (16)

1.一种用于执行机器指令的方法,包括:
由处理器获取用于执行的机器指令,所述机器指令被根据计算机架构定义用于计算机执行,所述机器指令包括:
至少一个包括操作码的操作码字段,识别格式转换指令;
至少一个用于指定第一寄存器的字段;以及
至少一个用于指定第二寄存器的其他字段,其中操作码明确指出来自第一次寄存器中信息的格式以及放置在第二寄存器中信息的格式;
由所述处理器执行所述机器指令,所述执行包括:
从所述第一寄存器获取第一格式的第一表示的单精度二进制浮点数据;
将所述第一格式的所述第一表示的单精度二进制浮点数据转换到第二格式的第二表示的转换后的单精度二进制浮点数据;以及
将所述转换后的单精度二进制浮点数据放置在所述第二寄存器中,其中,来自所述第一寄存器的单精度二进制浮点数据包括被标准定义的用于表示浮点数据的发信号通知非数值,并且其中所述通知非数值在所述第二寄存器中被保留为通知非数值。
2.如权利要求1所述的方法,其中,所述方法还包括:
确定所述第一格式的所述第一表示的单精度二进制浮点数据要被转换为所述第二格式的所述第二表示的单精度二进制浮点数据;以及
响应于所述确定,获取转换指令。
3.如权利要求2所述的方法,其中,由在所述处理器或者另一处理器上执行的编译器来执行所述确定。
4.如权利要求1所述的方法,其中,所述第一寄存器和所述第二寄存器中的至少一个是多可寻址寄存器文件的寄存器。
5.如权利要求4所述的方法,其中,所述多可寻址寄存器文件包括多个寄存器,并且其中,所述多个寄存器的第一子范围的寄存器被定义用于一个格式的数据,所述多个寄存器的第二子范围的寄存器被定义用于另一格式的数据,并且所述多个寄存器被定义用于至少一个附加格式的数据。
6.如权利要求5所述的方法,其中,所述多个寄存器中的每个被定义为包括64b标量单精度浮点数据和32b矢量单精度浮点数据。
7.如权利要求1所述的方法,其中,所述机器指令被插入在第一指令和第二指令之间,所述第二指令具有对所述第一指令的依赖性,并且所述第一指令产生具有与所述第二指令使用的格式不同的格式的数据。
8.如权利要求7所述的方法,其中,所述第一寄存器包括要转换的所述第一指令的数据。
9.如权利要求1所述的方法,其中,所述第一表示包括矢量表示并且所述第一格式是32位以及所述第二表示包括标量表示并且所述第二格式是64位,或者所述第一表示包括标量表示并且所述第一格式是64位以及所述第二表示包括矢量表示并且所述第二格式是32位。
10.如权利要求1所述的方法,其中,所述转换指令包括复制函数。
11.一种用于执行机器指令的计算机系统,所述计算机系统包括:
存储器;以及
与所述存储器通信的处理器,其中,所述计算机系统被配置为执行方法,所述方法包括:
由处理器获取用于执行的机器指令,所述机器指令被根据计算机架构定义用于计算机执行,所述机器指令包括:
至少一个包括操作码的操作码字段,识别格式转换指令;
至少一个用于指定第一寄存器的字段;以及
至少一个用于指定第二寄存器的其他字段,其中操作码明确指出来自第一次寄存器中信息的格式以及放置在第二寄存器中信息的格式;
由所述处理器执行所述机器指令,所述执行包括:
从所述第一寄存器获取第一格式的第一表示的单精度二进制浮点数据;
将所述第一格式的所述第一表示的单精度二进制浮点数据转换到第二格式的第二表示的转换后的单精度二进制浮点数据;以及
将所述转换后的单精度二进制浮点数据放置在所述第二寄存器中,其中,来自所述第一寄存器的单精度二进制浮点数据包括被标准定义的用于表示浮点数据的发信号通知非数值,并且其中所述通知非数值在所述第二寄存器中被保留为通知非数值。
12.如权利要求11所述的计算机系统,其中,所述方法还包括:
确定所述第一格式的所述第一表示的单精度二进制浮点数据要被转换为所述第二格式的所述第二表示的单精度二进制浮点数据;以及
响应于所述确定,获取转换指令。
13.如权利要求11所述的计算机系统,其中,所述第一寄存器和所述第二寄存器中的至少一个是多可寻址寄存器文件的寄存器,并且其中,所述多可寻址寄存器文件包括多个寄存器,并且其中,所述多个寄存器的第一子范围的寄存器被定义用于一个格式的数据,所述多个寄存器的第二子范围的寄存器被定义用于另一格式的数据,并且所述多个寄存器被定义用于至少一个附加格式的数据。
14.如权利要求13所述的计算机系统,其中,所述多个寄存器中的每个被定义为包括64b标量单精度浮点数据和32b矢量单精度浮点数据。
15.如权利要求11所述的计算机系统,其中,所述机器指令被插入在第一指令和第二指令之间,所述第二指令具有对所述第一指令的依赖性,并且所述第一指令产生具有与所述第二指令使用的格式不同的格式的数据。
16.如权利要求11所述的计算机系统,其中,所述第一表示包括矢量表示并且所述第一格式是32位以及所述第二表示是标量表示并且所述第二格式包括64位,或者所述第一表示包括标量表示并且所述第一格式是64位以及所述第二表示包括矢量表示并且所述第二格式是32位。
CN201280045033.7A 2011-09-16 2012-09-05 执行机器指令的方法和系统 Active CN103797459B (zh)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/234,520 2011-09-16
US13/234,520 US9411585B2 (en) 2011-09-16 2011-09-16 Multi-addressable register files and format conversions associated therewith
PCT/IB2012/054582 WO2013038302A1 (en) 2011-09-16 2012-09-05 Multi-addressable register files and format conversions associated therewith

Publications (2)

Publication Number Publication Date
CN103797459A CN103797459A (zh) 2014-05-14
CN103797459B true CN103797459B (zh) 2016-10-05

Family

ID=47881772

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201280045033.7A Active CN103797459B (zh) 2011-09-16 2012-09-05 执行机器指令的方法和系统

Country Status (6)

Country Link
US (2) US9411585B2 (zh)
JP (1) JP5963866B2 (zh)
CN (1) CN103797459B (zh)
DE (1) DE112012003864T5 (zh)
GB (1) GB2509037B (zh)
WO (1) WO2013038302A1 (zh)

Families Citing this family (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8281109B2 (en) * 2007-12-27 2012-10-02 Intel Corporation Compressed instruction format
US9298459B2 (en) 2012-07-18 2016-03-29 International Business Machines Corporation Managing register pairing
US9323529B2 (en) * 2012-07-18 2016-04-26 International Business Machines Corporation Reducing register read ports for register pairs
US9323532B2 (en) * 2012-07-18 2016-04-26 International Business Machines Corporation Predicting register pairs
US9729167B2 (en) * 2013-10-01 2017-08-08 Oracle International Corporation System and method for conversion of numeric values between different number base formats, for use with software applications
US10061581B2 (en) 2014-01-31 2018-08-28 Qualcomm Incorporated On-the-fly conversion during load/store operations in a vector processor
US9529653B2 (en) * 2014-10-09 2016-12-27 International Business Machines Corporation Processor register error correction management
US10235219B2 (en) * 2015-07-27 2019-03-19 Sony Interactive Entertainment America Llc Backward compatibility by algorithm matching, disabling features, or throttling performance
CN107315715B (zh) * 2016-04-26 2020-11-03 中科寒武纪科技股份有限公司 一种用于执行矩阵加/减运算的装置和方法
GB2553783B (en) * 2016-09-13 2020-11-04 Advanced Risc Mach Ltd Vector multiply-add instruction
US10459843B2 (en) * 2016-12-30 2019-10-29 Texas Instruments Incorporated Streaming engine with separately selectable element and group duplication
US11093822B2 (en) * 2017-04-28 2021-08-17 Intel Corporation Variable precision and mix type representation of multiple layers in a network
US10282206B1 (en) * 2017-05-16 2019-05-07 Cadence Design Systems, Inc. Alias register file for supporting mixed width datapath in a configurable processor
US10338925B2 (en) 2017-05-24 2019-07-02 Microsoft Technology Licensing, Llc Tensor register files
US10372456B2 (en) 2017-05-24 2019-08-06 Microsoft Technology Licensing, Llc Tensor processor instruction set architecture
US10725739B2 (en) 2017-06-23 2020-07-28 International Business Machines Corporation Compiler controls for program language constructs
US10514913B2 (en) * 2017-06-23 2019-12-24 International Business Machines Corporation Compiler controls for program regions
CN111275197B (zh) * 2018-12-05 2023-11-10 上海寒武纪信息科技有限公司 运算方法、装置、计算机设备和存储介质
US11372643B2 (en) * 2018-11-09 2022-06-28 Intel Corporation Systems and methods for performing instructions to convert to 16-bit floating-point format
CN112181494B (zh) * 2020-09-28 2022-07-19 中国人民解放军国防科技大学 一种浮点物理寄存器文件的实现方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5341506A (en) * 1984-12-10 1994-08-23 Nec Corporation Data flow processor with a full-to-half word convertor
US5515520A (en) * 1990-07-26 1996-05-07 Fujitsu Limited Data processing system for single-precision and double-precision data

Family Cites Families (69)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4595911A (en) 1983-07-14 1986-06-17 Sperry Corporation Programmable data reformat system
US4758585A (en) 1985-08-16 1988-07-19 Warner-Lambert Company Saturated cycloalkyl (B) pyrrol-1 (2H)- acetic acid amides and derivatives thereof
US4748585A (en) 1985-12-26 1988-05-31 Chiarulli Donald M Processor utilizing reconfigurable process segments to accomodate data word length
JPS62249230A (ja) 1986-04-23 1987-10-30 Pfu Ltd 演算処理装置
US5278840A (en) 1987-07-01 1994-01-11 Digital Equipment Corporation Apparatus and method for data induced condition signalling
US5063497A (en) 1987-07-01 1991-11-05 Digital Equipment Corporation Apparatus and method for recovering from missing page faults in vector data processing operations
WO1991011765A1 (en) 1990-01-29 1991-08-08 Teraplex, Inc. Architecture for minimal instruction set computing system
DE69132495T2 (de) 1990-03-16 2001-06-13 Texas Instruments Inc Verteilter Verarbeitungsspeicher
JP2616182B2 (ja) 1990-08-29 1997-06-04 三菱電機株式会社 データ処理装置
US5493687A (en) 1991-07-08 1996-02-20 Seiko Epson Corporation RISC microprocessor architecture implementing multiple typed register sets
US5437043A (en) 1991-11-20 1995-07-25 Hitachi, Ltd. Information processing apparatus having a register file used interchangeably both as scalar registers of register windows and as vector registers
US5278945A (en) 1992-01-10 1994-01-11 American Neuralogical, Inc. Neural processor apparatus
US5423051A (en) 1992-09-24 1995-06-06 International Business Machines Corporation Execution unit with an integrated vector operation capability
US5341320A (en) 1993-03-01 1994-08-23 Motorola, Inc. Method for rapidly processing floating-point operations which involve exceptions
US5450607A (en) 1993-05-17 1995-09-12 Mips Technologies Inc. Unified floating point and integer datapath for a RISC processor
US5669013A (en) 1993-10-05 1997-09-16 Fujitsu Limited System for transferring M elements X times and transferring N elements one time for an array that is X*M+N long responsive to vector type instructions
US5487022A (en) 1994-03-08 1996-01-23 Texas Instruments Incorporated Normalization method for floating point numbers
EP0681236B1 (en) 1994-05-05 2000-11-22 Conexant Systems, Inc. Space vector data path
US5685009A (en) 1994-07-20 1997-11-04 Exponential Technology, Inc. Shared floating-point registers and register port-pairing in a dual-architecture CPU
US5758176A (en) 1994-09-28 1998-05-26 International Business Machines Corporation Method and system for providing a single-instruction, multiple-data execution unit for performing single-instruction, multiple-data operations within a superscalar data processing system
US5537606A (en) 1995-01-31 1996-07-16 International Business Machines Corporation Scalar pipeline replication for parallel vector element processing
US5805475A (en) 1995-02-10 1998-09-08 International Business Machines Corporation Load-store unit and method of loading and storing single-precision floating-point registers in a double-precision architecture
US5668984A (en) 1995-02-27 1997-09-16 International Business Machines Corporation Variable stage load path and method of operation
US5761103A (en) 1995-03-08 1998-06-02 Texas Instruments Incorporated Left and right justification of single precision mantissa in a double precision rounding unit
US5825678A (en) 1995-03-31 1998-10-20 International Business Machines Corporation Method and apparatus for determining floating point data class
US5822778A (en) 1995-06-07 1998-10-13 Advanced Micro Devices, Inc. Microprocessor and method of using a segment override prefix instruction field to expand the register file
US6295599B1 (en) 1995-08-16 2001-09-25 Microunity Systems Engineering System and method for providing a wide operand architecture
US5623600A (en) 1995-09-26 1997-04-22 Trend Micro, Incorporated Virus detection and removal apparatus for computer networks
US5768169A (en) 1995-10-02 1998-06-16 Intel Corporation Method and apparatus for improved processing of numeric applications in the presence of subnormal numbers in a computer system
US5701508A (en) 1995-12-19 1997-12-23 Intel Corporation Executing different instructions that cause different data type operations to be performed on single logical register file
US6792523B1 (en) 1995-12-19 2004-09-14 Intel Corporation Processor with instructions that operate on different data types stored in the same single logical register file
US6058465A (en) 1996-08-19 2000-05-02 Nguyen; Le Trong Single-instruction-multiple-data processing in a multimedia signal processor
US6195746B1 (en) 1997-01-31 2001-02-27 International Business Machines Corporation Dynamically typed register architecture
US6009511A (en) 1997-06-11 1999-12-28 Advanced Micro Devices, Inc. Apparatus and method for tagging floating point operands and results for rapid detection of special floating point numbers
DE69820067D1 (de) 1997-07-31 2004-01-08 Corning Oti Srl Akusto-optische vorrichtungen mit akustischem absorber
US5978901A (en) 1997-08-21 1999-11-02 Advanced Micro Devices, Inc. Floating point and multimedia unit with data type reclassification capability
US6131104A (en) 1998-03-27 2000-10-10 Advanced Micro Devices, Inc. Floating point addition pipeline configured to perform floating point-to-integer and integer-to-floating point conversion operations
US6178482B1 (en) 1997-11-03 2001-01-23 Brecis Communications Virtual register sets
US6237083B1 (en) 1998-02-13 2001-05-22 Advanced Micro Devices, Inc. Microprocessor including multiple register files mapped to the same logical storage and inhibiting sychronization between the register files responsive to inclusion of an instruction in an instruction sequence
US6105129A (en) 1998-02-18 2000-08-15 Advanced Micro Devices, Inc. Converting register data from a first format type to a second format type if a second type instruction consumes data produced by a first type instruction
JP3901670B2 (ja) 1998-03-11 2007-04-04 松下電器産業株式会社 データ処理装置
EP0942357A3 (en) 1998-03-11 2000-03-22 Matsushita Electric Industrial Co., Ltd. Data processor compatible with a plurality of instruction formats
US6192467B1 (en) 1998-03-31 2001-02-20 Intel Corporation Executing partial-width packed data instructions
US6185671B1 (en) 1998-03-31 2001-02-06 Intel Corporation Checking data type of operands specified by an instruction using attributes in a tagged array architecture
US6263426B1 (en) * 1998-04-30 2001-07-17 Intel Corporation Conversion from packed floating point data to packed 8-bit integer data in different architectural registers
US5995122A (en) 1998-04-30 1999-11-30 Intel Corporation Method and apparatus for parallel conversion of color values from a single precision floating point format to an integer format
US6282554B1 (en) 1998-04-30 2001-08-28 Intel Corporation Method and apparatus for floating point operations and format conversion operations
US6292815B1 (en) 1998-04-30 2001-09-18 Intel Corporation Data conversion between floating point packed format and integer scalar format
US6282634B1 (en) 1998-05-27 2001-08-28 Arm Limited Apparatus and method for processing data having a mixed vector/scalar register file
JP3123047B2 (ja) 1998-10-02 2001-01-09 日本電気株式会社 マイクロプロセッサ
US6163764A (en) * 1998-10-12 2000-12-19 Intel Corporation Emulation of an instruction set on an instruction set architecture transition
US6321327B1 (en) 1998-12-30 2001-11-20 Intel Corporation Method for setting a bit associated with each component of packed floating-pint operand that is normalized in SIMD operations
US6857061B1 (en) 2000-04-07 2005-02-15 Nintendo Co., Ltd. Method and apparatus for obtaining a scalar value directly from a vector register
US6715061B1 (en) 2000-07-12 2004-03-30 Via Technologies, Inc. Multimedia-instruction acceleration device for increasing efficiency and method for the same
JP3779540B2 (ja) 2000-11-08 2006-05-31 株式会社ルネサステクノロジ 複数レジスタ指定が可能なsimd演算方式
US6839828B2 (en) 2001-08-14 2005-01-04 International Business Machines Corporation SIMD datapath coupled to scalar/vector/address/conditional data register file with selective subpath scalar processing mode
US6934830B2 (en) 2002-09-26 2005-08-23 Sun Microsystems, Inc. Method and apparatus for reducing register file access times in pipelined processors
US7430656B2 (en) 2002-12-31 2008-09-30 Intel Corporation System and method of converting data formats and communicating between execution units
US20040158741A1 (en) 2003-02-07 2004-08-12 Peter Schneider System and method for remote virus scanning in wireless networks
GB2409063B (en) 2003-12-09 2006-07-12 Advanced Risc Mach Ltd Vector by scalar operations
US7284092B2 (en) 2004-06-24 2007-10-16 International Business Machines Corporation Digital data processing apparatus having multi-level register file
US7257695B2 (en) 2004-12-28 2007-08-14 Intel Corporation Register file regions for a processing system
US8904151B2 (en) * 2006-05-02 2014-12-02 International Business Machines Corporation Method and apparatus for the dynamic identification and merging of instructions for execution on a wide datapath
KR101386470B1 (ko) * 2007-07-16 2014-04-18 엘지전자 주식회사 세탁기
US7877582B2 (en) 2008-01-31 2011-01-25 International Business Machines Corporation Multi-addressable register file
US7849294B2 (en) * 2008-01-31 2010-12-07 International Business Machines Corporation Sharing data in internal and memory representations with dynamic data-driven conversion
US8291496B2 (en) 2008-05-12 2012-10-16 Enpulz, L.L.C. Server based malware screening
US8346828B2 (en) 2008-10-14 2013-01-01 International Business Machines Corporation System and method for storing numbers in first and second formats in a register file
US8458684B2 (en) 2009-08-19 2013-06-04 International Business Machines Corporation Insertion of operation-and-indicate instructions for optimized SIMD code

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5341506A (en) * 1984-12-10 1994-08-23 Nec Corporation Data flow processor with a full-to-half word convertor
US5515520A (en) * 1990-07-26 1996-05-07 Fujitsu Limited Data processing system for single-precision and double-precision data

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
IBM.Power ISA&#8482;Version 2.06 Revision B.《http://www.power.org/resources/reading/》.2010,说明书第15页第1.6.4 D-FORM,第124页Load Floating-Point Single with Update D-form. *

Also Published As

Publication number Publication date
US9395981B2 (en) 2016-07-19
US9411585B2 (en) 2016-08-09
JP2014533390A (ja) 2014-12-11
GB201406331D0 (en) 2014-05-21
GB2509037A (en) 2014-06-18
US20130073838A1 (en) 2013-03-21
GB2509037B (en) 2016-03-23
US20130103932A1 (en) 2013-04-25
JP5963866B2 (ja) 2016-08-03
CN103797459A (zh) 2014-05-14
DE112012003864T5 (de) 2014-07-10
WO2013038302A1 (en) 2013-03-21

Similar Documents

Publication Publication Date Title
CN103797459B (zh) 执行机器指令的方法和系统
CN104011662B (zh) 用于提供向量混合和置换功能的指令和逻辑
CN104011647B (zh) 浮点舍入处理器、方法、系统和指令
CN104145245B (zh) 浮点舍入量确定处理器、方法、系统和指令
CN104126168B (zh) 打包数据重新安排控制索引前体生成处理器、方法、系统及指令
US7877582B2 (en) Multi-addressable register file
CN104011657B (zh) 用于向量计算和累计的装置和方法
CN110321525A (zh) 用于稀疏-密集矩阵乘法的加速器
CN104040484B (zh) 浮点缩放处理器、方法、系统和指令
TWI659356B (zh) 用以提供向量水平式多數決投票功能之指令與邏輯(二)
CN109614076A (zh) 浮点到定点转换
CN109716290B (zh) 用于经融合的乘加的系统、装置和方法
CN104011645B (zh) 用于产生其中在连续位置中的整数相差恒定整数跨度且最小整数从零偏移整数偏移量的整数序列的处理器、方法、系统和含有指令的介质
CN109840112A (zh) 用于复数乘法和累加的装置和方法
JP2002517037A (ja) 混合ベクトル/スカラレジスタファイル
WO2013038307A1 (en) Fine-grained instruction enablement at sub-function granularity
CN107003846A (zh) 用于向量索引加载和存储的方法和装置
CN107003852A (zh) 用于执行向量位混洗的方法和装置
CN107003845A (zh) 用于在掩码寄存器和向量寄存器之间可变地扩展的方法和装置
JP2018506094A (ja) 多倍長整数(big integer)の算術演算を実行するための方法および装置
CN110058886A (zh) 用于计算两个区块操作数中的半字节的数量积的系统和方法
CN107003847A (zh) 用于将掩码扩展为掩码值向量的方法和装置
CN107003840A (zh) 用于执行检查以优化指令流的装置和方法
CN108268279A (zh) 用于广播算术操作的系统、装置和方法
TW201810020A (zh) 用於累乘的系統、設備及方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant