CN102103486A - 用于将三个源操作数相加的加法指令 - Google Patents
用于将三个源操作数相加的加法指令 Download PDFInfo
- Publication number
- CN102103486A CN102103486A CN2010106180372A CN201010618037A CN102103486A CN 102103486 A CN102103486 A CN 102103486A CN 2010106180372 A CN2010106180372 A CN 2010106180372A CN 201010618037 A CN201010618037 A CN 201010618037A CN 102103486 A CN102103486 A CN 102103486A
- Authority
- CN
- China
- Prior art keywords
- sign
- source operand
- summation
- instruction
- stored
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30007—Arrangements for executing specific machine instructions to perform operations on data operands
- G06F9/3001—Arithmetic instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30094—Condition code generation, e.g. Carry, Zero flag
Abstract
一个方面中的方法可包括接收加法指令。加法指令可指示第一源操作数、第二源操作数和第三源操作数。可存储第一、第二和第三源操作数的总和作为该加法指令的结果。该总和可部分地存储在由加法指令指示的目标操作数中以及部分地存储在多个标志中。还公开了其他方法,和装置、系统以及机器可读介质上的指令。
Description
技术领域
各种不同实施例涉及加法指令、执行这些指令的方法、用于执行这些指令的执行单元、或纳入此类执行单元的设备。具体而言,各种不同实施例涉及用于执行带进位的三路加法的加法指令、执行这些指令的方法、用于执行这些指令的执行单元、或纳入此类执行单元的设备。
背景技术
指令集架构(ISA)中通常包括加法指令。加法指令允许设备将数据相加或求和。
已知加法指令包括加法指令ADD以及带进位加法指令ADC,这两者皆在Intel64 and IA-32 Architectures Software Developer’s Manual Volume 2A:Instruction Set Reference,A-M,Order Number:253666-032US,September 2009(Intel64和IA-32架构软件开发者手册第2A卷:指令集参考,A-M,序号:253666-032US,2009年9月)以及各种旧手册中描述。
ADD和ADC指令各自仅能将两个操作数相加。在某些情形中,这可能具有缺点。
由于快速和高效处理数据的重要性,新的和不同的加法指令将是有用的。
附图简述
通过参考用来说明本发明的实施例的以下描述和附图,可最好地理解本发明。在附图中:
图1是处理加法指令的一实施例的方法的实施例的流程框图。
图2是指令处理装置的示例实施例的框图。
图3是示出可用于存储加法指令的实施例的总和的寄存器和多个标志的组合的实施例的框图。
图4示出适用于各个实施例的各种无符号整数数值数据类型。
图5是对带标志加法指令的实施例作出响应的执行单元的实施例的框图。
图6示出表示具有多个标志的标志寄存器的示例实施例的EFLAGS寄存器。
图7示出合适的32位通用寄存器集的示例实施例。
图8示出合适的64位通用寄存器集的示例实施例。
图9示出表示加法指令的特定示例实施例的ADD3指令的描述。
图10示出表示加法指令的特定示例实施例的ADD3指令的伪代码中的操作。
图11示出表示带标志加法指令的特定示例实施例的ADOC3指令的描述。
图12示出表示带标志加法指令的特定示例实施例的ADOC3指令的伪代码中的操作。
图13示出256位无符号整数的实施例,其被存储为各自存储在四个相应寄存器之一中的4个四字无符号整数。
图14示出256位四字无符号整数乘以64位无符号整数的乘法,以及用ADD/ADC指令进行相关联部分积的求和。
图15示出256位四字无符号整数乘以64位无符号整数的乘法,以及用根据一个或多个实施例的ADD3/ADOC3指令进行相关联部分积的求和。
图16是具有与整数乘法指令的隐式目标操作数相同的隐式源操作数的加法指令的实施例的框图。
图17是合适的计算机系统的第一示例实施例的框图。
图18是合适的计算机系统的第二示例实施例的框图。
详细描述
在以下描述中,阐述了众多具体细节,诸如指令实现细节、数据类型、寄存器类型、寄存器安排、处理器类型、系统配置等。然而应理解,本发明的实施例在没有这些具体细节的情况下也可实践。在其他实例中,公知的电路、结构和技术未被详细示出以免混淆对本描述的理解。
各实施例涉及能够将三个操作数相加在一起的新且有用的加法指令。其他实施例涉及用于执行这些加法指令的执行单元。再其他实施例涉及具有此类执行单元或能够执行此类指令的通用处理器、专用处理器、控制器、或其他逻辑器件或指令处理装置。进一步的实施例涉及存储在盘、存储器、或其他有形机器可读介质上的加法指令。
图1是处理加法指令的实施例的方法100的实施例的流程框图。在各种实施例中,该方法可由通用处理器、专用处理器(例如,图形处理器或数字信号处理器)、硬件加速器(例如,加密加速器)、或其他类型的逻辑器件或指令处理装置来执行。
在框102,可在处理器或其他指令处理装置上接收加法指令。加法指令可指示第一源操作数、第二源操作数和第三源操作数。
随后,在框104,作为加法指令的结果,可存储第一、第二和第三源操作数的总和。在一个或多个实施例中,该总和可部分地存储在由加法指令指示的目标操作数中以及部分地存储在多个标志中。在一个或多个实施例中,所存储的总和可包括该第一、第二和第三源操作数的总和加上这些标志的算术组合。
图2是指令处理装置210的示例实施例的框图。在一个或多个实施例中,指令处理装置可以是通用处理器。该处理器可以是各种复杂指令集计算(CISC)处理器、各种精简指令集计算(RISC)处理器、各种超长指令字(VLIW)处理器、其各种混合、或完全其他类型的处理器中的任何处理器。在一个或多个实施例中,处理器可以是由美国加利福尼亚州圣克拉拉市的英特尔(Intel)公司制造的类型的通用处理器,但这不是必须的。可从英特尔公司购得的通用处理器的具体示例包括,但不限于,IntelCoreTM i7(英特尔酷睿)处理器终极版、IntelCoreTM i7处理器、IntelCoreTM i5处理器、IntelCoreTM2终极处理器、IntelCoreTM2Quad(英特尔酷睿四核)处理器、IntelCoreTM2Duo(英特尔酷睿双核)处理器、IntelPentium((英特尔奔腾)处理器、以及IntelCeleron(英特尔赛扬)处理器。
替换地,指令处理装置可以是专用处理器。合适的专用处理器的代表性示例包括,但不限于,网络处理器、通信处理器、加密处理器、图形处理器、协作处理器、嵌入式处理器、以及数字信号处理器(DSP),这里仅列举了少数示例。这些处理器也可基于CISC、RISC、VLIW、其混合、或完全其他类型的处理器。
在其他实施例中,指令处理装置可以是控制器(例如,微控制器),或能够处理指令的其他类型的逻辑电路。
再次参照图2,在使用期间,指令处理装置可接收加法指令212的实施例。作为示例,加法指令可从存储器或从软件接收。在一个或多个实施例中,加法指令可指示第一源操作数、第二源操作数和第三源操作数。加法指令可指示这三个源操作数将被求和且总和存储在由该加法指令指示的目标操作数中。加法指令可隐式地指示和/或显式地指定源和目标操作数。例如,加法指令可具有用于显式地指定与一个或多个操作数相对应的寄存器、存储器、或其他存储位置的一个或多个专用字段或比特集。
加法指令可代表由指令处理装置识别的机器指令或控制信号。指令处理装置可具有可用于响应于加法指令和/或如由加法指令指定地对三个源操作数执行加法运算并响应于加法指令或作为加法指令的结果将总和存储在目标地中的具体或特定电路或其他逻辑(例如,软件结合硬件和/或固件)。
指令处理装置的所示实施例包括指令解码器214。解码器可接收和解码加法指令212。解码器可生成并输出反映原始加法指令或从原始加法指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号。解码器可使用各种不同机制来实现。合适机制的示例包括,但不限于,微代码只读存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)等。
解码器不是该装置的必要组件。在一个或多个其他实施例中,该装置可替换地具有指令仿真器、指令转译器、指令变形器、指令解读器、或其他指令转换逻辑。各种不同类型的指令仿真器、指令变形器、指令转译器等是本领域公知的。指令转换逻辑可接收加法指令,仿真、转译、变形、解读或以其他方式转换加法指令,以及输出与原始加法指令相对应的一个或多个指令或控制信号。指令转换逻辑可以在软件、硬件、固件、或其组合中实现。在一些情形中,指令转换逻辑的部分或全部可位于指令处理装置的其余部分的片外,诸如为单独的管芯或在系统存储器中。在一些情形中,指令处理装置可具有解码器和指令转换逻辑两者。
再次参照图2,指令处理装置包括执行单元216。作为示例,执行单元可包括算术单元、算术逻辑单元等。执行单元包括能够执行加法——诸如例如有符号和无符号整数加法——的加法单元218。
在所示实施例中,执行单元与解码器的输出耦合或以其他方式通信。术语“耦合”可意味着两个或多个元件直接电气接触或连接。然而,术语“耦合”也可意味着两个或更多的元件彼此并不直接接触,但是仍然彼此协作或交互(例如,通过居间组件)。作为一个示例,解码器和执行单元可通过居间任选缓冲器和/或通过本领域已知能够耦合在解码器和执行单元之间的一个或多个其他组件彼此耦合。作为解码器解码加法指令的结果,执行单元可接收反映加法指令或从加法指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号。替换地,执行单元可接收和执行来自前述指令转换逻辑的指令或控制信号。
作为加法指令的结果,解码器或该装置的另一部分可访问由该加法指令指示的三个源操作数。源操作数可存储在寄存器、存储器、或其他存储位置。在所示实施例中,第一源操作数(SRC1)、第二源操作数(SRC2)和第三源操作数(SRC3)皆存储在寄存器集220的寄存器中,但不要求如此。
寄存器集220连同潜在可能的其他寄存器(例如,控制寄存器、状态寄存器、标志寄存器等)可以是寄存器文件的一部分。每个寄存器可以为可用于存储数据的存储位置或设备。各种不同类型的寄存器是合适的,只要它们能够如本文中所描述地存储并提供数据。寄存器可以或可以被重命名。合适寄存器的示例包括,但不限于,专用物理寄存器、使用寄存器重命名的动态分配物理寄存器、专用和动态分配物理寄存器的组合等。寄存器集常常可物理地与执行单元位于相同管芯上。寄存器可从处理器外部或从程序员的观点可见。例如,指令可指定存储在寄存器中的操作数。
执行单元可包括能够执行加法指令(例如,从加法指令导出的一个或多个指令或其他控制信号)的电路或其他执行逻辑(例如,软件和/或硬件和/或固件的各种组合)。在一个或多个实施例中,作为指示第一源操作数(SRC1)、第二源操作数(SRC2)和第三源操作数(SRC3)的加法指令212的结果,执行单元可用于将该第一、第二和第三源操作数的总和作为该加法指令的结果部分地存储在由该加法指令指示的目标操作数(DEST)中。如图所示,目标操作数(DEST)可以是寄存器。替换地,目标操作数可以是存储器中的位置或另一存储位置。在该说明中,目标操作数对应于与用于源操作数的寄存器分开的寄存器。替换地,用于源操作数的寄存器也可用于目标操作数,例如目标操作数可覆写源操作数。
在一个或多个实施例中,除了部分地存储在目标操作数(DEST)中,该总和还可被部分地存储在多个标志中,诸如第一标志222和第二标志224。如图所示,这些标志可存储在寄存器226中,诸如举例而言状态寄存器、标志寄存器、或条件代码寄存器,但这不是必须的。
处理器和各种其他类型的逻辑器件往往具有标志。例如,标志可各自包括一个或多个比特,且每个比特可具有二进制值1或0。标志的这些不同值可能具有处理器或其他逻辑器件所指派或理解的涵意。这些标志用于各种不同目标。在一些情形中,标志用于记录操作的情形、状态、条件或结果。
在一个或多个实施例中,第一标志222可以是进位标志,且进位标志222可用于存储总和的一部分。进位标志是处理器和其他逻辑器件中常见的公知类型的架构标志或状态标志。进位标志可用于指示算术运算中是否有溢出。例如,进位标志可以是单个比特,若在先前运算期间有溢出——诸如算术运算的结果的最高有效位的进位或借位——则该比特可具有第一值(例如,二进制值1),否则若没有此类溢出则进位标志可具有第二值(例如,二进制值0)。进位标志可用于指示算术运算已生成大于给定寄存器或存储位置中的比特数能表示的数量的结果。进位标志可用在诸如加法和减法等算术运算中。
为了进一步说明可如何在加法中使用进位标志,考虑其中使用8位无符号整数将数字255和255加在一起的示例。值255加255等于510。数字510以二进制表示为“111111110”。然而,注意“111111110”有9位而非只有8位。换言之,以二进制表示数字510需要9位而非仅仅8位。8个最低有效位“11111110”是数字254的二进制表示。由于255加255的总和产生第八个最高有效位“进位”到第九位,因此进位标志可被设为值1。将进位标志设为值1可向机器指示8位无符号解释的结果是不正确的,和/或可指示正确结果是1位进位标志与该8位结果的9位级联。进位标志可用于诸如加法或/和减法等后续算术运算(例如,作为进位)。
在一个或多个实施例中,第一标志222可以是进位标志,且第二标志224可以是架构标志,其可用于粗略地类似使用进位标志222的方式。架构标志224可用于指示算术运算中是否有溢出。例如,架构标志224可以是单个比特,若先前运算期间进位标志222有溢出则该比特可具有第一值(例如,二进制值1),否则若进位标志222没有此类溢出则架构标志224可具有第二值(例如,二进制值0)。架构标志224可用于指示算术运算已生成大于给定寄存器或存储位置中的比特数加上第一标志(例如,进位标志)能表示的数量的结果。第一标志(例如,进位标志)222和第二或附加架构标志224各自可提供可用于存储加法指令的总和的至少一个附加比特。
在一个或多个实施例中,第二或附加架构标志224可以是溢出标志。溢出标志是处理器和其他逻辑器件中常见的另一公知类型的架构或状态标志。然而,溢出标志按照惯例不以上文描述的使用第二或附加架构标志224的方式使用。在ADD和ADC指令的情形中,溢出标志目前被定义成检测有符号整数的溢出。然而,溢出标志按照惯例不结合另一标志用来存储总和的一部分。另外,溢出标志按照惯例不结合另一标志用来提供多个进位。另外,溢出标志按照惯例不用作无符号操作数的宽度的扩展。
因此,如上所述地使用溢出标志是对进位标志的用途变更。替换地,在一个或多个其他实施例中,可变更另一现有架构标志的用途。在现有架构中,现有架构标志的这种用途变更与引入全新的或专用标志相比趋向于呈现对整个架构和文件的较少改变。替换地,在一个或多个实施例中,可针对用于本文所述用途的第一和/或第二标志引入一个或多个新的或专用标志。
为了避免混淆本描述,已示出和描述了相对简单的指令处理装置。将领会,其他实施例可具有多个执行单元。例如,该装置可包括多个不同类型的执行单元,例如算术单元、算术逻辑单元(ALU)、整数单元等。这些单元中的至少一个可对如本文中公开的加法指令的实施例作出响应。其他实施例可具有多个核、逻辑处理器、或执行引擎。可用于执行如本文中所公开的加法指令的执行单元可被包括在至少一个、至少两个、大多数、或所有核、逻辑处理器或执行引擎中。
指令处理装置还可任选地包括一个或多个其他公知组件。例如,其他实施例可任选地包括指令读取逻辑、预解码逻辑、调度逻辑、重排序缓冲器、分支预测逻辑、引退逻辑、寄存器重命名逻辑等、或其某种组合。这些组件可按照惯例实现,或作少量修改,这基于本公开对于本领域技术人员将是明显的。对这些组件的进一步描述对于理解本文中的实施例不是必要的,尽管进一步的描述已经可在公众文献中获得(若需要)。本领域中已知这些组件的表面上众多不同的组合和配置。本发明的范围不限于任何已知的此类组合或配置。各实施例可实现成有或没有此类附加组件。
图3是示出可用于存储加法指令的实施例的总和的寄存器330和多个标志322、324的组合的实施例的框图。寄存器具有比特[N:0]。寄存器可用于存储总和的一部分。总和的几个代表性比特被示为存储在寄存器中。
第一标志322具有一个附加比特[N+1]。同样,第二标志324具有一个附加比特[N+2]。这些标志的这两个比特提供用于存储总和的另一部分的两个附加比特。标志[N+2:N+1]的这两个比特可被机器解释或理解为与寄存器的比特[N:0]的级联,从而提供完整总和。比特[N+2]用于存储总和的最高有效位(MSB)。比特[N+1]用于存储总和的次最高有效位(MSB)。
作为一个具体示例,寄存器可具有用于存储部分总和的比特[31:0],第一标志322可具有附加比特[32]以及第二标志324也可具有附加比特[33],它们一起用于存储部分总和。作为另一具体示例,寄存器可具有用于存储部分总和的比特[63:0],以及第一和第二标志可具有用于存储部分总和的两个附加比特[65:64]。
有利地,由第一和第二标志提供的这些附加比特可允许存储更大的总和。在加三个数字时,在一些情形中可能需要额外的进位比特。在加三个源操作数时,取决于这些操作数的值,可使用和/或需要这些附加比特来存储所得总和。考虑64位寄存器中的操作数的示例。由于3个寄存器的最大无符号值可以是(264-1),若OF∶CF=1∶1,则所得中间总和最多可为3*264。该值小于(266-1)。因此,除了由寄存器提供的64比特,由标志提供的两个附加比特足以表示存储在三个相应64位寄存器中的任何三个值的总和的最高有效位。将三个源操作数求和的加法指令生成的最大值将不导致溢出。类似地,除了32位寄存器,由标志提供的两个附加比特足以表示存储在三个相应32位寄存器中的任何三个值的总和的最高有效位。
在一个或多个实施例中,加法指令可加整数。在一个或多个实施例中,整数可以是无符号整数。替换地,在一个或多个实施例中,整数可以是有符号整数。为了说明某些概念,本公开将趋向于强调无符号整数的乘法,但本发明的范围不限于此。
图4示出适用于各个实施例的各种无符号整数数值数据类型。第一类型是“字无符号整数”。字无符号整数具有16位。第二类型是双字无符号整数。双字无符号整数具有32位。第三类型是四字无符号整数。四字无符号整数具有64位。这些仅仅是少数说明性示例。无符号整数的其他大小也是适用的,诸如字节或宽于64位字节(例如,128位字节)。而且,类似有符号整数类型也是适用的。
根据一个或多个实施例的加法指令可以是带标志加法指令,其可用于使执行单元和/或处理器(或其他指令处理装置)生成部分地基于多个标志计算出的总和。在一个或多个实施例中,部分地基于多个标志计算出的总和可包括三个源操作数的总和加上这多个标志的算术组合。
图5是对带标志加法指令513的实施例作出响应的执行单元516的实施例的框图。带标志加法指令指示第一源操作数(SRC1)、第二源操作数(SRC2)、第三源操作数(SRC3)、作为源操作数的第一标志(F1)和作为源操作数的第二标志(F2)。该指令可将第一和第二标志指示为隐式或理解的源操作数。
响应于带标志加法指令,执行单元可接收SRC1、SRC2、SRC3、F1和F2。在一个或多个实施例中,作为带标志加法指令的结果,执行单元可用于将至少部分地基于标志F1和F2计算出的SRC1、SRC2和SRC3的总和存储在由该带标志加法指令指示的目标操作数(DEST)中。如图所示,在一个或多个实施例中,总和可被计算为:
DEST=SRC1+SRC2+SCR3+F1+2*F2
在该总和中,表达式“F1+2*F2”表示标志F1与F2的算术组合。第二标志(F2)具有乘数2。
图6示出表示具有多个标志的标志寄存器的示例实施例的EFLAGS寄存器626。该EFLAGS寄存器为32位寄存器,其包括一群状态标志、一控制标志、以及一群系统标志。
状态标志包括进位标志(CF,比特0)、奇偶校验标志(PF,比特2)、辅助进位标志(AF,比特4)、零标志(ZF,比特6)、符号标志(SF,比特7),以及溢出标志(OF,比特11)。如前所述,在一个或多个实施例中,进位标志(CF,比特0)和溢出标志(OF,比特11)可用作与本文中公开的加法指令相关联的第一和第二标志222、224。出于此原因强调了CF和OF,但不要求使用这些特定标志。
系统标志包括陷阱标志(TF,比特8)、中断启用标志(IF,比特9)、I/O特权级(IOPL,比特12-13)、嵌套任务(NT,比特14)、恢复标志(RF,比特16)、虚拟8086模式(VM,比特17)、对准检查(AC,比特18)、虚拟中断标志(VIF,比特19)、虚拟中断待决(VIP,比特20)、以及ID标志(ID,比特21)。控制标志包括方向标志(DF,比特10)。EFLAGS的比特22-31保留。
该EFLAGS寄存器是早先的16位FLAGS寄存器的继承者。此外,在64位模式处理器中,EFLAGS寄存器已被RFLAGS寄存器继承且被扩展到64比特。RFLAGS较低的32位与EFLAGS寄存器相同。
EFLAGS寄存器是具有用于实现一个或多个实施例的合适标志的寄存器的一个特定示例实施例,但该特定寄存器和这些特定标志并非是必需的。EFLAGS/RFLAGS寄存器以及进位标志(若需要)的附加描述参见Intel64 andIA-32 Architectures Software Developer’s Manual,Volume 1:Basic Architecture,Order Number:253665-032US,September 2009(Intel64和IA-32架构软件开发者手册第1卷:基本架构,序号:253665-032US,2009年9月)。
在一个或多个实施例中,加法指令可指示通用寄存器集中的一个或多个源操作数和/或一个或多个目标操作数。在一个或多个实施例中,这些通用寄存器可用于存储整数。
图7示出合适的32位通用寄存器集740的示例实施例。32位寄存器集包括8个32位或双字通用寄存器。这些寄存器被称为EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP。这些32位寄存器也可以16位和8位模式来寻址。EAX、EBX、ECX和EDX寄存器较低的16位分别被称为AX、BX、CX和DX。作为示例,具有16位的字无符号整数可分别被存储在寄存器BX、CX和DX中。具有32位的双字无符号整数可被存储在寄存器EAX、EBX、ECX、EDX、ESI、EDI、EBP、ESP、R8D-R15D中。
图8示出合适的64位通用寄存器集850的示例实施例。64位寄存器集包括16个64位或四字通用寄存器。这些寄存器被称为RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8、R9、R10、R11、R12、R13、R14和R15。这些寄存器可以32位模式对32位操作数进行操作,并且可以64位模式对64位操作数进行操作。RAX、RBX、RCX、RDX、RSI、RDI、RBP和RSP寄存器较低的32位分别对应于EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP寄存器。寄存器R8-R15较低的32位也可以32位模式来寻址并且被称为R8D-R15D。作为示例,具有64位的四字无符号整数可被存储在寄存器RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP或R8-R15中。
这些通用寄存器可用在各种x86架构处理器中,且适用于实现一个或多个实施例,但这些特定寄存器不一定必需。对这些通用寄存器(若需要)的附加描述参见Intel64 and IA-32 Architectures Software Developer’s Manual,Volume 1:Basic Architecture,Order Number:253665-032US,September 2009(Intel64和IA-32架构软件开发者手册第1卷:基本架构,序号:253665-032US,2009年9月)。
根据一个特定示例实施例,加法指令是ADD3——三个操作数的无符号整数加法指令。ADD3指令可具有标准3字节x86操作码,其可任选地具有REX前缀以寻址更多寄存器和更宽的数据空间。
ADD3指令是三操作数指令,其中两个操作数是显式操作数,而另一个操作数是隐式操作数。对ADD3指令的指令操作数编码在表1中示出。
表1.ADD3操作数编码
操作数1 | 操作数2 | 操作数3 | 操作数4 |
ModRM:reg(R,W) | ModRM:r/m(R) | 隐式EAX/RAX(R) | 不适用 |
操作数1显式地指定并且对于32位模式指令可以在32位通用寄存器(reg)中,或者对于64位模式指令可以在64位通用寄存器中。操作数1允许读(R)和写(W)。
操作数2显式地指定并且对于32位模式指令可以在32位通用寄存器(r)或存储器(m)中,或者对于64位模式指令可以在64位通用寄存器(r)或存储器(m)中。操作数2允许读(R)。
操作数3对于32位模式指令被隐式地标识为32位EAX通用寄存器,或者对于64位模式指令被隐式地标识为64位RAX通用寄存器。操作数3用作暗示或隐式源操作数。EAX/RAX寄存器也是本文中别处讨论的MULX指令的隐式标识的目标操作数。操作数3允许读(R)。操作数4不可用于ADD3指令。
图9示出表示加法指令的特定示例实施例的ADD3指令的描述。对于ADD3指令,16位操作数大小目前不可编码。ADD3与Intel 64和IA-32架构软件开发者手册第2A卷中的ADD指令不同地定义进位标志(CF)和溢出标志(OF)。CF、OF、SF、ZF和PF是基于结果来设置的。若结果的最高有效位(例如,64位模式中的比特[63]或32位模式中的比特[31])被置位,则SF标志被置位。AF标志被设置为0。
图10示出表示加法指令的特定示例实施例的ADD3指令的伪代码中的操作。SRC是指源操作数,DEST是指目标操作数,EAX和RAX是指隐式通用寄存器,TEMP是指临时或中间结果,CF是指进位标志,以及OF是指溢出标志。注意,32位模式中的比特[33:32]分别被存储在OF和CF中,且64位模式中的比特[65:64]分别被存储在OF和CF中。
根据另一特定示例实施例,带标志加法指令是ADOC3——三个操作数的带OF/CF标志的无符号整数加法指令。ADOC3指令可具有标准3字节x86操作码,其可任选地具有REX前缀以寻址更多寄存器和更宽的数据空间。
ADOC3指令是三操作数指令,其中两个操作数是显式操作数,而另一个操作数是隐式操作数。对ADOC3指令的指令操作数编码在表2中示出。
表2.ADOC3操作数编码
操作数1 | 操作数2 | 操作数3 | 操作数4 |
ModRM:reg(R,W) | ModRM:r/m(R) | 隐式EAX/RAX(R) | 不适用 |
操作数1被显式地指定并且对于32位模式指令可以在32位通用寄存器(reg)中,或者对于64位模式指令可以在64位通用寄存器中。操作数1允许读(R)和写(W)。
操作数2被显式地指定并且对于32位模式指令可以在32位通用寄存器(r)或存储器(m)中,或者对于64位模式指令可以在64位通用寄存器(r)或存储器(m)中。操作数2允许读(R)。
操作数3对于32位模式指令隐式地标识为32位EAX通用寄存器,或者对于64位模式指令隐式地标识为64位RAX通用寄存器。操作数3用作暗示或隐式源操作数。EAX/RAX寄存器也是本文中别处讨论的MULX指令的隐式标识的目标操作数。操作数3允许读(R)。操作数4不可用于ADOC3指令。
图11示出表示带标志加法指令的特定示例实施例的ADOC3指令的描述。对于ADOC3指令,16位操作数大小目前不可编码。输入OF和CF值无限制;若这些标志皆为1,则该指令的结果被正确定义,因为所生成的最大值将不导致任何溢出。ADOC3与Intel 64和IA-32架构软件开发者手册第2A卷中的ADD指令不同地定义进位标志(CF)和溢出标志(OF)。CF、OF、SF、ZF和PF是基于结果来设置的。若结果的最高有效位(例如,64位模式中的比特[63]或32位模式中的比特[31])被置位,则SF标志被置位。AF标志被设置为0。
图12示出表示带标志加法指令的特定示例实施例的ADOC3指令的伪代码中的操作。SRC是指源操作数,DEST是指目标操作数,EAX和RAX是指隐式通用寄存器,TEMP是指临时或中间结果,CF是指进位标志,以及OF是指溢出标志。注意,32位模式中的比特[33:32]分别被存储在OF和CF中,且64位模式中的比特[65:64]分别被存储在OF和CF中。还注意,总和是基于算术组合“(2*OF)+CF”的。
还构想了ADD3和ADOC3指令的替换实施例。例如,在一个或多个实施例中,ADD3和/或ADOC3指令可任选地使用VEX编码。VEX编码可允许指令显式地指定三个操作数而非仅2个。例如,在一个或多个替换实施例中,ADD3可以VEX编码表示为:reg=reg+r/m+vvvv。作为另一示例,在一个或多个替换实施例中,ADOC3可以VEX编码表示为:reg=reg+r/m+vvvv+OC。对操作码、编码、REX和VEX前缀(若需要)的进一步描述参见Intel64 and IA-32Architectures Software Developer’s Manual Volume 2A:Instruction Set Reference,A-M,Order Number:253666-032US,September 2009(Intel64和IA-32架构软件开发者手册第2A卷:指令集参考,A-M,序号:253666-032US,2009年9月)。
本文中公开的加法指令是通用指令且可用在各种各样的不同类型的算法中。这些加法指令不限于在任何已知算法中使用。相反,预期这些加法指令将在各种各样的不同类型的算法中使用。
目前相信本文中公开的加法指令将有助于极大地提高大数字乘法的速度和/或效率。大数字乘法在各种不同类型的算法中使用。例如,大整数乘法在模幂、密码术、公钥加密、传输层安全(TLS)、安全套接字层(SSL)、网际协议安全(IPsec)、网际协议版本6(IPv6)、以及各种其他非加密算法中盛行。就密码术而言,在过去几十年里,加密算法的使用已有显著增加,例如由于越来越多的因特网和其他网络交易进行加密保护。因此,专用加密加速器、嵌入式加密处理器、支持许多连接的服务器等可非常频繁地执行此类加密算法。因此,这些设备的性能受到它们能执行大整数乘法的速度和/或效率的显著影响。尽管可能在较小范围上,台式和膝上型计算机以及其他设备也执行与此类加密算法相关联的大整数乘法。高性能计算机也执行与大数字算术相关联的大数字乘法。这些和其他类型的电子设备也可为各种其他非加密算法或用户执行大数字乘法。因此,有助于提高大数字乘法的速度和/或效率的新的不同指令将是有用的。
在大整数乘法中,可乘以至少一个整数,该整数大于用于存储该整数的寄存器或其他存储位置的大小。例如,512位、256位或128位整数可被存储在64位、32位或更小的寄存器中。因此,512位、256位或128位整数可能无法装在单个64位或32位寄存器中。相反,512位、256位或128位整数的多个不同64位或32位部分可被存储在不同的64位或32位寄存器或其他存储位置中。
为了进一步说明,图13示出256位无符号整数的实施例,其被存储为各自存储在四个相应寄存器之一中的4个四字无符号整数A1-A4。具体而言,第一个四字无符号整数(A1)被存储在第一寄存器1130-1中,第二个四字无符号整数(A2)被存储在第二寄存器1130-2中,第三个四字无符号整数(A3)被存储在第三寄存器1130-3中,以及第四个四字无符号整数(A4)被存储在第四寄存器1130-4中。这4个四字无符号整数(A1-A4)一起表示256位无符号整数。以这种方式存储的256位无符号整数可被称为无符号整数的多字向量。
对太大而不能装在单个寄存器中的大整数执行乘法可能提出某些挑战。例如,可使用一个以上乘法指令。每个乘法指令可导致仅对该大整数的一部分执行乘法以构成部分积。该部分积可表示至少一个数字的仅一部分的全计算积。这些部分积中的每一个随后可相加或以其他方式组合以获得原始大整数的整个积。将部分积相加可涉及带进位传送的加法。
一个合适的乘法指令是MUL——无符号乘法指令。MUL指令在Intel64and IA-32 Architectures Software Developer’s Manual Volume 2A:Instruction Set Reference,A-M,Order Number:253666-032US,September 2009(Intel64和IA-32架构软件开发者手册第2A卷:指令集参考,A-M,序号:253666-032US,2009年9月)以及各种旧手册中描述。然而,MUL指令取决于积的高阶比特来清除或设置进位标志(CF)和溢出标志(OF)。由于MUL指令可改变进位标志,因为MUL指令一般不应被放在一系列加法(例如,ADD/ADC)指令内。另外,MUL指令的部分积结果一般将需要被存储,且随后对这些部分积结果执行加法(例如,ADD/ADC)指令。取决于可用寄存器数量,在相加之前存储MUL指令的所有这些部分积结果在一些情形中可能趋向于消耗所有可用寄存器,从而导致存储器装满/溢出和/或访问系统存储器。
MUL指令的替换是MULX——不影响标志的无符号乘法指令,其在于________提交的题为“MULTIPLICATION INSTRUCTION FOR WHICH EXECUTION COMPLETES WITHOUT WRITING A CARRY FLAG(其执行不写进位标志地完成的乘法指令)”的美国专利申请序列号_________中公开,该申请被转让给本专利申请的受让人。该MULX专利对第一源操作数和第二源操作数执行无符号乘法并将结果存储在目标操作数中而不读或写算术标志。这有可能实现高效编程,其中软件能交织带进位加法操作和乘法。RDX/EDX寄存器被用作隐式源。RAX/EDX寄存器被用作结果的低64/32位的隐式目标。结果的高64/32位被写入显式地编码的目标寄存器操作数。
用已知ADD/ADC指令和本文中公开的ADD3/ADOC3特定实施例指令执行的大整数乘法的相对相当简单的示例有助于说明能够用一条加法指令加三个源操作数的优点。
图14示出256位四字无符号整数(A1-A4)乘以64位无符号整数(B1)的乘法,以及用ADD/ADC指令进行相关联部分积的求和。回想以上结合图13示出和描述了示例256位四字无符号整数(A1-A4)。对于除了最低/最高有效列以外的每一列,积的高部分以及后续积的低部分将相加成部分和。ADD/ADC指令的一个缺点在于一般需要执行两个加法指令序列。用实线箭头从右到左示出初始加法指令序列,用虚线箭头从右到左示出后续加法指令序列。如图所示,使用了9条指令。这些加法中的许多是带进位加法,这可能导致可能趋向于限制应用的流送流量的串行化。此外,这可能增加维护的临时数据(例如,部分和)的量。在一些情形中,这可能趋向于超过可用寄存器数量,从而导致存储器访问。
相反,图15示出256位四字无符号整数(A1-A4)乘以64位无符号整数(B1)的乘法,以及用根据一个或多个实施例的ADD3/ADOC3指令进行相关联部分积的求和。这些指令中的每条指令能够加三个整数并且有两个可用于存储总和的一部分的标志。因此,有可能在一轮而非两轮中完成加法。有利地,这可有助于减少过程的串行化。此外,仅使用5条指令而非9条。有利地,这可有助于减少需要解码、缓冲、执行等的指令的数量。此外,需要维护的临时结果的数量可减少,这可有助于避免某些存储器访问。每个积Ai*B1可由MUL或MULX指令生成。
图16示出了加法指令的实施例的框图。在该实施例中,加法指令具有与整数乘法指令的隐式目标操作数(例如,存储位置)相同的隐式源操作数(例如,存储位置)。作为示例,从以上的讨论回想起ADD3和ADOC3指令各自在32位模式中具有隐式源操作数EAX而在64位模式中具有隐式源操作数RAX。从以上对MULX指令的讨论还回想起,RAX/EDX寄存器被用作MULX指令的结果的低64/32位的隐式目标。替换地,可使用另一隐式寄存器或其他存储位置。
在一些算法中,这可有助于避免MOV指令或其他数据移动操作。这些附加MOV指令趋向于增加需要解码的指令数量、以及潜在需要缓冲和执行的操作数量。消除诸如移动指令等指令可有助于减少需要解码/转换、可能缓冲、以及执行的指令数量。此外,若将使用经解码流缓冲器(DSB)等,减少指令数量可有助于允许将经解码指令环路装在DSB中,这可通过避免限制解码操作的速度来进一步帮助提高处理速度。有利地,这可有助于提高大整数乘法以及其中加法指令对乘法指令的积执行加法的某些其他算法的速度和/或效率。
其他实施例不限于仅相加三个源操作数或仅使用两个标志。在一个或多个替换实施例中,可任选地将四个或更多源操作数求和,并且可任选地使用三个或更多标志。
一个或多个实施例包括制品,该制品包括有形机器可访问和/或机器可读介质,该介质上存储有若由机器(例如,执行单元)执行则导致对三个操作数和/或整数执行加法运算的加法指令。该有形介质可包括一个或多个固体材料。该介质可包括以机器可访问形式提供(例如,存储)信息的机制。例如,介质可任选地包括可记录介质,诸如软盘、光存储介质、光盘、CD-ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、闪存、及其组合。
合适的机器包括,但不限于,执行单元、通用处理器、专用处理器(例如,图形处理器和加密处理器)、加密加速器、网络通信处理器、计算机系统、网络设备、调制解调器、个人数字助理(PDA)、蜂窝电话、以及具有一个或多个执行单元的各种各样的其他电子设备,这里仅列举了少数示例。
其他实施例涉及具有如本文中所公开的执行单元和/或执行如本文中所公开的方法的计算机系统、嵌入式系统或其他电子设备。
图17是合适的计算机系统1701的第一示例实施例的框图。
该计算机系统包括处理器1700。处理器包括能够执行至少一条加法指令1702的至少一个执行单元1706。
处理器经由总线(例如,前侧总线)或其他互连1780耦合到芯片组1781。该互连可用于经由该芯片组在处理器与系统内的其他组件之间传送数据信号。
芯片组包括称为存储器控制器中枢(MCH)1782的系统逻辑芯片。MCH耦合到前侧总线或其他互连1780。
存储器1786耦合到MCH。在各种实施例中,存储器可包括随机存取存储器(RAM)。DRAM是在一些但不是所有计算机系统中使用的一种类型的RAM。如图所示,存储器可用于存储指令1787(诸如一条或多条加法指令)以及数据1788。
组件互连1785也耦合到MCH。在一个或多个实施例中,组件互连可包括一个或多个外围组件互连高速(PCIe)接口。该组件互连可允许其他组件通过该芯片组耦合到系统的其余部分。此类组件的一个示例是图形芯片或其他图形器件,尽管这是任选的且不是必须的。
芯片组还包括输入/输出(I/O)控制器中枢(ICH)1784。ICH通过中枢接口总线或其他互连1783耦合到MCH。在一个或多个实施例中,总线或其他互连1783可包括直接媒体接口(DMI)。
数据存储1789耦合到ICH。在各种实施例中,数据存储可包括硬盘驱动器、软盘驱动器、CD-ROM设备、闪存设备等,或其组合。
第二组件互连1790也耦合到ICH。在一个或多个实施例中,第二组件互连可包括一个或多个外围组件互连高速(PCIe)接口。第二组件互连可允许各种类型的组件通过该芯片组耦合到系统的其余部分。
串行扩展端口1791也耦合到ICH。在一个或多个实施例中,串行扩展端口可包括一个或多个通用串行总线(USB)端口。串行扩展端口可允许各种其他类型的输入/输出设备通过该芯片组耦合到系统的其余部分。
可任选地耦合到ICH的其他组件的几个说明性示例包括,但不限于,音频控制器、无线收发机、以及用户输入设备(例如,键盘、鼠标)。
网络控制器也耦合到ICH。网络控制器可允许系统耦合到网络。
这仅仅是合适的计算机系统的一个特定示例。例如,在一个或多个替换实施例中,处理器可具有多个核。作为另一示例,在一个或多个替换实施例中,MCH 1782可以与处理器1700物理地集成在相同管芯上,且处理器可通过集成的MCH与存储器1786直接耦合。作为又一示例,在一个或多个替换实施例中,其他组件可与处理器集成在相同管芯上,诸如以提供片上系统(SoC)设计。作为另一示例,在一个或多个替换实施例中,计算机系统可具有多个处理器。
图18是合适的计算机系统1801的第二示例实施例的框图。第二示例实施例与刚才描述的第一示例计算机系统具有某些相似性。出于清楚的目的,本讨论将趋向于强调差别而不重复所有这些相似性。
类似于以上描述的第一示例实施例,该计算机系统包括处理器1800以及具有I/O控制器中枢(ICH)1884的芯片组1881。同样类似于第一示例实施例,该计算机系统包括耦合到芯片组的第一组件互连1885、耦合到ICH的第二组件互连1890、耦合到ICH的串行扩展端口1891、耦合到ICH的网络控制器1892、以及耦合到ICH的数据存储1889。
在该第二实施例中,处理器1800是多核处理器。该多核处理器包括处理器核1894-1到1894-M,其中M可以是等于或大于2的整数(例如,2、4、7或更大)。每个核可包括能够执行如本文中所公开的指令的至少一个实施例的至少一个执行单元。如图所示,核1包括高速缓存1895(例如,L1高速缓存)。其他每个核可类似地包括专用高速缓存。这些处理器核可实现在单个集成电路(IC)芯片上。
处理器还包括至少一个共享高速缓存1896。该共享高速缓存可存储该处理器的一个或多个组件(例如,这些核)使用的数据(例如,指令)。例如,该共享高速缓存可在本地高速缓存在存储器1886中存储的数据以供处理器的组件更快速地访问。在一个或多个实施例中,该共享高速缓存可包括一个或多个中级高速缓存,诸如第2级(L2)、第3级(L3)、第4级(L4)或其他级的高速缓存、末级高速缓存(LLC)、和/或其组合。
处理器核以及共享高速缓存各自耦合到总线或其他互连1897。总线或其他互连可耦合这些核以及共享高速缓存并且允许通信。
处理器还包括存储器控制其中枢(MCH)1882。如该示例实施例中所示,MCH与处理器1800集成。例如,MCH可以与处理器核位于相同管芯上。处理器通过MCH耦合至存储器1886。在一个或多个实施例中,存储器可包括DRAM,但这不是必须的。
芯片组包括输入/输出(I/O)中枢1893。I/O中枢通过总线(例如,快速路径互连(QPI))或其他互连1880耦合到处理器。第一组件互连1885耦合到I/O中枢1893。
这仅仅是合适的系统的一个特定示例。本领域已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。总之,能够纳入本文中所公开的处理器和/或执行单元的大量系统和电子设备一般都是合适的。
在以上描述中,为解释起见,阐明了众多具体细节以提供对本发明的实施例的透彻理解。然而,将对本领域技术人员明显的是,没有这些具体细节中的一些也可实践一个或多个其他实施例。提供所描述的具体实施例不是为了限制本发明而是为了说明本发明的实施例。本发明的范围不是由以上提供的具体示例来确定的,而是仅由所附权利要求来确定的。在其它实例中,以框图形式而非以细节示出了公知的电路、结构、设备和操作以免模糊对本描述的理解。在认为恰适之处,附图标记或附图标记的端部分在诸附图当中被重复以指示可任选地具有相似特性的对应或相似的要素。
某些操作可由硬件组件执行,或者可实施在机器可执行指令中,机器可执行指令可用于使或至少导致编程有该指令的电路或硬件执行这些操作。电路可包括通用或专用处理器、或逻辑电路,这里仅列举了少数示例。操作也可任选地由硬件与软件的组合来执行。执行单元和/或处理器可包括响应于机器指令或从机器指令导出的一个或多个控制信号而存储指令指定的结果操作数的具体或特定电路或其他逻辑。
还应理解,贯穿本说明书对例如“一个实施例”、“实施例”或“一个或多个实施例”的引述意味着特定特征可包括在本发明的实施例的实践中。类似地,应理解,在本描述中,各种特征有时被编组在单个实施例、附图或其描述中以使本公开流线化并帮助理解各个发明性方面。然而,这种公开方法不应被解读为反映本发明需要比每项权利要求中所明确记载的更多特征的意图。相反,如所附权利要求反映的,各发明性方面可在于比单个所公开实施例的全部特征更少的特征。因此,详细描述所附的权利要求因此被明确纳入该详细描述中,每一项权利要求独自作为本发明单独的实施例。
Claims (30)
1.一种方法,包括:
接收加法指令,所述加法指令指示第一源操作数、第二源操作数和第三源操作数;以及
作为所述加法指令的结果,存储使用所述第一、第二和第三源操作数计算出的总和,其中所述总和部分地存储在由所述加法指令指示的目标操作数中且部分地存储在多个标志中。
2.如权利要求1所述的方法,其特征在于,存储包括将所述总和的次最高有效位存储在所述多个标志中的第一标志中以及将所述总和的最高有效位存储在所述多个标志中的第二标志中。
3.如权利要求1所述的方法,其特征在于,将所述总和部分地存储在所述标志中包括将所述总和部分地存储在进位标志中以及部分地存储在第二标志中。
4.如权利要求3所述的方法,其特征在于,所述第二标志包括用途变更的架构标志。
5.如权利要求3所述的方法,其特征在于,所述第二标志包括溢出标志。
6.如权利要求1所述的方法,其特征在于,存储所述总和包括存储所述第一、第二和第三源操作数的总和加上所述多个标志的组合。
7.如权利要求6所述的方法,其特征在于,存储所述总和包括存储所述第一、第二和第三源操作数的总和加上所述多个标志中的第一标志以及加上是所述多个标志中的第二标志的两倍的积。
8.如权利要求6所述的方法,其特征在于,所述多个标志的组合包括溢出标志,且所述源操作数包括无符号整数。
9.如权利要求1所述的方法,其特征在于,接收包括接收作为寄存器来隐式地指定选自所述第一、第二和第三源操作数的源操作数的加法指令,所述寄存器被隐式地指定为相同的指令集架构的整数乘法指令的目标操作数。
10.如权利要求1所述的方法,其特征在于,所述第一、第二和第三源操作数是具有选自32位和64位的大小的无符号整数操作数。
11.如权利要求1所述的方法,其特征在于,所述方法作为大整数乘法的一部分执行,所述大整数大于用于存储所述大整数的寄存器大小。
12.如权利要求1所述的方法,其特征在于,所述方法由具有多个核的通用微处理器执行,且所述核中的至少一个核具有响应所述指令的电路。
13.一种装置,包括:
执行单元,用于作为指示第一源操作数、第二源操作数和第三源操作数的加法指令的结果,存储使用所述第一、第二和第三源操作数计算出的总和,其中所述总和部分地存储在由所述加法指令指示的目标操作数中且部分地存储在多个标志中。
14.如权利要求13所述的装置,其特征在于,所述执行单元用于将所述总和的次最高有效位存储在所述多个标志中的第一标志中以及将所述总和的最高有效位存储在所述多个标志中的第二标志中。
15.如权利要求13所述的装置,其特征在于,所述执行单元用于将所述总和部分地存储在进位标志中以及部分地存储在第二标志中。
16.如权利要求15所述的装置,其特征在于,所述第二标志包括用途变更的架构标志。
17.如权利要求15所述的装置,其特征在于,所述第二标志包括溢出标志。
18.如权利要求13所述的装置,其特征在于,所述执行单元用于存储所述第一、第二和第三源操作数的总和加上所述多个标志的组合。
19.如权利要求18所述的装置,其特征在于,所述执行单元用于存储所述第一、第二和第三源操作数的总和加上所述多个标志中的第一标志以及加上是所述多个标志中的第二标志的两倍的积。
20.如权利要求18所述的装置,其特征在于,所述执行单元作用于存储所述第一、第二和第三源操作数的总和加上包括溢出标志的标志组合,其中所述源操作数包括无符号整数。
21.如权利要求13所述的装置,其特征在于,所述执行单元对作为寄存器来隐式地指定选自所述第一、第二和第三源操作数的源操作数的加法指令作出响应,所述寄存器被隐式地指定为相同的指令集架构的整数乘法指令的目标操作数。
22.如权利要求13所述的装置,其特征在于,所述执行单元对指定具有无符号整数的所述源操作数的加法指令作出响应,所述无符号整数具有选自32位和64位的大小。
23.如权利要求11所述的装置,其特征在于,所述执行单元被包括在多核通用微处理器的核内。
24.如权利要求11所述的装置,其特征在于,所述执行单元被包括在专用加密设备内。
25.一种装置,包括:
执行单元,用于作为指示各自具有无符号整数的第一源操作数、第二源操作数和第三源操作数的加法指令的结果,存储使用所述第一、第二和第三源操作数计算出的总和加上多个标志的组合,其中所述总和部分地存储在由所述加法指令指示的目标操作数中且部分地存储在所述多个标志中。
26.如权利要求25所述的装置,其特征在于,所述执行单元用于存储所述第一、第二和第三源操作数的总和加上所述多个标志中的第一标志以及加上是所述多个标志中的第二标志的两倍的积。
27.一种系统,包括:
互连;
耦合到所述互连的处理器,所述处理器用于作为指示第一源操作数、第二源操作数和第三源操作数的加法指令的结果,存储使用所述第一、第二和第三源操作数计算出的总和,其中所述总和部分地存储在由所述加法指令指示的目标操作数中且部分地存储在多个标志中;以及
耦合至所述互连的动态随机存取存储器(DRAM)。
28.如权利要求27所述的系统,其特征在于,所述处理器用于存储所述第一、第二和第三源操作数的总和加上所述多个标志的组合。
29.一种制品,包括:
包括固体物质的有形机器可读介质,用于提供加法指令,
所述加法指令用于指示第一源操作数、第二源操作数和第三源操作数,且若被机器执行则使所述机器执行以下操作:
使用所述第一、第二和第三源操作数计算总和;以及
将所述总和部分地存储在由所述加法指令指示的目标操作数中以及部分地存储在多个标志中。
30.如权利要求29所述的制品,其特征在于,所述处理器用于计算所述第一、第二和第三源操作数的总和加上所述多个标志的组合。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610109088.XA CN105786446B (zh) | 2009-12-22 | 2010-12-21 | 支持带三个源操作数的加法指令的处理器及含该指令的介质 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US12/645,334 US8549264B2 (en) | 2009-12-22 | 2009-12-22 | Add instructions to add three source operands |
US12/645,334 | 2009-12-22 |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610109088.XA Division CN105786446B (zh) | 2009-12-22 | 2010-12-21 | 支持带三个源操作数的加法指令的处理器及含该指令的介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102103486A true CN102103486A (zh) | 2011-06-22 |
CN102103486B CN102103486B (zh) | 2016-03-30 |
Family
ID=44152788
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010618037.2A Expired - Fee Related CN102103486B (zh) | 2009-12-22 | 2010-12-21 | 用于将三个源操作数相加的加法指令 |
CN201610109088.XA Expired - Fee Related CN105786446B (zh) | 2009-12-22 | 2010-12-21 | 支持带三个源操作数的加法指令的处理器及含该指令的介质 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610109088.XA Expired - Fee Related CN105786446B (zh) | 2009-12-22 | 2010-12-21 | 支持带三个源操作数的加法指令的处理器及含该指令的介质 |
Country Status (5)
Country | Link |
---|---|
US (2) | US8549264B2 (zh) |
JP (2) | JP5425041B2 (zh) |
CN (2) | CN102103486B (zh) |
DE (1) | DE102010051476B4 (zh) |
TW (1) | TWI544404B (zh) |
Cited By (12)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104011666A (zh) * | 2011-12-22 | 2014-08-27 | 英特尔公司 | 具有独立进位链的加法指令 |
CN104049954A (zh) * | 2013-03-14 | 2014-09-17 | 英特尔公司 | 多数据元素与多数据元素比较处理器、方法、系统和指令 |
CN104126170A (zh) * | 2011-12-22 | 2014-10-29 | 英特尔公司 | 打包数据操作掩码寄存器算术组合处理器、方法、系统及指令 |
CN104126173A (zh) * | 2011-12-23 | 2014-10-29 | 英特尔公司 | 不会引起密码应用的算术标志的三输入操作数向量add指令 |
CN104756068A (zh) * | 2012-12-26 | 2015-07-01 | 英特尔公司 | 合并相邻的聚集/分散操作 |
CN104951278A (zh) * | 2014-03-28 | 2015-09-30 | 英特尔公司 | 用于执行多个乘法操作的方法和装置 |
CN106030510A (zh) * | 2014-03-26 | 2016-10-12 | 英特尔公司 | 三源操作数浮点加法处理器、方法、系统和指令 |
CN107003841A (zh) * | 2014-12-24 | 2017-08-01 | 英特尔公司 | 用于融合加法‑加法指令的装置和方法 |
CN107003848A (zh) * | 2014-12-24 | 2017-08-01 | 英特尔公司 | 用于融合乘法‑乘法指令的装置和方法 |
CN107077332A (zh) * | 2014-12-23 | 2017-08-18 | 英特尔公司 | 执行矢量饱和双字/四倍字长加法的指令和逻辑 |
CN107918546A (zh) * | 2013-03-30 | 2018-04-17 | 英特尔公司 | 利用经掩码的全寄存器访问实现部分寄存器访问的处理器、方法和系统 |
CN108681465A (zh) * | 2011-12-22 | 2018-10-19 | 英特尔公司 | 用于产生整数序列的处理器、处理器核及系统 |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107368286B (zh) * | 2011-12-19 | 2020-11-06 | 英特尔公司 | 用于多精度算术的simd整数乘法累加指令 |
US9436435B2 (en) | 2011-12-23 | 2016-09-06 | Intel Corporation | Apparatus and method for vector instructions for large integer arithmetic |
US20150205609A1 (en) * | 2013-12-11 | 2015-07-23 | Mill Computing, Inc. | Computer Processor Employing Operand Data With Associated Meta-Data |
JP2017503232A (ja) * | 2013-12-28 | 2017-01-26 | インテル・コーポレーション | Rsaアルゴリズム加速プロセッサ、方法、システム、及び命令 |
US9665936B2 (en) * | 2015-09-25 | 2017-05-30 | Siemens Healthcare Gmbh | Systems and methods for see-through views of patients |
US9633435B2 (en) * | 2015-09-25 | 2017-04-25 | Siemens Healthcare Gmbh | Calibrating RGB-D sensors to medical image scanners |
US9727353B2 (en) | 2015-10-30 | 2017-08-08 | International Business Machines Corporation | Simultaneously capturing status information for multiple operating modes |
CN111694541B (zh) * | 2020-05-06 | 2023-04-21 | 常熟理工学院 | 一种用于数论变换乘法的基32运算电路 |
US11799083B2 (en) | 2021-08-26 | 2023-10-24 | GM Global Technology Operations LLC | Lithiation additive for a positive electrode |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1438574A (zh) * | 2003-02-21 | 2003-08-27 | 中国航天科技集团公司第九研究院七七一研究所 | 一种16位微处理器指令集 |
CN1508674A (zh) * | 2002-12-18 | 2004-06-30 | ض� | 提供可变宽度的至少六路加法指令的方法及相应装置 |
CN101477456A (zh) * | 2009-01-14 | 2009-07-08 | 北京大学深圳研究生院 | 一种自相关运算单元及处理器 |
Family Cites Families (38)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3541528A (en) * | 1969-01-06 | 1970-11-17 | Ibm | Implicit load and store mechanism |
US5187796A (en) * | 1988-03-29 | 1993-02-16 | Computer Motion, Inc. | Three-dimensional vector co-processor having I, J, and K register files and I, J, and K execution units |
US4901270A (en) | 1988-09-23 | 1990-02-13 | Intel Corporation | Four-to-two adder cell for parallel multiplication |
GB2228597A (en) * | 1989-02-27 | 1990-08-29 | Ibm | Data processor with conditional instructions |
JP2832899B2 (ja) * | 1993-05-31 | 1998-12-09 | 松下電器産業株式会社 | データ処理装置およびデータ処理方法 |
JP3487903B2 (ja) * | 1993-11-12 | 2004-01-19 | 松下電器産業株式会社 | 演算装置及び演算方法 |
JP2931890B2 (ja) * | 1995-07-12 | 1999-08-09 | 三菱電機株式会社 | データ処理装置 |
US7085795B2 (en) | 2001-10-29 | 2006-08-01 | Intel Corporation | Apparatus and method for efficient filtering and convolution of content data |
US5696711A (en) | 1995-12-22 | 1997-12-09 | Intel Corporation | Apparatus and method for performing variable precision floating point rounding operations |
JP3790307B2 (ja) * | 1996-10-16 | 2006-06-28 | 株式会社ルネサステクノロジ | データプロセッサ及びデータ処理システム |
US5880984A (en) * | 1997-01-13 | 1999-03-09 | International Business Machines Corporation | Method and apparatus for performing high-precision multiply-add calculations using independent multiply and add instruments |
US5889983A (en) * | 1997-01-21 | 1999-03-30 | Intel Corporation | Compare and exchange operation in a processing system |
US6253310B1 (en) | 1998-12-31 | 2001-06-26 | Intel Corporation | Delayed deallocation of an arithmetic flags register |
US6338136B1 (en) * | 1999-05-18 | 2002-01-08 | Ip-First, Llc | Pairing of load-ALU-store with conditional branch |
JP2001092633A (ja) * | 1999-09-22 | 2001-04-06 | Toshiba Corp | 複数の結果を出力する命令を有する演算装置 |
US6470374B1 (en) | 2000-02-21 | 2002-10-22 | Hewlett-Packard Company | Carry look-ahead for bi-endian adder |
US7624138B2 (en) | 2001-10-29 | 2009-11-24 | Intel Corporation | Method and apparatus for efficient integer transform |
US6901504B2 (en) * | 2002-01-22 | 2005-05-31 | International Business Machines Corporation | Result forwarding of either input operand to same operand input to reduce forwarding path |
US7028067B2 (en) * | 2002-02-20 | 2006-04-11 | International Business Machines Corporation | Generation of mask-constrained floating-point addition and subtraction test cases, and method and system therefor |
US7346881B2 (en) * | 2002-05-13 | 2008-03-18 | Tensilica, Inc. | Method and apparatus for adding advanced instructions in an extensible processor architecture |
US7392368B2 (en) * | 2002-08-09 | 2008-06-24 | Marvell International Ltd. | Cross multiply and add instruction and multiply and subtract instruction SIMD execution on real and imaginary components of a plurality of complex data elements |
US7523152B2 (en) | 2002-12-26 | 2009-04-21 | Intel Corporation | Methods for supporting extended precision integer divide macroinstructions in a processor |
US7290024B2 (en) | 2003-12-18 | 2007-10-30 | Intel Corporation | Methods and apparatus for performing mathematical operations using scaled integers |
US20060218377A1 (en) * | 2005-03-24 | 2006-09-28 | Stexar Corporation | Instruction with dual-use source providing both an operand value and a control value |
US7930337B2 (en) | 2006-06-27 | 2011-04-19 | Intel Corporation | Multiplying two numbers |
US7738657B2 (en) | 2006-08-31 | 2010-06-15 | Intel Corporation | System and method for multi-precision division |
US7961877B2 (en) | 2006-12-14 | 2011-06-14 | Intel Corporation | Factoring based modular exponentiation |
US20080148011A1 (en) | 2006-12-14 | 2008-06-19 | Intel Corporation | Carry/Borrow Handling |
US7925011B2 (en) | 2006-12-14 | 2011-04-12 | Intel Corporation | Method for simultaneous modular exponentiations |
US7949130B2 (en) | 2006-12-28 | 2011-05-24 | Intel Corporation | Architecture and instruction set for implementing advanced encryption standard (AES) |
US8538012B2 (en) | 2007-03-14 | 2013-09-17 | Intel Corporation | Performing AES encryption or decryption in multiple modes with a single instruction |
US8538015B2 (en) | 2007-03-28 | 2013-09-17 | Intel Corporation | Flexible architecture and instruction for advanced encryption standard (AES) |
US8346839B2 (en) | 2007-03-30 | 2013-01-01 | Intel Corporation | Efficient advanced encryption standard (AES) datapath using hybrid rijndael S-box |
US8391475B2 (en) | 2007-03-30 | 2013-03-05 | Intel Corporation | Method and apparatus for advanced encryption standard (AES) block cipher |
US8520845B2 (en) | 2007-06-08 | 2013-08-27 | Intel Corporation | Method and apparatus for expansion key generation for block ciphers |
US8005210B2 (en) | 2007-06-30 | 2011-08-23 | Intel Corporation | Modulus scaling for elliptic-curve cryptography |
US8271570B2 (en) | 2007-06-30 | 2012-09-18 | Intel Corporation | Unified integer/galois field (2m) multiplier architecture for elliptic-curve crytpography |
US7986779B2 (en) | 2007-06-30 | 2011-07-26 | Intel Corporation | Efficient elliptic-curve cryptography based on primality of the order of the ECC-group |
-
2009
- 2009-12-22 US US12/645,334 patent/US8549264B2/en active Active
-
2010
- 2010-11-15 DE DE201010051476 patent/DE102010051476B4/de not_active Expired - Fee Related
- 2010-11-16 JP JP2010256162A patent/JP5425041B2/ja not_active Expired - Fee Related
- 2010-11-17 TW TW099139492A patent/TWI544404B/zh not_active IP Right Cessation
- 2010-12-21 CN CN201010618037.2A patent/CN102103486B/zh not_active Expired - Fee Related
- 2010-12-21 CN CN201610109088.XA patent/CN105786446B/zh not_active Expired - Fee Related
-
2013
- 2013-03-13 US US13/802,540 patent/US8738893B2/en active Active
- 2013-11-26 JP JP2013243794A patent/JP5736028B2/ja active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1508674A (zh) * | 2002-12-18 | 2004-06-30 | ض� | 提供可变宽度的至少六路加法指令的方法及相应装置 |
CN1438574A (zh) * | 2003-02-21 | 2003-08-27 | 中国航天科技集团公司第九研究院七七一研究所 | 一种16位微处理器指令集 |
CN101477456A (zh) * | 2009-01-14 | 2009-07-08 | 北京大学深圳研究生院 | 一种自相关运算单元及处理器 |
Cited By (25)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9760371B2 (en) | 2011-12-22 | 2017-09-12 | Intel Corporation | Packed data operation mask register arithmetic combination processors, methods, systems, and instructions |
CN104126170B (zh) * | 2011-12-22 | 2018-05-18 | 英特尔公司 | 打包数据操作掩码寄存器算术组合处理器、方法、系统及指令 |
CN104126170A (zh) * | 2011-12-22 | 2014-10-29 | 英特尔公司 | 打包数据操作掩码寄存器算术组合处理器、方法、系统及指令 |
CN108681465A (zh) * | 2011-12-22 | 2018-10-19 | 英特尔公司 | 用于产生整数序列的处理器、处理器核及系统 |
CN104011666A (zh) * | 2011-12-22 | 2014-08-27 | 英特尔公司 | 具有独立进位链的加法指令 |
US11531542B2 (en) | 2011-12-22 | 2022-12-20 | Intel Corporation | Addition instructions with independent carry chains |
CN107861756B (zh) * | 2011-12-22 | 2022-04-15 | 英特尔公司 | 具有独立进位链的加法指令 |
US11080045B2 (en) | 2011-12-22 | 2021-08-03 | Intel Corporation | Addition instructions with independent carry chains |
CN107861756A (zh) * | 2011-12-22 | 2018-03-30 | 英特尔公司 | 具有独立进位链的加法指令 |
CN104126173A (zh) * | 2011-12-23 | 2014-10-29 | 英特尔公司 | 不会引起密码应用的算术标志的三输入操作数向量add指令 |
US10275257B2 (en) | 2012-12-26 | 2019-04-30 | Intel Corporation | Coalescing adjacent gather/scatter operations |
US11003455B2 (en) | 2012-12-26 | 2021-05-11 | Intel Corporation | Coalescing adjacent gather/scatter operations |
CN104756068A (zh) * | 2012-12-26 | 2015-07-01 | 英特尔公司 | 合并相邻的聚集/分散操作 |
CN104756068B (zh) * | 2012-12-26 | 2018-08-17 | 英特尔公司 | 合并相邻的聚集/分散操作 |
US11599362B2 (en) | 2012-12-26 | 2023-03-07 | Intel Corporation | Coalescing adjacent gather/scatter operations |
CN104049954B (zh) * | 2013-03-14 | 2018-04-13 | 英特尔公司 | 多数据元素与多数据元素比较处理器、方法、系统和指令 |
CN104049954A (zh) * | 2013-03-14 | 2014-09-17 | 英特尔公司 | 多数据元素与多数据元素比较处理器、方法、系统和指令 |
CN107918546A (zh) * | 2013-03-30 | 2018-04-17 | 英特尔公司 | 利用经掩码的全寄存器访问实现部分寄存器访问的处理器、方法和系统 |
CN106030510A (zh) * | 2014-03-26 | 2016-10-12 | 英特尔公司 | 三源操作数浮点加法处理器、方法、系统和指令 |
CN104951278A (zh) * | 2014-03-28 | 2015-09-30 | 英特尔公司 | 用于执行多个乘法操作的方法和装置 |
CN107077332A (zh) * | 2014-12-23 | 2017-08-18 | 英特尔公司 | 执行矢量饱和双字/四倍字长加法的指令和逻辑 |
CN107003848A (zh) * | 2014-12-24 | 2017-08-01 | 英特尔公司 | 用于融合乘法‑乘法指令的装置和方法 |
CN107003848B (zh) * | 2014-12-24 | 2021-05-25 | 英特尔公司 | 用于融合乘法-乘法指令的装置和方法 |
CN107003841A (zh) * | 2014-12-24 | 2017-08-01 | 英特尔公司 | 用于融合加法‑加法指令的装置和方法 |
CN107003841B (zh) * | 2014-12-24 | 2021-11-23 | 英特尔公司 | 用于融合加法-加法指令的装置和方法 |
Also Published As
Publication number | Publication date |
---|---|
DE102010051476A1 (de) | 2011-07-28 |
CN105786446A (zh) | 2016-07-20 |
US8738893B2 (en) | 2014-05-27 |
JP2014038664A (ja) | 2014-02-27 |
US20130227252A1 (en) | 2013-08-29 |
CN102103486B (zh) | 2016-03-30 |
DE102010051476B4 (de) | 2015-05-13 |
JP5736028B2 (ja) | 2015-06-17 |
JP5425041B2 (ja) | 2014-02-26 |
TWI544404B (zh) | 2016-08-01 |
US8549264B2 (en) | 2013-10-01 |
TW201145161A (en) | 2011-12-16 |
CN105786446B (zh) | 2018-04-13 |
US20110153993A1 (en) | 2011-06-23 |
JP2011134305A (ja) | 2011-07-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102103486B (zh) | 用于将三个源操作数相加的加法指令 | |
TWI818885B (zh) | 執行複數的熔合乘-加指令的系統與方法 | |
US10514912B2 (en) | Vector multiplication with accumulation in large register space | |
CN107368286B (zh) | 用于多精度算术的simd整数乘法累加指令 | |
EP3567472B1 (en) | Systems, methods, and apparatuses utilizing an elastic floating-point number | |
US11900107B2 (en) | Instructions for fused multiply-add operations with variable precision input operands | |
US9965276B2 (en) | Vector operations with operand base system conversion and re-conversion | |
US9733935B2 (en) | Super multiply add (super madd) instruction | |
CN104137055A (zh) | 点积处理器、方法、系统和指令 | |
US9785436B2 (en) | Apparatus and method for efficient gather and scatter operations | |
CN104461461A (zh) | 位范围隔离指令、方法和装置 | |
US10719317B2 (en) | Hardware apparatuses and methods relating to elemental register accesses | |
CN102109976A (zh) | 完成其执行而不读取进位标志的循环指令 | |
EP3238022B1 (en) | Method and apparatus for performing big-integer arithmetic operations | |
US10649774B2 (en) | Multiplication instruction for which execution completes without writing a carry flag | |
CN104011658A (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 | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160330 Termination date: 20191221 |
|
CF01 | Termination of patent right due to non-payment of annual fee |