用于执行逻辑比较操作的方法和装置转让专利

申请号 : CN200710144187.2

文献号 : CN101231583B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : R·卡普尔R·祖海尔M·巴克斯顿Z·斯佩贝尔K·戈特利布

申请人 : 英特尔公司

摘要 :

一种用于包含在对打包或非打包数据执行逻辑比较和分支支持操作的处理器指令中的方法和装置。在一个实施例中,处理器耦合到存储器。存储器中已经存储了第一数据和第二数据。该处理器对该第一和第二数据执行逻辑比较。该逻辑比较可以对该第一和第二数据的每个位执行,或者可以只对某些位执行。对于至少一个实施例,至少第一数据包括打包数据元素,并且该逻辑比较对该打包数据元素的最高有效位执行。该逻辑比较可以包括对第一和第二数据的相同的各个位的比较,并且还包括对第一数据的位与第二数据的相应位的反码的逻辑比较。基于这些比较,可以进行分支支持动作。这样的分支支持动作可以包括设置一个或多个标志,其进而可以被所述分支单元使用。可选择地,分支支持动作可以包括分支到所指示的目标代码位置。

权利要求 :

1.一种执行逻辑比较操作的方法,包括:

解码单个指令以指示第一操作数、第二操作数和所希望的操作,所述第一操作数和所述第二操作数中的每一个都包含多个位;

响应于所述单个指令,控制对所述第一操作数的一个或多个位与所述第二操作数的对应位进行的第一逐位逻辑AND操作,并且响应于所述单个指令,控制对所述第一操作数的一个或多个位与所述第二操作数的反码的对应位进行的第二逐位逻辑AND操作;

根据所述第一逐位逻辑AND操作的结果修改第一状态标志的值,并且根据所述第二逐位逻辑AND操作的结果修改第二状态标志的值。

2.根据权利要求1的方法,其中,

所述第一操作数包括第一多个数据元素;

所述第二操作数包括第二多个数据元素;

对所述第一操作数的每一个数据元素的一个位执行所述逐位逻辑AND操作,并且所述第二操作数的所述对应位是所述第二操作数的每个数据元素的相同的各个位。

3.根据权利要求2的方法,其中,所述数据元素可以是字节、字、双字和四字中的任何一个。

4.根据权利要求3的方法,其中,所述一个位可以是最高有效位和最低有效位中的任何一个。

5.根据权利要求1的方法,其中,所述第一和第二操作数每一个都包括128个位。

6.根据权利要求1的方法,其中,所述第一状态标志为零标志,所述第二状态标志为进位标志。

7.根据权利要求1的方法,其中,所述单个指令包括逻辑比较、设置零标志和进位标志(LCSZC)指令。

8.根据权利要求7的方法,还包括在处理器的LCSZC电路中执行所述控制和修改。

9.一种执行逻辑比较操作的装置,包括:

解码器,用于接收待解码的单个指令,所述单个指令用于指示第一操作数、第二操作数和所希望的操作,所述第一操作数和所述第二操作数中的每一个都包含多个位;

转化器,用于获得所述第二操作数的至少一些位的反码值;

电路,用于响应于所述单个指令执行对所述第一操作数的一个或多个位与所述第二操作数的对应位进行的第一逐位逻辑AND操作,并且响应于所述单个指令执行对所述第一操作数的一个或多个位与所述反码值的对应位进行的第二逐位逻辑AND操作;

第一状态标志,由所述电路根据所述第一逐位逻辑AND操作的结果将所述第一状态标志修改为一个值;以及第二状态标志,由所述电路根据所述第二逐位逻辑AND操作的结果将所述第二状态标志修改为一个值。

10.根据权利要求9的装置,其中,

所述第一操作数包括第一多个数据元素;

所述第二操作数包括第二多个数据元素;

对所述第一操作数的每一个数据元素的一个位执行所述第一逐位逻辑AND操作,并且所述第二操作数的所述对应位是所述第二操作数的每个数据元素的相同的各个位。

11.根据权利要求10的装置,其中,所述电路包括:第一组AND门,用于所述第一操作数的每一个数据元素的所述位和所述第二操作数的所述对应位;

第二组AND门,用于所述第一操作数的每一个数据元素的所述位和所述第二操作数的所述对应位的所述反码值;

第一NAND门,用于确定所述第一逐位逻辑AND操作的结果;

第二NAND门,用于确定关于所述反码值的所述第二逐位逻辑AND操作的结果。

12.根据权利要求11的装置,其中,所述数据元素可以是字节、字、双字和四字中的任何一个。

13.根据权利要求12的装置,其中,所述一个位可以是最高有效位和最低有效位中的任何一个。

14.一种计算系统,包括:

存储指令的可寻址存储器;

处理器,包括:

存储第一状态标志值且架构上可见的第一存储区域,以及存储第二状态标志值且架构上可见的第二存储区域;

解码器,用于接收待解码的单个指令,所述单个指令用于指示第一操作数、第二操作数和所希望的操作,所述第一操作数和所述第二操作数中的每一个都包含多个位;以及执行单元,用于响应于所述单个指令,控制对所述第一操作数的一个或多个位与所述第二操作数的相应位进行的第一逐位逻辑AND操作,并且根据所述第一逐位逻辑AND操作的结果修改所述第一状态标志值;并且所述执行单元用于响应于所述单个指令,控制对所述第一操作数的一个或多个位与所述第二操作数的一个或多个位的反码值进行的第二逐位逻辑AND操作,并且根据所述第二逐位逻辑AND操作的结果修改所述第二状态标志值。

15.根据权利要求14的计算系统,其中,

所述第一操作数包括第一多个数据元素;

所述第二操作数包括第二多个数据元素;

对所述第一操作数的每一个数据元素的一个位执行所述第一逐位逻辑AND操作,并且所述第二操作数的所述对应位是所述第二操作数的每个数据元素的相同的各个位。

16.根据权利要求15的计算系统,其中,所述执行单元包括:第一组AND门,用于所述第一操作数的每一个数据元素的所述位和所述第二操作数的所述对应位;

第二组AND门,用于所述第一操作数的每一个数据元素的所述位和所述第二操作数的所述对应位的所述反码值;

第一NAND门,用于确定所述第一逐位逻辑AND操作的结果;

第二NAND门,用于确定关于所述反码值的所述第二逐位逻辑AND操作的结果。

17.根据权利要求16的计算系统,其中,所述数据元素可以是字节、字、双字和四字中的任何一个。

18.根据权利要求17的计算系统,其中,所述一个位可以是最高有效位和最低有效位中的任何一个。

19.根据权利要求14的计算系统,其中,所述第一状态标志为零标志,所述第二状态标志为进位标志。

说明书 :

用于执行逻辑比较操作的方法和装置

技术领域

[0001] 本公开内容总体上涉及处理器领域。特别地,本公开内容涉及使用单个控制信号对多位数据上执行多个逻辑比较操作。
[0002] 背景技术
[0003] 在典型的计算机系统中,处理器被实现为使用产生一个结果的指令对由许多位(例如,64个)表示的值进行操作。例如,执行加法指令将会把第一个64位的值和第二个
64位的值加在一起,并将结果存储为第三个64位的值。多媒体应用程序(例如,以计算机
支持协作(CSC--具有混合的媒体数据处理的电信会议集合)、2D/3D图形、图像处理、视频
压缩/解压缩、识别算法和音频处理为目标的应用程序)要求处理大量数据。所述数据可
以用单个大值(例如,64位或128位)表示,或者作为代替,可以用少量的位(例如,8或16
或32位)表示。例如,图形数据可以由8或16位表示,声音数据可以由8或16位表示,整
数数据可以由8、16或32位表示,而浮点数据可以由32或64位表示。
[0004] 为了提高多媒体应用程序(以及其它具有相同特征的应用程序)的效率,处理器可以提供打包数据(packed data)格式。典型地,打包数据格式是这样的格式:其中,将通
常用来表示单个值的多个位划分成多个固定大小的数据元素,每个数据元素表示一个单独
的值。例如,128位寄存器可以分成四个32位元素,每个元素表示单独的32位值。用这种
方式,这些处理器可以更有效地处理多媒体应用程序。
[0005] 发明内容
[0006] 根据本发明的一个方面,提供一种执行逻辑比较操作的方法,包括:解码单个指令以指示第一操作数、第二操作数和所希望的操作, 所述第一操作数和所述第二操作数中的
每一个都包含多个位;响应于所述单个指令,控制对所述第一操作数的一个或多个位与所
述第二操作数的对应位进行的第一逐位逻辑AND操作,并且响应于所述单个指令,控制对
所述第一操作数的一个或多个位与所述第二操作数的反码的对应位进行的第二逐位逻辑
AND操作;根据所述第一逐位逻辑AND操作的结果修改第一状态标志的值,并且根据所述第
二逐位逻辑AND操作的结果修改第二状态标志的值。
[0007] 根据一个方面,所述第一操作数包括第一多个数据元素;所述第二操作数包括第二多个数据元素;对所述第一操作数的每一个数据元素的一个位执行所述逐位逻辑AND操
作,并且所述第二操作数的所述对应位是所述第二操作数的每个数据元素的相同的各个
位。
[0008] 根据一个方面,所述数据元素可以是字节、字、双字和四字中的任何一个。
[0009] 根据一个方面,所述一个位可以是最高有效位和最低有效位中的任何一个。
[0010] 根据一个方面,所述第一和第二操作数每一个都包括128个位。
[0011] 根据一个方面,所述第一状态标志为零标志,所述第二状态标志为进位标志。
[0012] 根据一个方面,所述单个指令包括逻辑比较、设置零标志和进位标志(LCSZC)指令。
[0013] 根据一个方面,还包括在处理器的LCSZC电路中执行所述控制和修改。
[0014] 根据本发明的另一个方面,提供一种执行逻辑比较操作的装置,包括:解码器,用于接收待解码的单个指令,所述单个指令用于指示第一操作数、第二操作数和所希望的操
作,所述第一操作数和所述第二操作数中的每一个都包含多个位;转化器,用于获得所述第
二操作数的至少一些位的反码值;电路,用于响应于所述单个指令执行对所述第一操作数
的一个或多个位与所述第二操作数的对应位进行的第一逐位逻辑AND操作,并且响应于所
述单个指令执行对所述第一操作数的一个或多个位与所述反码值的对应位进行的第二逐
位逻辑AN D操作;第一状态标志,由所述电路根据所述第一逐位逻辑AND操作的结果将
所述第一状态标志修改为一个值;以及第二状态标志,由所述电路根据所述第二逐位逻辑
AND操作的结果将所述第二状态标志修改为一个值。
[0015] 根据一个方面,所述第一操作数包括第一多个数据元素;所述第二操作数包括第二多个数据元素;对所述第一操作数的每一个数据元素的一个位执行所述第一逐位逻辑
AND操作,并且所述第二操作数的所述对应位是所述第二操作数的每个数据元素的相同的
各个位。
[0016] 根据一个方面,所述电路包括:第一组AND门,用于所述第一操作数的每一个数据元素的所述位和所述第二操作数的所述对应位;第二组AND门,用于所述第一操作数的每
一个数据元素的所述位和所述第二操作数的所述对应位的所述反码值;第一NAND门,用于
确定所述第一逐位逻辑AND操作的结果;第二NAND门,用于确定关于所述反码值的所述第
二逐位逻辑AND操作的结果。
[0017] 根据一个方面,所述数据元素可以是字节、字、双字和四字中的任何一个。
[0018] 根据一个方面,所述一个位可以是最高有效位和最低有效位中的任何一个。
[0019] 根据本发明的又一个方面,提供一种计算系统,包括:存储指令的可寻址存储器和处理器,所述处理器包括:存储第一状态标志值且架构上可见的第一存储区域,以及存储第
二状态标志值且架构上可见的第二存储区域;解码器,用于接收待解码的单个指令,所述单
个指令用于指示第一操作数、第二操作数和所希望的操作,所述第一操作数和所述第二操
作数中的每一个都包含多个位;以及执行单元,用于响应于所述单个指令,控制对所述第一
操作数的一个或多个位与所述第二操作数的相应位进行的第一逐位逻辑AND操作,并且根
据所述第一逐位逻辑AND操作的结果修改所述第一状态标志值;并且所述执行单元用于响
应于所述单个指令,控制对所述第一操作数的一个或多个位与所述第二操作数的一个或多
个位的反码值进行的第二逐位逻辑AND操作,并且根据所述第二逐位逻辑AND操作的结果
修改 所述第二状态标志值。
[0020] 根据一个方面,所述第一操作数包括第一多个数据元素;所述第二操作数包括第二多个数据元素;对所述第一操作数的每一个数据元素的一个位执行所述第一逐位逻辑
AND操作,并且所述第二操作数的所述对应位是所述第二操作数的每个数据元素的相同的
各个位。
[0021] 根据一个方面,所述执行单元包括:第一组AND门,用于所述第一操作数的每一个数据元素的所述位和所述第二操作数的所述对应位;第二组AND门,用于所述第一操作数
的每一个数据元素的所述位和所述第二操作数的所述对应位的所述反码值;第一NAND门,
用于确定所述第一逐位逻辑AND操作的结果;第二NAND门,用于确定关于所述反码值的所
述第二逐位逻辑AND操作的结果。
[0022] 根据一个方面,所述数据元素可以是字节、字、双字和四字中的任何一个。
[0023] 根据一个方面,所述一个位可以是最高有效位和最低有效位中的任何一个。
[0024] 根据一个方面,所述第一状态标志为零标志,所述第二状态标志为进位标志。
[0025] 附图说明
[0026] 本发明借助于示例进行说明,但并不局限于附图中的示图。
[0027] 图1a-1c说明根据本发明可选择实施例的示例计算机系统。
[0028] 图2a-2b说明根据本发明可选择实施例的处理器的寄存器堆。
[0029] 图3说明由用于处理数据的处理器所执行的处理的至少一个实施例的流程图。
[0030] 图4说明根据本发明可选择实施例的打包数据类型。
[0031] 图5说明根据本发明至少一个实施例的寄存器内打包字节和寄存器内打包字的数据表示。
[0032] 图6说明根据本发明至少一个实施例的寄存器内打包双字和寄存器内打包四字的数据表示。
[0033] 图7a-7d是说明用于执行逻辑-比较(logical-compare)、设置-零-和-进位-标志(set-zero-and-carry-flag)操作的处理的各种实施例的流程图。
[0034] 图8a-8c说明用于执行逻辑-比较、设置-零-和-进位-标志操作的电路的可选择实施例。
[0035] 图9是说明处理器指令的操作码格式的各种实施例的框图。
[0036] 细节描述
[0037] 这里所公开的是包括在响应于单个控制信号而对多位数据执行逻辑比较操作的处理器指令中的方法、系统和电路的多个实施例。该逻辑比较操作中所涉及的数据可以是
打包或非打包数据。对于至少一个实施例而言,处理器耦合到存储器。该存储器中已经存
储了第一数据和第二数据。处理器响应于所接收的指令,对在第一数据和第二数据中的数
据元素执行逻辑比较操作。逻辑比较操作可以包括第一和第二数据的数据元素的位AND,并
且还可以包括第一数据的数据元素的反码和第二数据的数据元素的位AND。根据该逻辑比
较操作的结果,修改处理器的至少两个状态标志。这两个状态标志可以包括零标志(zero
flag)和进位标志(carry flag)。这些标志可以在体系上对应用程序可见,并且可以是更
大标志值的一部分,比如体系上可见的扩展标志(EFLAGS)寄存器。
[0038] 本发明的这些和其它实施例可以根据下面的教导实现,并且显而易见的是,可以用下面的教导进行各种修改和改变而不背离本发明宽 泛的精神和范围。相应地,说明书和
附图被看成是说明性的而不具有限制性意义,并且本发明仅根据权利要求来确定。
[0039] 定义
[0040] 为了提供用于理解本发明实施例的描述的基础,提供以下定义。位X到位Y:
[0041] 定义二进制数的子字段。例如,字节001110102(以二进制示出)的位6到位0代表子字段1110102。在二进制数后的‘2’表示二进制。因此,10002等于810,而F16等于1510。
[0042] RX:是寄存器。寄存器是任何能够存储和提供数据的设备。寄存器的进一步的功能在下面描述。寄存器不是必需与处理器包括在相同的芯片中或相同的封装中。
[0043] SRC和DEST:
[0044] 用于标识存储区域(例如,存储器地址、寄存器等)源1-i和结果1-i以及Destin:
[0045] 表示数据。
[0046] 总概
[0047] 本申请描述了包括在用于打包或非打包数据的逻辑比较操作的处理器指令中的方法、装置和系统的实施例。更具体而言,所述指令可以用于对数据进行逻辑比较,并且随
后根据该比较设置零标志和进位标志。对于至少一个实施例,使用下面表1a和表1b中所
示的单个指令执行两个逻辑比较操作。所述比较操作包括目标操作数和源操作数的逐位逻
辑AND以及目标操作数的反码与源操作数的逐位逻辑AND。表1a示出所公开的逻辑比较操
作的一个实施例的简化表示,而表1b示出所公开的逻辑比较指令的实施例的在位级别上
的示例,给出了一些样本值。对于在表1a和1b中所示出的实施例,虽然源操作数和目标操
作数中的数据可以是打包数据,但是其可以是任何数据表示,而并非必须是打包数据。在源
和/或目标操作数的数据是128-位的单个实体且由此并不将其认为是“打包”数据的情况
下,在这里将其称为“非打包(unpacked)”数据,其简单地表示该数据不需要被再分割成组
分(component)表示,并且可以被认为是单个数据值。虽然为了简化说明,表1a中的数据
被表示为32-位的值,但本领域技 术人员将认识到,在表1a和1b中所说明的概念可以应
用于任何长度的数据,包括更小的数据长度(例如,4-位、8-位和16-位的长度)以及更大
的数据长度(例如,64-位和128-位的长度)。
[0048] 表1a
[0049] 逻辑比较Dest,Source
[0050]
[0051] 表1b
[0052] 逻辑比较Dest,Source-示例值
[0053]目标操作数 10101010010101010000111100000000
源操作数 01010101101010101111000000001111
DestAND(逐位)Source 00000000000000000000000000000000
[NOT Dest]AND(逐位)Source 01010101101010101111000000001111
零标志=TRUE
进位标志=FALSE
[0054] 对于至少一个实施例,源和目标操作数的数据值可以表示打包数据。用于该实施例的源操作数和目标操作数的每个打包组分可以表示任何类型的数据。
[0055] 表2a和2b说明组分A1到A4以及B1到B4,其每个都表示32- 位单精度浮点数的二进制表示。然而,这样的说明不应当被看成是限制。本领域技术人员将认识到每个组分可
以表示任何数据,包括任何整数或浮点数据格式,以及串格式或任何其它类型的数据格式。
[0056] 表2a
[0057] 逻辑比较Dest,Source
[0058]
[0059] 表2b
[0060] 逻辑比较Dest,Source-示例值
[0061]A1:-118.625 A2:0.15625 A3:-2.125 A4:2.5
1100001011101101 0011111000100000 1100000000001000 0100000000100000
0100000000000000 0000000000000000 0000000000000000 0000000000000000
B1:-0.0 B2:0.0 B3:-0.0 B4:0.0
1000000000000000 0000000000000000 1000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
A1AND B1 A2AND B2 A3AND B3 A4AND B4
1000000000000000 0000000000000000 1000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
[NOTA1]AND B1 [NOTA2]AND B2 [NOTA3]AND B3 [NOTA4]AND B4
0000000000000000 0000000000000000 0000000000000000 0000000000000000
0000000000000000 0000000000000000 0000000000000000 0000000000000000
零标志=FALSE
进位标志=TRUE
[0062] 对于打包实施例,例如表2a和2b所说明的,可以这样来利用可选择实施例:使得在比较操作期间,仅仅对每个打包元素的特定的位进行操作。例如,在下面将结合图7c、7d、
8b和8c的讨论对至少某些这样的实施例进行讨论。
[0063] 本领域技术人员将认识到,只是为了易于说明,在表1a和2a中示出了中间值“中间结果1”和“中间结果2”,在表1b和2b中示出了二进制值的第三和第四行。虽然它们在
至少一个实施例中可以这样进行存储,但是它们在表1a到2b中的表示不应当被看成意味
着这些中间值必须存储在处理器中。可选择地,对于至少一个其它实施例,通过电路来确定
这些中间值,而不将上述值存储在存储区域中。
[0064] 在上面,表1a、1b、2a和2b描述了“逻辑比较,设置零标志和进位标志”(“LCSZC”)指令的实施例,该指令对源操作数和目标操作数的128个位中的每一个位执行逐位的AND
操作,并且还对源操作数的128个位中的每一个位与目标操作数的反码值的128个位中的
每一位执行逐位的AND操作,并且根据该AND操作的结果来设置零标志和进位标志。
[0065] 零标志和进位标志的设置支持基于逻辑比较的分支行为。对于至少一个实施例,该LCSZC指令后面可以跟着单独的分支指令,该分支指令基于所述标志中的一个或两个的
值,指示希望由处理器执行的分支操作(例如,见下面表4的伪代码)。本领域技术人员将
认识到,状态标志的设置不是分支操作可以用以利用比较结果的唯一硬件机制,也可以实
现其它机制,以便基于比较结果来支持分支。因此,虽然下面描述的具体实施例指示作为逻
辑比较的结果,可以设置零标志和进位标志,但这种支持分支的标志设置并不要求用于所
有实施例。相应地,在这里使用的术语“LCSZC”不应当被看成限制性的,原因在于零标志和
进位标志的设置并非对于所有实施例都是必需的。
[0066] 例如,对于一个可选择的实施例,分支行为可以作为在一个指令中融合了比较和分支的LCSZC指令(例如融合“测试-和-分支(test-and-branch)”指令)的变量的直接
结果来执行。对于融合“测试-和-分支”指令的至少一个实施例,作为所执行的逻辑比较
的结果,不设置任何状态标志。
[0067] 可选择的实施例可以改变在数据元素和中间结果中位的数量。而且,可选择的实施例可以只比较源值和目标值各自的某些位。此外,可选择的实施例可以改变所使用的数
据元素的数量以及所产生的中间结果的数量。例如,可选择的实施例可以包括但不局限于:
用于无符号源和有符号目标的LCSZC指令;用于有符号源和无符号目标的LCSZC指令;用
于无符号源和无符号目标的LCSZC指令;以及用于有符号源和有符号目标的LCSZC指令。
在每个示例中,所述源和目每一个都可以都包含8-位、16-位、32-位或64-位组分的打包
数据。可选择地,所述源和目标数据不是打包的,而是一个128-位的数据元素。源和目标
的打包性质不需要是对称的,并且如果源和目标都是打包的,源和目标的数据大小也无需
必须相同。
[0068] 计算机系统
[0069] 图1a示出了根据本发明的一个实施例的示例计算机系统100。计算机系统100包括用于信息通信的互连部件101。该互连部件101可以包括多分支(multi-drop)总线、一
个或多个点对点互连部件或两者的任意组合,以及任何其它通信硬件和/或软件。
[0070] 图1a示出了用于处理信息的、与互连部件101耦合的处理器109。处理器109表示任何架构类型的中央处理单元,包括CISC或RISC类型的架构。
[0071] 计算机系统100还包括随机访问存储器(RAM)或其它动态存储设备(称为主存储器104),其耦合到互连部件101,用于存储信息和由处理器109执行的指令。主存储器104
还可以用于在处理器109执行指令期间存储临时变量或其它中间信息。
[0072] 计算机系统100还包括只读存储器(ROM)106和/或其它静态存储设备,其耦合到互连部件101,用于为处理器109存储静态信息和指令。数据存储设备107耦合到互连部件
101,用于存储信息和指令。
[0073] 图1a还示出:处理器109包括执行单元130、寄存器堆(registerfile)150、高速缓存160、解码器165和内部互连部件170。当然,处理器109包括不是理解本发明所必需
的其他电路。
[0074] 解码器165用于对处理器109接收的指令进行解码,而执行单元 130用于执行处理器109接收的指令。如这里所述,除了识别典型地由通用处理器执行的指令之外,解码器
165和执行单元130还识别用于执行逻辑-比较-和-设置-零-和-进位-标志(LCSZC)
操作的指令。解码器165和执行单元130识别用于对打包数据和非打包数据执行LCSZC操
作的指令。
[0075] 执行单元130通过内部互连部件170耦合到寄存器堆150。而且,内部互连部件170无需必须是多分支总线,在可选择的实施例中可以是点对点互连部件或其它类型的通
信路径。
[0076] 一个(或多个)寄存器堆150表示处理器109中用于存储信息(包括数据)的存储区域。可以理解的是,本发明的一个方面是用于对打包或非打包数据执行LCSZC操作的、
所描述指令的实施例。根据本发明的这个方面,用于存储数据的存储区域不是关键的。然
而,寄存器堆150的实施例在后面参考图2a-2b进行描述。
[0077] 执行单元130耦合到高速缓存160和解码器165。高速缓存160用于对例如来自主存储器104的数据和/或控制信号进行高速缓存。解码器165用于将处理器109接收的
指令解码成控制信号和/或微代码入口点。可以将这些控制信号和/或微代码入口点从解
码器165传送给执行单元130。
[0078] 执行单元130响应于这些控制信号和/或微代码入口点,执行适当的操作。例如,如果接收到LCSZC指令,则解码器165使执行单元130执行所要求的比较逻辑。对于至少
一些实施例(比如那些没有实现融合“测试和分支”操作的实施例),执行单元130可以相
应地设置零标志和进位标志(例如,见逻辑比较电路145)。对于这样的实施例,处理器109
的分支单元(未示出)可以在随后的指示目标代码位置的分支指令的执行期间使用这些标
志。
[0079] 可选择地,执行单元130本身可以包括基于逻辑比较来影响分支的分支电路(未示出)。对于这样的实施例,由LCSZC指令所提供的“分支支持”是跳转到指定目标代码位
置的控制跳转,而不是控制标志的设置。对于至少一个实施例,执行跳转或“分支”的分支
电路可以是逻辑比较电路145的一部分。
[0080] 可以使用任意数量的不同机制(例如,查寻表、硬件实现、PLA 等)来实现解码器165。因此,虽然解码器165和执行单元130对各种指令的执行在这里可以由一系列if/then
语句表示,但可以理解的是,指令的执行并不要求这些if/then语句的串行处理。相反地,
在逻辑上执行该if/then处理的任何机制均认为是在本发明的范围内。
[0081] 图1a还示出了数据存储设备107(例如,磁盘、光盘、和/或其它机器可读介质),其可以耦合到计算机系统100。另外,数据存储设备107示出为包括由处理器109执行的代
码195。代码195可以包括LCSZC指令142的一个或多个实施例,并且可以将其编写为:使
处理器109用一个(或多个)LCSZC指令142执行用于任意数量的目的(例如,运动视频压
缩/解压缩、图像滤波、音频信号压缩、滤波或合成、调制/解调等)的位测试。
[0082] 计算机系统100还可以通过互连部件101耦合到用于为计算机用户显示信息的显示设备121。显示设备121可以包括帧缓冲器、专用图形渲染设备、液晶显示器(LCD)和/
或平板显示器。
[0083] 可以将包括字母数字和其它键的输入设备122耦合到互连部件101,用于传递信息和命令选择给处理器109。另一种类型的用户输入设备是光标控制器123,比如鼠标、轨
迹球、笔、触摸屏或光标方向键,用于传递方向信息和命令选择给处理器109,并用于控制显
示设备121上的光标移动。这些输入设备典型地在两个轴(第一轴(例如,x)和第二轴
(例如,y))上具有两个自由度,这允许该设备在平面上指定位置。然而,本发明不应当局限
于只具有两个自由度的输入设备。
[0084] 可以耦合到互连部件101的另一个设备是可以用来在介质(比如纸、胶卷或类似的介质类型)上打印指令、数据或其它信息的硬拷贝设备124。此外,计算机系统100可以
耦合到用于声音记录和/或重放的设备125,比如用来记录信息的、耦合到麦克风的音频数
字化仪。此外,设备125可以包括用来播放数字化声音的、耦合到数模(D/A)转换器的扬声
器。
[0085] 计算机系统100可以是计算机网络(例如,LAN)中的终端。从而计算机系统100可以是计算机网络的计算机子系统。计算机系统100可选择性地包括视频数字化设备126
和/或通信设备190(例如, 提供与外部设备或网络之间的通信的串行通信芯片、无线接
口、以太网芯片或调制解调器)。视频数字化设备126可以用于拍摄视频图像,视频图像可
以被传送到计算机网络上的其它设备。
[0086] 对于至少一个实施例,处理器109支持与现存的由加利福利亚Santa Clara的Intel公司制造的处理器(比如,例如,Intel Pentium 处理器、Intel Pentium
Pro处理器、Intel Pentium II处理器、Intel Pentium III处理器、Intel
Pentium 4处理器、Intel Itanium 处理器、Intel Itanium 2处理器或
Intel CoreTM Duo处理器)使用的指令集相兼容的指令集。由此,处理器109能够支持
除了本发明的操作之外的现存的处理器操作。处理器109还可以适于以一种或多种处理技
术制造,并且通过足够详细地在机器可读介质上对其进行表示,可以适于方便所述制造。虽
然下面描述的本发明与基于x86的指令集相结合,但可选择的实施例可以将本发明与其它
指令集相结合。例如,本发明可以与使用与基于x86的指令集不同的指令集的64-位处理
器相结合。
[0087] 图1b示出了用于实现本发明原理的数据处理系统102的可选择实施例。数据处理TM
系统102的一个实施例是采用Intel XScale 技术的应用处理器。本领域技术人员易于理
解的是,这里所描述的实施例可以与可选择的处理系统一起使用,而不背离本发明的范围。
[0088] 计算机系统102包括能够执行LCSZC操作的处理内核110。对于一个实施例,处理内核110表示任何架构类型的处理单元,包括但不局限于:CISC、RISC或VLIW类型的架构。
处理内核110也可以适于采用一种或多种处理技术制造,并且通过足够详细地在机器可读
介质上对其进行表示,可以适于方便所述制造。
[0089] 处理内核110包括执行单元130、一组寄存器堆150和解码器165。处理内核110还包括对于理解本发明所不需要的其他电路(未示出)。
[0090] 执行单元130用于执行由处理内核110接收的指令。除了识别典型的处理器指令外,执行单元130还识别用于对打包和非打包数据格式执行LCSZC操作的指令。由解码器
165和执行单元130所识别的指令集可以包括一个或多个用于LCSZC操作的指令,还可以包
括其 它打包指令。
[0091] 执行单元130通过内部总线(再次论之,其可以是包括多分支总线、点对点互连部件等的任何类型的通信路径)耦合到寄存器堆150。寄存器堆150表示处理内核110的用
于存储信息(包括数据)的存储区域。如前所述,可以理解的是,用于存储数据的存储区域
不是关键的。执行单元130耦合到解码器165。解码器165用于将处理内核110接收的指
令解码成控制信号和/或微代码入口点。对这些控制信号和/或微代码入口点进行响应。
这些控制信号和/或微代码入口点可以被传送到执行单元130。执行单元130可以响应于
所接收的控制信号和/或微代码入口点,来执行适当操作。对于至少一个实施例,例如,执
行单元130可以执行这里描述的逻辑比较,并且还可以设置这里讨论的状态标志或到指定
代码位置的分支,或两者都设置。
[0092] 处理内核110与总线214耦合,以便与其它各种系统设备进行通信,这些系统设备包括但不局限于:例如,同步动态随机访问存储器(SDRAM)控制器271、静态随机访问存储
器(SRAM)控制器272、猝发式闪速存储器接口(burst flash memory interface)273、个人
计算机存储卡国际协会(PCMCIA)/小型闪存(compact flash,CF)卡控制器274、液晶显示
器(LCD)控制器275、直接存储器访问(DMA)控制器276和可选择总线主接口277。
[0093] 对于至少一个实施例,数据处理系统102还可以包括用于通过I/O总线295与各种I/O设备通信的I/O桥290。这样的I/O设备可以包括但不局限于:例如,通用异步接收
器/发送器(UART)291、通用串行总线(USB)292、蓝牙无线UART293以及I/O扩展接口294。
如同上面讨论的其它总线,I/O总线295可以是包括多分支总线、点对点互连部件等的任何
类型的通信路径。
[0094] 数据处理系统102的至少一个实施例为移动电话提供网络和/或无线通信以及能够对打包和非打包数据执行LCSZC操作的处理内核110。处理内核110可以用以下进行编
程:包括离散变换、滤波或卷积在内的各种音频、视频、图像以及通信算法;诸如颜色空间
变换、视频编码运动估计或视频解码运动补偿之类的压缩/解压缩技术;以及诸如脉冲编
码调制(PCM)之类的调制/解调(MODEM)功能进 行编程。
[0095] 图1c示出了能够对打包和非打包数据执行LCSZC操作的数据处理系统103的可选择实施例。根据一个可选择实施例,数据处理系统103可以包括芯片封装310,其包含主
处理器224以及一个或多个协处理器226。附加的协处理器226的可选择性在图1c中用虚
线表示。例如,一个或多个协处理器226可以是能够执行SIMD指令的图形协处理器。
[0096] 图1c示出:数据处理系统103还可以包括高速缓冲存储器278和输入/输出系统265,两者都耦合到芯片封装310。输入/输出系统295可以选择性地耦合到无线接口296。
[0097] 协处理器226能够执行通用计算操作,并且还能够执行SIMD操作。对于至少一个实施例,协处理器226能够对打包和非打包数据执行LCSZC操作。
[0098] 对于至少一个实施例,协处理器226包括执行单元130和一个(或多个)寄存器堆209。主处理器224的至少一个实施例包括用于对由执行单元130所执行的指令集(包
括LCSZC指令)中的指令进行识别和解码的解码器165。对于可选择实施例,协处理器226
还包括用于对指令集(包括LCSZC指令)中的指令进行解码的解码器166的至少一部分。
数据处理系统103还包括对理解本发明不是必需的其他电路(未示出)。
[0099] 在运行中,主处理器224执行用于控制通用类型的数据处理操作的数据处理指令流,所述通用类型的数据处理操作包括与高速缓冲存储器278和输入/输出系统295的交
互。嵌入在数据处理指令流中的是协处理器指令。主处理器224的解码器165将这些协处
理器指令识别为应当由附加的协处理器226执行的类型。相应地,主处理器224在协处理
器互连部件236上发布这些协处理器指令(或表示协处理器指令的控制信号),任何附加
的一个(或多个)协处理器从协处理器互连部件236上接收这些指令(或信号)。对于图
1c所示的单个协处理器的实施例,协处理器226接受并执行任何发给它的所接收的协处理
器指令。协处理器互连部件可以是包括多分支总线、点对点互连部件等的任何类型的通信
路径。
[0100] 数据可以通过无线接口296接收,以便由协处理器指令进行处理。对于一个示例,可以以数字信号的形式接收语音通信,所述数字信号可以由协处理器指令进行处理以便重
新生成表示语音通信的数字音频采样。对于另一示例,可以以数字比特流的形式接收压缩
的音频和/或视频,所述数字比特流可以由协处理器指令处理以便重新生成数字音频采样
和/或运动视频帧。
[0101] 对于至少一个可选择实施例,主处理器224和协处理器226可以集成到包括执行单元130、一个(或多个)寄存器堆209以及解码器165在内的单个处理内核中,其中,解码
器165用来识别由执行单元130执行的指令集(包括LCSZC指令)中的多个指令。
[0102] 图2a示出了根据本发明的一个实施例的处理器的寄存器堆。寄存器堆150可以用于存储信息,包括:控制/状态信息、整数数据、浮点数据和打包数据。本领域技术人员将
认识到,前述的信息和数据列表不是穷举的、全包含的列表。
[0103] 对于图2a所示的实施例,寄存器堆150包括整数寄存器201、寄存器209、状态寄存器208和指令指针寄存器211。状态寄存器208指示处理器109的状态,并且可以包括诸
如零标志和进位标志的各种状态寄存器。指令指针寄存器211存储将要执行的下一个指令
的地址。整数寄存器201、寄存器209、状态寄存器208和指令指针寄存器211都耦合到内
部互连部件170。还可以将其他的寄存器耦合到内部互连部件170。内部互连部件170可
以是多分支总线,但不需要必须如此。可替换地,内部互连部件170可以是包括点对点互连
部件在内的任何其它类型的通信路径。
[0104] 对于一个实施例,寄存器209可以既用于打包数据又用于浮点数据。在这样的一个实施例中,在任何给定时刻,处理器109把寄存器209看成是栈参考浮点寄存器(stack
referenced floating point register)或非栈参考打包数据寄存器。在该实施例中,包含
了一种机制,其允许处理器109在将寄存器209作为栈参考浮点寄存器进行操作和将寄存
器209作为非栈参考打包数据寄存器进行操作之间进行切换。在另一个这样的实施例中,
处理器109可以同时将寄存器209作为栈参考浮点寄存器和非栈参考打包数据寄存器进行
操作。在另一个实施例 中,作为另一示例,这些寄存器可以用来存储整数数据。
[0105] 当然,可选择的实施例可以实现为包括更多或更少的寄存器组。例如,可选择的实施例可以包括用于存储浮点数据的独立的浮点寄存器组。作为另一示例,可选择的实施例
可以包括每个都用于存储控制/状态信息的第一组寄存器以及每个都能够存储整数、浮点
数和打包数据的第二组寄存器。作为澄清,实施例的寄存器不应当在意思上限制于特殊类
型的电路。相反地,实施例的寄存器只需要能够存储和提供数据并执行这里描述的功能。
[0106] 可以实现各种寄存器组(例如,整数寄存器201、寄存器209)以包括不同数量的寄存器和/或不同大小的寄存器。例如,在一个实施例中,整数寄存器201实现为存储32个
位,而寄存器209实现为存储80个位(全部80个位都用于存储浮点数据,而只有64个位
用于打包数据)。此外,寄存器209可以包含8个寄存器,R0212a到R7212h。R1212b、R2212c
和R3212d是寄存器209中的单个寄存器的示例。寄存器209中寄存器的32个位可以被移
动到整数寄存器201中的整数寄存器中。类似地,整数寄存器中的值能够被移动到寄存器
209中的寄存器的32个位中。在另一实施例中,每个整数寄存器201都包括64个位,并且
数据的64个位可以在整数寄存器201和寄存器209之间移动。在另一可选择实施例中,每
个寄存器209都包括64个位并且寄存器209包括16个寄存器。在另一可选择实施例中,
寄存器209包括32个寄存器。
[0107] 图2b示出了根据本发明的一个可选择实施例的处理器的寄存器堆。寄存器堆150可以用于存储信息,包括:控制/状态信息、整数数据、浮点数据和打包数据。在图2b所示
的实施例中,寄存器堆150包括整数寄存器201、寄存器209、状态寄存器208、扩展寄存器
210和指令指针寄存器211。状态寄存器208、指令指针寄存器211、整数寄存器201、寄存器
209全部都耦合到内部互连部件170。相应地,扩展寄存器210也耦合到内部互连部件170。
内部互连部件170可以是多分支总线,但不需要必须如此。可替换地,内部互连部件170可
以是包括点对点互连部件在内的任何其它类型的通信路径。
[0108] 对于至少一个实施例,扩展寄存器210既用于打包的整数数据也 用于打包的浮点数据。对于可选择的实施例,扩展寄存器210可用于标量数据(scalar data)、打包的布
尔数据、打包的整数数据和/或打包的浮点数据。当然,可选择的实施例可以实现为包含更
多或更少的寄存器组、在每组中有更多或更少的寄存器或在每个寄存器中的更多或更少的
数据存储位,而不脱离本发明更宽的范围。
[0109] 对于至少一个实施例,整数寄存器201实现为存储32个位,寄存器209实现为存储80个位(全部80个位都用于存储浮点数据,而只有64个位用于打包数据),并且扩展
寄存器210实现为存储128个位。此外,扩展寄存器210可以包括8个寄存器XR0 213a到
XR7 213h。XR0 213a、XR1 213b和XR2 213c是寄存器210中的单个寄存器的示例。对于另
一实施例,每个整数寄存器201包括64个位,每个扩展寄存器210包括64个位,而扩展寄
存器210包括16个寄存器。对于一个实施例,扩展寄存器210的两个寄存器可以作为一个
“对”进行操作。对于另一可选择的实施例,扩展寄存器210包括32个寄存器。
[0110] 图3示出了根据本发明的一个实施例,用于操作数据的处理300的一个实施例的流程图。也就是说,图3示出了例如对打包数据执行LCSZC操作、对非打包数据执行LCSZC
操作或执行一些其它操作时,由处理器109(例如,见图1a)进行的处理。这里所讨论的处
理300和其它处理由处理块来执行,所述处理块可以包括专用硬件或者或可由通用机器或
由专用机器或由它们的组合执行的软件或固件操作码。
[0111] 图3示出:用于该方法的处理在“开始”处开始,并进行到处理块301。在处理块301,解码器165(例如,见图1a)接收来自高速缓存160(例如,见图1a)或互连部件101(例
如,见图1a)的控制信号。对于至少一个实施例,在块301接收的控制信号可以是通常称为
软件“指令”的控制信号类型。解码器165将控制信号解码以确定将要执行的操作。处理
从处理块301进行到处理块302。
[0112] 在处理块302,解码器165访问寄存器堆150(图1a)或存储器中的单元(例如,见图1a的主存储器104或高速缓冲存储器160)。根据控制信号中指定的寄存器地址,来访
问寄存器堆150中的寄存器或存储器中的存储单元。例如,用于操作的控制信号能够包含
SRC1、SRC2和DEST寄存器地址。SRC1是第一源寄存器的地址。SRC2是 第二源寄存器的
地址。在某些情况下,SRC2地址是可选的,因为并非所有操作都要求两个源地址。如果对
于一个操作没有要求SRC2地址,则仅使用SRC1地址。DEST是存储结果数据的目标寄存器
的地址。对于至少一个实施例,在由解码器165识别的至少一个控制信号中,SRC1或SRC2
也可以用作DEST。
[0113] 在相应寄存器中所存储的数据分别称为Source1、Source2和Result。在一个实施例中,这些数据中的每一个可以是64位长度。对于可选择的实施例,这些数据中的一个
或多个可以是其它长度,比如128位长度。
[0114] 对于本发明的另一个实施例,SRC1、SRC2和DEST中的任何一个或全部能够确定在处理器109(图1a)或处理内核110(图1b)的可寻址存储空间中的存储单元。例如,SRC1
可以标识主存储器104中的存储单元,而SRC2标识在整数寄存器201中的第一寄存器,而
DEST标识寄存器209中的第二寄存器。为了简化这里的描述,本发明将描述与寄存器堆150
有关的访问。然而,本领域技术人员将认识到,替代地,这些所描述的访问也可以使用于存
储器。
[0115] 处理从块302进行到处理块303。在处理块303,执行单元130(例如,见图1a)能够对所访问的数据执行操作。
[0116] 处理从处理块303进行到处理块304。在处理块304,根据控制信号的要求,将结果存储回寄存器堆150或存储器。然后处理在“停止”处结束。
[0117] 数据存储格式
[0118] 图4示出了根据本发明一个实施例的多个打包数据类型。示出了四个打包数据和一个非打包数据格式,包括打包字节421、打包半(packed half)422、打包单(packed
single)423、打包双(packed double)424和非打包双四字412。
[0119] 对于至少一个实施例,打包字节格式421是包括16个数据元素(B0-B15)的128位长。每个数据元素(B0-B15)是一个字节(例如,8位)长。
[0120] 对于至少一个实施例,打包半格式422是包括8个数据元素(Half0到Half7)的128位长。每个数据元素(Half0到Half7)可以 保存16位的信息。可选择地,这些16-位
的数据元素中的每一个可以被称为“半字”或“短字”,或简单地称为“字”。
[0121] 对于至少一个实施例,打包单格式423可以是128位长并且可以保存4个423数据元素(Single0到Single3)。数据元素(Single0到Single3)中的每一个可以保存32位
的信息。可选择地,每一个32-位数据元素可以被称为“dword”或“双字”。每个数据元素
(Single0到Single3)可以表示例如32-位的单精度浮点值,因此称作“打包单”格式。
[0122] 对于至少一个实施例,打包双格式424可以是128位长并且可以保存两个数据元素。打包双格式424的每个数据元素(Double0、Double1)可以保存64-位的信息。可
选择地,每个64-位数据元素可以被称为“qword”或“四字(quadword)”。每个数据元素
(Double0、Double1)可以表示例如64-位的双精度浮点值,因此称作“打包双”格式。
[0123] 非打包双四字格式412可以保存多达128位的数据。该数据不需要必须是打包数据。例如,对于至少一个实施例,非打包双四字格式412的128位的信息可以表示单个标量
数据,比如字符、整数、浮点值或二进制的位-掩码值。可选择地,非打包双四字格式412的
128位可以表示多个不相干的位(比如状态寄存器值,其中每一位或位组表示不同标志)等
等的集合。
[0124] 对于本发明的至少一个实施例,打包单格式423和打包双格式424的数据元素可以是如上所指示的打包的浮点数据元素。在本发明的可选择实施例中,打包单格式423和
打包双格式424的数据元素可以是打包整数数据元素、打包布尔数据元素或打包浮点数据
元素。对于本发明的另一可选择的实施例,打包字节格式421、打包半格式422、打包单格
式423和打包双格式424的数据元素可以是打包整数数据元素或打包布尔数据元素。对
于本发明的可选择实施例,并非允许或支持所有的打包字节数据格式421、打包半数据格式
422、打包单数据格式423和打包双数据格式424。
[0125] 图5和6示出了根据本发明的至少一个实施例的寄存器内的打包数据存储表示。
[0126] 图5分别示出了无符号和有符号打包字节的寄存器内格式510和511。无符号打包字节的寄存器内表示510示出了例如在128-位的扩展寄存器XR0 213a到XR7 213h(例
如,见图2b)其中之一中的无符号打包字节数据的存储。将16个字节数据元素中每一个的
信息存储在字节0的位7到位0、字节1的位15到位8、字节2的位23到位16、字节3的位
31到位24、字节4的位39到位32、字节5的位47到位40、字节6的位55到位48、字节7
的位63到位56、字节8的位71到位64、字节9的位79到位72、字节10的位87到位80、
字节11的位95到位88、字节12的位103到位96、字节13的位111到位104、字节14的位
119到位112、以及字节15的位127到位120。
[0127] 因此,在寄存器中所有可利用的位都被使用。该存储安排增加了处理器的存储效率。而且,使用被访问的16个数据元素,现在可以同时对16个数据元素执行一个操作。
[0128] 有符号打包字节的寄存器内表示511示出了有符号打包字节的存储。注意,每个字节数据元素的第8位(MSB)是符号指示器(“s”)。
[0129] 图5还分别示出了无符号和有符号打包字的寄存器内表示512和513。
[0130] 无符号打包字的寄存器内表示512示出了扩展寄存器210怎样存储8个字(每个16位)的数据元素。字0存储在寄存器的位15到位0。字1存储在寄存器的位31到位16。
字2存储在寄存器的位47到位32。字3存储在寄存器的位63到位48。字4存储在寄存
器的位79到位64。字5存储在寄存器的位95到位80。字6存储在寄存器的位111到位
96。字7存储在寄存器的位127到位112。
[0131] 有符号打包字的寄存器内表示513类似于无符号打包字的寄存器内表示512。注意,符号位(“s”)存储在每个字数据元素的第16位(MSB)。
[0132] 图6分别示出了无符号和有符号打包双字的寄存器内格式514和515。无符号打包双字的寄存器内表示514示出了扩展寄存器210怎样存储4个双字(每个32位)的数
据元素。双字0存储在寄存器的位31到位0。双字1存储在寄存器的位63到位32。双字
2存储在寄存器的位95到位64。双字3存储在寄存器的位127到位96。
[0133] 有符号打包双字的寄存器内表示515类似于无符号打包双字的寄存器内表示514。注意,符号位(“s”)是每个双字数据元素的第32位(MSB)。
[0134] 图6还分别示出了无符号和有符号打包四字的寄存器内格式516和517。无符号打包四字的寄存器内表示516示出了扩展寄存器210怎样存储2个四字(每个64位)的
数据元素。四字0存储在寄存器的位63到位0。四字1存储在寄存器的位127到位64。
[0135] 有符号打包四字的寄存器内表示517类似于无符号打包四字的寄存器内表示516。注意,符号位(“s”)是每个四字数据元素的第64位(MSB)。
[0136] 一个(或多小)逻辑比较-和-交换、设置-零-和-进位-标志操作
[0137] 对于本发明的至少一个实施例,SRC1寄存器可以保存打包数据或非打包双四字数据(Source1),并且DEST寄存器也可以保存打包数据或非打包双四字数据(Dest)。对于至
少一个实施例,在DEST寄存器中的Dest值或在SRC1寄存器中的Source1值可以是要用作
逐位掩码值的双四字非打包数据。
[0138] 通常,在LCSZC指令的第一步中,执行两个比较操作。通过对Source1中的每个位与Dest的相应位执行独立的逻辑比较(逐位AND操作),产生第一中间结果。通过对
Source1中的每个位与Dest的相应位的反码执行独立的逻辑比较(逐位AND操作),产生
第二中间结果。这些中间结果可以存储在临时存储单元(比如,例如,寄存器)或者可以根
本不由处理器存储。
[0139] 图7a是根据本发明的至少一个实施例的执行LCSZC操作的一般方法700的流程图。这里所公开的处理700和其它处理由多个处理块来执行,所述处理块可以包括专用硬
件或可由通用机器或由专用机器或由它们的组合执行的软件或固件操作码。在下面的段落
中,将参考图1a讨论图7a到7d。
[0140] 图7a示出了方法700开始于“开始”处,并且进行到处理块701。在处理块701,解码器165对处理器109接收的控制信号进行解码。因此,解码器165对LCSZC指令的操
作码进行解码。然后处理从处理块701进行到处理块702。
[0141] 在处理块702,给定在指令中编码的SRC1和DEST地址,解码器165通过内部总线170访问寄存器堆150中的寄存器209。对于至少一个实施例,每一个在指令中的被编
码的地址都指示扩展寄存器(例如,见图2b的扩展寄存器210)。对于该实施例,在块702
中访问所指示的扩展寄存器210,以便为执行单元130提供存储在SRC1寄存器中的数据
(Source1)以及存储在DEST寄存器中的数据(Dest)。对于至少一个实施例,扩展寄存器
210通过内部总线170将数据传递给执行单元130。
[0142] 处理从处理块702进行到处理块703。在处理块703中,解码器165使执行单元130能够执行该指令。对于至少一个实施例,通过给执行单元发送一个或多个控制信号以指
示所希望的操作(LCZCS),来执行该使能703。处理从块703进行到处理块714和715。虽
然块714和715被并列示出,但本领域技术人员将认识到,只要它们在同一周期或周期组中
执行,这样的操作就需要被严格同时地执行,并且对于至少一个可选择的实施例,块714和
715的处理可以串行执行。因此,不同的实施例可以以并行、串行、或串行与并行操作的某种
组合来执行块714和715的处理。
[0143] 在处理块714,执行以下内容。所有或一些Source1位与Dest值的相同的各个位进行逻辑AND。类似地,在处理块715中,所有或一些Source1位与Dest值的相同的各个位
的反码进行逻辑AND。
[0144] 处理从块714进行到块720。处理从块715进行到块721。
[0145] 在处理块720中,基于在处理块714中执行的比较结果,修改处理器的状态。类似地,在处理块721中,基于在处理块715中执行的比较结果,修改处理器的状态。本领域技
术人员将注意到,图7a所说明的方法700是非破坏性的,原因在于作为LCSZC操作的结果
Source1和Dest操作数的值都没有被修改。替代地,零标志在块720中被修改而进位标志
在块721中被修改。
[0146] 在处理块720中,如果中间结果1的全部位都等于0(例如,逻辑低值),则将零标志的值设置为true值(例如,逻辑高值)。然而,如果即使是中间结果1中的一个位是逻辑
高值,也会在块720中将零标志设置为false值(例如,逻辑低值)。
[0147] 在处理块721中,如果中间结果2的全部位都等于0(例如,逻辑低值),则将进位标志的值设置为true值(例如,逻辑高值)。然而,如果即使是中间结果2中的一个位是逻
辑高值,以会在块721中将进位标志设置为false值(例如,逻辑低值)。
[0148] 可以理解的是,处理700的可选择实施例可以仅实现处理块714和720,而不实现处理块715和721,或者只实现处理块715和721,而不实现处理块714和720。同样可以理
解的是,处理700的可选择实施例可以实现支持LCSZC指令的其他变形的其他处理块。
[0149] 处理可以从块720和721选择性地进行到块722。在块722中,可以修改处理器内的其它状态位。例如,对于至少一个实施例,这些状态位可以包括一个或多个其它在架构
上可见的状态标志值。这些标志可以是1-位或2-位值并且可以包括:奇偶(PF)、辅助进
位(AF)、符号(SF)、陷阱(TF)、中断使能/无效(IF)、方向(DF)、溢出(OF)、I/O特权等级
(IOPL)、嵌套任务(NT)、恢复(RF)、虚拟8086模式(VM)、对齐检查(AC)、虚拟中断(VIF)、
虚拟未决中断(FIP)和CPU标识符(ID)标志等。当然,前述的具体标志的列表目的只是说
明;其它实施例可以包括更少、更多或不同的标志。
[0150] 从可选择块722,处理结束于“结束”处。对于不包括可选择块722的实施例,处理在块720和721的处理后就结束于“结束”处。
[0151] 图7b示出了在图7a中所示的一般方法700的至少一个具体实施例700b的流程图。对于图7b所示的具体实施例700b,对128位长并且可以是或可以不是打包数据的
Source1和Dest数据值,执行LCSZC操作。(当然,本领域技术人员将认识到,也可以对其
它长度的数据值执行图7b中所示出的操作,包括小于或大于128位的数据值)。
[0152] 方法700b的处理块701b到703b的操作本质上与上面结合图7a中所示的方法700所描述的处理块701到703的操作相同。当解码器165在块703b中使执行单元130执
行指令时,该指令是用于对Source1和Dest值的各个位执行逻辑AND比较的LCSZC指令。
(例如,见图6中所示的有符号打包双字的寄存器内表示515)。这样的指令可以用可由应
用程序程序员使用的助记忆指令(比如“PTEST”)称谓。处 理从块703b进行到块714b和
715b。同样,块714b和715b可以并行执行,但不需要必须如此。
[0153] 处理从处理块703b进行到处理块714b和715b。应当再次注意,如上结合图7a的处理块714和715所指示的,虽然在图7b中示出的块714b和715b被并行执行,但本发明
应当被解释为在这方面不受限制。替代地,不同实施例可以以并行、串行、或串行与并行操
作的某种组合来执行块714b和715b的处理。
[0154] 在处理块714b中,执行以下内容。Source1的全部位与Dest值的相同的各个位进行逻辑AND。也就是说,将Source1[127:0]与Dest[127:0]的各个位的逐位AND操作的结
果分配给中间结果1的位[127:0]。
[0155] 类似地,在处理块715b中,Source1的全部位与Dest值的相同的各个位的反码进行逻辑AND。也就是说,将Source1[127:0]的位与Dest[127:0]的各个位的反码的逐位AND
操作的结果分配给中间结果2的位[127:0]。
[0156] 处理从块714b进行到块720b。处理从块715b进行到块721b。
[0157] 在处理块720b中,基于处理块714b中执行的比较的结果,修改处理器的状态。类似地,在处理块721b中,基于处理块715b中执行的比较的结果,修改处理器的状态。本领
域技术人员将注意到,图7b中所示的方法700b是非破坏性的,原因在于作为LCSZC操作的
结果,Source1和Dest操作数的值都没有被修改。可替换地,零标志在块720b中被修改而
进位标志在块721b中被修改。
[0158] 在处理块720b中,如果中间结果1的全部位(例如,中间结果1的位[127:0])都等于0(例如,逻辑低值),则将零标志的值设置为true值(例如,逻辑高值)。然而,如果
即使是中间结果1中的一个位是逻辑高值,也会在块720b中将零标志设置为false值(例
如,逻辑低值)。
[0159] 在处理块721b中,如果中间结果2的全部位(例如,中间结果2的位[127:0])都等于0(例如,逻辑低值),则将进位标志的值设置为true值(例如,逻辑高值)。然而,如
果即使是中间结果2中的一个位是逻辑高值,也会在块721b中将进位标志设置为false值
(例如, 逻辑低值)。
[0160] 可以理解的是,处理700b的可选择实施例可以仅实现处理块714b和720b,而不实现处理块715b和721b,或者只实现处理块715b和721b,而不实现处理块714b和720b。
同样可以理解的是,处理700b的可选择实施例可以实现支持LCSZC指令的其他变形的其他
处理块。
[0161] 处理可以从块720b和721b选择性地进行到块722b。在块722b中,可以修改处理器内的其它状态位。对于图7b中所示的实施例,在块722b中,给AF(辅助进位)、OF(溢
出)、PF(奇偶)和SF(符号)标志分配逻辑低值。
[0162] 从可选择块722b,处理结束于“结束”处。对于不包括可选择块722b的实施例,处理在块720b和721b的处理后就结束于“结束”处。
[0163] 应当理解的是,处理块714、714b、715或715b的可选择实施例可以对有符号数据元素或无符号数据元素或两者的组合执行逻辑比较操作。
[0164] 图7c示出了在图7a中所示的一般方法700的至少一个可选择的具体实施例700c的流程图。对于图7c中所示的具体实施例700c,对128位长的Source1和Dest数据值执行
LCSZC操作。源操作数或目标操作数或两者都可以是打包的,原因在于源操作数的128-位
数据值表示4个打包的32-位(“双字”)数据元素。例如,数据元素的每一个都可以表示
32位的有符号单精度浮点值。
[0165] 当然,本领域技术人员将认识到,也可以对包括小于或大于128位的数据值在内的其它长度的数据值以及包括字节(8位)和/或短字(16位)在内的其它大小的数据元
素,执行图7c中所示的操作。
[0166] 方法700c的处理块701c到703c的操作本质上与上面结合图7a中所示的方法700所描述的处理块701到703的操作相同。前述语句的例外是,对于处理块703c,当解码
器165使执行单元130能够执行指令时,该指令是用于对Source1和Destination值的每
个32-位双字的MSB执行逻辑AND比较的LCSZC指令。(例如,见图6中所示的有符号打
包双字的寄存器内表示515)。这样的指令可以用可由 应用程序程序员使用的助记忆指令
(比如“TESTPS”)称谓,其中“PS”表示打包的单精度数据元素。
[0167] 处理从块703c进行到块714c和715c。同样,块714c和715c可以并行执行,但不需要必须如此。
[0168] 在处理块714c中,执行以下内容。Source1的全部位与Dest值的相同的各个位进行逻辑AND。也就是说,将Source1[127:0]与Dest[127:0]的各个位的逐位AND操作的结
果分配给中间结果1的位[127:0]。
[0169] 类似地,在处理块715c中,Source1的全部位与Dest值的相同的各位的反码进行逻辑AND。也就是说,将Source1[127:0]的位与Dest[127:0]的各个位的反码的逐位AND
操作的结果分配给中间结果2的位[127:0]。
[0170] 处理从块714c进行到块720c。处理从块715c进行到块721c。
[0171] 在块720c中,确定第一中间值(中间值1)的每个32-位双字的MSB。如果中间值1的位127、95、63和31等于0,则在块720c中将零标志设置为逻辑高值。否则,在块720c
中将零标志设置为逻辑低值。
[0172] 类似地,在块721c中,确定第二中间值(中间值2)的每个32-位双字的MSB。如果中间值2的位127、95、63和31等于0,则在块721c中将进位标志设置为逻辑高值。否
则,在块721c中将进位标志设置为逻辑低值。作为方法700c的处理结果,源寄存器(SRC1)
没有被修改。
[0173] 处理从块720c和721c进行到“结束”或进行到可选择处理块722c。在块722c中,可以修改处理器内的其它状态位。对于图7c所示的实施例,在块722c中,给AF(辅助
进位)、OF(溢出)、PF(奇偶)和SF(符号)标志分配逻辑低值。
[0174] 对于不包括可选择块722c的实施例,处理在块720c和721c的处理后就结束于“结束”处。对于包括可选择块722c的实施例,处理在处理块722c完成之后结束。
[0175] 图7d示出了在图7a中所示的一般方法700的至少一个可选择的具体实施例700d的流程图。对于图7d中所示的具体实施例700d, 对128位长的Source1和Dest数据值执行
LCSZC操作。源操作数或目标操作数或两者都可以是打包的,原因在于源操作数的128-位
数据值表示两个打包的64-位数据元素。例如,数据元素的每一个都可以表示64位有符号
双精度浮点值。
[0176] 当然,本领域技术人员将认识到,也可以对包括小于或大于128位的数据值在内的其它长度的数据值以及包括字节(8位)和/或短字(16位)在内的其它大小的数据元
素,执行图7d中所示的操作。
[0177] 方法700d的处理块701d到703d的操作本质上与上面结合图7a中所示的方法700所描述的处理块701到703的操作相同。前述语句的例外是,对于处理块703d,当解码
器165使执行单元130能够执行指令时,该指令是用于对Source1和Destination值的每
个64-位四字的MSB执行逻辑AND比较的LCSZC指令。(例如,见图6中所示的有符号打包
四字的寄存器内表示517)。这样的指令可以用可由应用程序程序员使用的助记忆指令(比
如“TESTPD”)称谓,其中“PD”表示打包的双精度数据元素。
[0178] 处理从块703d进行到块714d和715d。同样,块714d和715d可以并行执行,但不需要必须如此。
[0179] 在处理块714d中,执行以下内容。Source1的全部位与Dest值的相同的各个位进行逻辑AND。也就是说,将Source1[127:0]与Dest[127:0]的各个位的逐位AND操作的结
果分配给中间结果1的位[127:0]。
[0180] 类似地,在处理块715d中,Source1的全部位与Dest值的相同的各个位的反码进行逻辑AND。也就是说,将Source1[127:0]的位与Dest[127:0]的各个位的反码的逐位AND
操作的结果分配给中间结果2的位[127:0]。
[0181] 处理从块714d进行到块720d。处理从块715d进行到块721d。
[0182] 在块720d中,确定第一中间值(中间值1)的每个64-位四字的MSB。如果中间值1的位127和63等于0,则在块720d中将零标志设置为逻辑高值。否则,在块720d中将零
标志设置为逻辑低值。
[0183] 类似地,在块721d中,确定第二中间值(中间值2)的每个64-位四字的MSB。如果中间值2的位127和63等于0,则在块721d 中将进位标志设置为逻辑高值。否则,在块
721d中将进位标志设置为逻辑低值。作为方法700d的处理结果,源寄存器(SRC1)的初始
值(Source1)和目标寄存器(DEST)的初始值(Dest)都没有被修改。
[0184] 处理从块720d和721d进行到“结束”或进行到可选择处理块722d。在块722d中,可以修改处理器内的其它状态位。对于图7d中所示的实施例,在块722d中给AF(辅助进
位)、OF(溢出)、PF(奇偶)和SF(符号)标志分配逻辑低值。
[0185] 对于不包括可选择块722d的实施例,处理在块720d和721d的处理后就结束于“结束”处。对于包括可选择块722d的实施例,处理在处理块722d完成之后结束。
[0186] 逻辑-比较、设置-零-和-进位标志电路
[0187] 对于至少一些实施例,在与非打包数据的比较操作相同的时钟周期数内,可以对多个数据元素执行用于打包数据的各种LCSZC指令(例如,上面讨论的TESTPS和TESTPD)。
为了在相同时钟周期数内完成执行,可以使用并行机制。也就是说,可以同时命令处理器的
元件(比如寄存器和执行单元)对数据元素执行LCSZC操作。在下面更详细地讨论该并行
操作。下面参考图1a讨论图8a和8b。
[0188] 图8a示出了根据本发明至少一个实施例的对打包数据执行LCSZC操作的电路801。对于至少一个实施例,电路801可以是图1a所示的逻辑比较电路145的全部或一部
分。
[0189] 图8a描述了源操作数Source1[127:0]831和目标操作数Dest[127:0]833。对于至少一个实施例,源和目标被存储在N-位长的SIMD寄存器内,比如例如128-位的Inte1
SSE2XMM寄存器(例如,见图2b的扩展寄存器210)。
[0190] 图8a所示的具体示例实施例示出了LCSZC指令的双四字(128-位)实施例,其中将128位的源操作数和目标操作数的每一位与它们各自的配对位进行比较。对于该实施
例,因为每个位都进行比较,所以该操作可以操作于(并且在功能上不知道)源操作数和目
标操作数中的任何性质的128位;源操作数和目标操作数两者之一或两者都可以是打包数
据、非打包标量数据、有符号数据或无符号数据。在一些 具体示例中,虽然打包数据源831
和目标833可以被表示为具有128-位,但可以理解的是,这里所公开的原理可以扩展到其
它传统上选择的长度,比如80-位、128-位或256-位。
[0191] 操作控制800在使能(Enable)880上输出信号,以控制电路801所执行的操作。操作控制800的一个实施例可以包括例如解码器165和指令指针寄存器211。当然,操作控制
800还可以包括对于理解本发明不是必需的其他电路。LCSZC电路801包括两组(825,827)
AND门,其中每组都包括用于源操作数的每个位的一个AND门。因此,对于源和目标具有128
位的实施例,第一组825包括128个AND门819,而第二组827包括128个AND门820。源
操作数和目标操作数的128个位值中的每一个(例如,见图8a中的位值854)都是第一组
825中的一个AND门819的输入,而且也是第二组827中的一个AND门820的输入。应当注
意,仅在目标操作数已经转化成它的反码值(见转化器逻辑844)后,第二组AND门827才
接收来自目标操作数833的输入。
[0192] 第一组825中的每一个AND门819的输出是NAND门854的输入。NAND门854的至少一个作用是确定对源和目标的位进行AND的结果是否得到全0值(逻辑低值),并且如
果是,就给零标志858传递逻辑高值从而对其进行设置。
[0193] 第二组827中的每一个AND门820的输出是NAND门856的输入。NAND门856的至少一个作用是确定对源831的位和目标833的位的反码进行AND的结果是否得到全0值
(逻辑低值),并且如果是,就给进位标志860传递逻辑高值从而对其进行设置。
[0194] 双四字LCSZC指令的可选择实施例可以包括但不局限于:用于源和目标中的无符号双四字值的操作,以及用于源和目标中的有符号双四字值的操作。LCSZC指令的其它可选
择实施例可以包括应用于其它大小的有符号或无符号数据元素的操作(例如,见用于有符
号双字实施例的图8b以及用于有符号四字实施例的图8c)。
[0195] 图8b示出了根据本发明的一个可选择实施例的对打包数据执行LCSZC操作的电路801b的至少一个实施例。操作控制800处理用于打包LCSZC指令的控制信号。这样的
打包LCSZC指令可以是,例 如指示要对4个打包32位值执行的LCSZC操作的“TESTPS”指
令。每个打包32位值可以表示例如单精度浮点值。对于该实施例,应当理解的是,可能仅
仅其中一个操作数(例如,源831或目标833)包含打包的单精度浮点值。其它操作数可以
包括例如位掩码。
[0196] 图8a示出了操作控制800在使能880上输出信号以控制LCSZC电路801b。[本领域技术人员将认识到,图8b中所示的LCSZC电路801b可以通过调用图8a中所示的LCSZC
电路801的逻辑元件的子集来实现]。
[0197] LCSZC电路801b包括两组AND门,其中每组都包括用于要与目标操作数的相应位进行比较的源操作数的每个位的一个AND门。对于图8b中所示的实施例,要对4个32-位
(“双字”)数据元素中每一个的最高有效位进行比较。因此,第一组AND门包括门8191到
8194,而第二组AND门包括门8201到8204。
[0198] 图8b示出了源操作数831中的4个32-位数据元素中的每一个和目标操作数833中的4个32-位数据元素中的每一个的MSB值是第一组AND门819中的一个门的输入。更
具体而言,图8b示出了源操作数831和目标操作数833的位127都是门8191的输入、源操
作数831和目标操作数833的位93都是门8192的输入、源操作数831和目标操作数833
的位63都是门8193的输入,以及源操作数831和目标操作数833的位31都是门8194的输
入。
[0199] 图8b还示出了源操作数831中的4个32-位数据元素中的每一个和目标操作数833中的4个32-位数据元素中的每一个的MSB值是第二组AND门820中的一个门的输入。
应当注意,第二组AND门(8201到8204)在将目标操作数833的每个双字的MSB转换为其反
码值之后(见转化器844a-844d),才接收来自它们的输入。
[0200] 更具体地,图8b示出了源操作数831的位127和目标操作数833的位127的反码都是门8201的输入、源操作数831的位93和目标操作数833的位93的反码都是门8202的
输入、源操作数831的位63和目标操作数833的位63的反码都是门8203的输入、以及源
操作数831的位31和目标操作数833的位31的反码都是门8204的输入。
[0201] AND门8191到8194中每一个的输出都是到NAND门855的输 入。NAND门855的至少一个作用是确定对源和目标的4个双字中每一个的最高有效位进行AND的结果是否得
到全0值(逻辑低值),并且如果是,就给零标志858传递逻辑高值从而对其进行设置。
[0202] AND门8201到8204中每一个的输出都是到NAND门859的输入。NAND门859的至少一个作用是确定对源的位和目标的位的反码进行AND的结果是否得到全0值(逻辑低
值),并且如果是,就给进位标志860传递逻辑高值从而对其进行设置。
[0203] 比较4个双字中每一个的MSB的打包LCSZC指令的可选择实施例可以包括但不局限于:用于对一个操作数中的打包有符号双字值和另一个操作数中的位掩码进行的操作、
对在源和目标两者中的无符号双字值进行操作、以及用于对在源和目标两者中的有符号双
字值进行的操作、或者用于一个组合的操作。LCSZC指令的其它可选择实施例可以包括应用
于其它大小的有符号或无符号数据元素的操作。
[0204] 图8c示出了根据本发明的另一可选择实施例的对打包数据执行LCSZC操作的电路801c的至少一个实施例。操作控制800处理用于打包LCSZC指令的控制信号。这样的
打包LCSZC指令可以是,例如,指示要对2个打包的双精度(64-位)浮点值执行LCSZC操
作的“TESTPD”指令。操作控制800在使能880上输出信号以控制LCSZC电路801c。[本
领域技术人员将认识到图8c中所示的LCSZC电路801c可以通过调用图8a中所示的LCSZC
电路801的逻辑元件的子集来实现]。
[0205] 与上面结合图8b所讨论的电路801b一样,LCSZC电路801c包括两组AND门,其中每组包括用于要与目标操作数的相应位进行比较的源操作数的每个位的一个AND门。对
于图8c中所示的实施例,要对2个64-位(“四字”)数据元素的每一个的最高有效位进行
比较。因此,第一组AND门包括门8191和8193,而第二组AND门包括门8201和8203。
[0206] 图8c示出了源操作数831中的2个64-位数据元素中每一个的MSB值和目标操作数833中的2个64-位数据元素中每一个的MSB值是第一组AND门(8191和8193)中的
一个门的输入。更具体而言,图8c示出了源操作数831和目标操作数833的位127都是门
8191的 输入,以及源操作数831和目标操作数833的位63都是门8193的输入。
[0207] 图8c还示出了源操作数831中的2个64-位数据元素中每一个的MSB值和目标操作数833中的2个64-位数据元素中每一个的MSB值是第二组AND门(8201和8203)中
的一个门的输入。应当注意,第二组AND门8201和8203仅仅在目标操作数833的每个四字
的MSB已经转化成其反码值之后(见转化器844a和844c),才接收来自它们的输入。
[0208] 更具体地,图8c示出了源操作数831的位127和目标操作数833的位127的反码都是门8201的输入,并且源操作数831的位63和目标操作数833的位63的反码都是门
8203的输入。
[0209] AND门8191和8193中每一个的输出都是NAND门853的输入。NAND门853的至少一个作用是确定对源和目标的2个四字中每一个的最高有效位进行AND的结果是否都是
0(逻辑低值),并且如果是,就给零标志858传递逻辑高值从而对其进行设置。
[0210] AND门8201和8203中每一个的输出都是NAND门857的输入。NAND门857的至少一个作用是确定对源和目标的2个四字中每一个的最高有效位进行AND的结果是否都是
0(逻辑低值),并且如果是,就给进位标志860传递逻辑高值从而对其进行设置。
[0211] 比较2个四字中每一个的MSB的打包LCSZC指令的可选择实施例可以包括但不局限于:用于对源和目标两者中的无符号四字值的操作,以及用于对源和目标两者中的有符
号四字值的操作,或用于一个组合的操作。LCSZC指令的其它可选择实施例可以包括应用于
其它大小的有符号或无符号数据元素的操作。
[0212] 如上所解释的,解码器165可以识别并解码处理器109所接收的控制信号,并且该控制信号可以是用于LCSZC指令的操作码。因此,解码器165解码LCSZC指令的操作码。
[0213] 参考图9,其示出了可以用于对LCSZC指令的控制信号(操作码)进行编码的操作码的各种实施例。图9示出了根据本发明的一个实施例的指令900的格式。指令格式900
包括各种字段;这些字段可以包括前缀字段910、操作码字段920以及操作数指定字段(例
如, mod R/M、SIB(scale-index-base)、位移、立即数等)。操作数指定字段是可选择的,并
且包括modR/M字段930、SIB字段940、位移字段950和立即数字段960。
[0214] 本领域技术人员将认识到,图9所提出的格式900是说明性的,指令代码中的其它数据组织形式也可以用于所公开的实施例。例如,字段910、920、930、940、950、960不需要
以所示的顺序组织,而可以重新被组织到彼此相关的其它位置,并且不需要是邻近的。同
样,这里所讨论的字段长度不应当被看成是限制性的。作为多个字节的特定构件而讨论的
字段,在可选择的实施例中可以被实现为更大或更小的字段。同样,术语“字节”虽然在这
里作为8-位的分组使用,但是在其它实施例中,其可以实现为包括4位、16位和32位在内
的其它任何大小的分组。
[0215] 如这里所使用的,用于特定指令实例(比如LCSZC指令)的操作码可以包括指令格式200的字段中的特定值,以便指示所希望的操作。这样的指令有时被称为“真实指令”。
有时,在这里将真实指令的位值共同称为“指令代码”。
[0216] 对于每个指令代码,相应的解码后的指令代码唯一地表示由执行单元(例如,比如,图1a的130)响应于该指令代码而执行的操作。所述解码后的指令代码可以包括一个
或多个微操作。
[0217] 操作码字段920的内容指定该操作。对于至少一个实施例,用于在这里讨论的LCSZC指令的实施例的操作码字段920的长度是3个字。该操作码字段920可以包
括一个、两个或三个字节的信息。对于至少一个实施例,将在操作码字段920的2-字
节逃逸(escape)字段118c中的3-字节逃逸操作码值与操作码字段920的第三个字
节925的内容相结合,以指定LCSZC操作。第三个字节925在这里被称为具体指令
(instruction-specific)操作码。
[0218] 对于用于LCSZC指令的指令格式的第二实施例928,图9示出了将在操作码字段920的2-字节字段118c中的3-字节逃逸操作码值与前缀字段910的内容和操作码字段
920的具体指令操作码字段925的内容相结合,以指定LCSZC操作。
[0219] 对于至少一个实施例,将前缀值0x66放置于前缀字段910中, 并且将其用作指令操作码的一部分,以定义所希望的操作。也就是说,在前缀910字段中的值被解码成操作
码的一部分,而不是被解释成仅仅限制随后的操作码。例如,对于至少一个实施例,前缀值
0x66被用来指示LCSZC指令的目标操作数和源操作数是驻留在128-位Inte1 SSE2XMM
寄存器中。可以类似地使用其它前缀。然而,对于LCSZC指令的至少一些实施例,在某些操
作条件下,前缀可以替代地用于增强操作码或限制操作码的传统任务中。
[0220] 指令格式的第一实施例926和第二实施例928都包括3-字节逃逸操作码字段118c和具体指令操作码字段925。对于至少一个实施例,3-字节逃逸操作码字段118c的长
度为2个字节。指令格式926使用称为3-字节逃逸操作码的4个特定逃逸操作码中的一
个。3-字节逃逸操作码的长度为2个字节,并且它们向解码器硬件指示该指令使用操作码
字段920中的第三字节来定义该指令。3-字节逃逸操作码字段118c可以位于指令操作码
内的任何地方,并且不需要必须为指令内的最高次序或最低次序字段。
[0221] 对于至少一个实施例,定义了至少4个3-字节逃逸操作码值:0x0F3y,其中y是0x8、0x9、0xA或0xB。虽然这里所公开的LCSZC指令操作码的某些实施例与所述3-字节逃
逸操作码值一样包括值“0x0F38”,但这样的公开内容不应当被看成是限制性的。其它的实
施例可以使用其它的逃逸操作码值。
[0222] 下面的表3提出使用前缀和3-字节逃逸操作码的LCSZC指令代码的示例。
[0223] 表3
[0224]指令 定义
PTEST 将源128-位寄存器或源128-位存储器内 的所有位与寄存器内的128-位目标进行 比较;如果xmm2/m128 AND xmm1x m m 1 ,为全 0则设置ZF;否则清除ZF。如果 xmm2/m128 AND NOT xmm1结果为全 0则设置CF;否则清除CF。
mxx2/m128
TESTPS 将源(128-位寄存器或128-位存储器) 内的4个打包双字中每一个的MSB与目 标(128-位寄存器)内的4个打包x m m 1, 双字 中每一个的相应MSB进行比较;如果 xmm2/m128 AND xmm1的MSB(位127、 95、63和31)为全0则设置ZF;否则 xmm2/m128 清除ZF。如果xmm2/m128 AND NOT xmm1的MSB(位127、95、63和31) 结果为全0则设置CF;否则清除CF。
TESTPD 将源(128-位寄存器或128-位存储器) 内的2个打包四字中每一个的MSB与目 标(128-位寄存器)内的2个打包四x m m 1 , 字 中每一个的相应MSB进行比较;如果 xmm2/m128 AND xmm1的MSB(位127 和63)为全0则设置ZF;否则清除ZF。 xmm2/m128 如果xmm2/m128 AND NOT xmm1的 MSB(位127和63)结果为全0则设置 CF;否则清除CF。
[0225] 对于至少一个实施例,源或目标操作数中的值可以被用作掩码(mask)。可以至少部分地通过所希望得到的行为,来驱使程序员选择是否使用源或目标操作数作为掩码值。
例如,使用第二操作数(源) 作为掩码值,该结果行为可以陈述为:“如果在该掩码下的每
个位都为“0”,则设置ZF;如果在该掩码下的每个位都为“1”,则设置CF。”另一方面,当使
用第一个参数(目标)作为掩码值时,该结果行为可以陈述为:“如果在该掩码下的每个位
都为“0”,则设置ZF;如果在该掩码下的每个位都为“0”,则设置CF。”
[0226] 为了执行上面结合图7c、7d、8b和8c所讨论的打包LCSZC指令的至少一些实施例的等同物,需要附加指令,其为该操作增加了机器周期延迟。例如,下面的表4提出的伪代
码示出了使用PTEST指令的多个指令相对于没有包括PTEST指令的指令集的节省。
[0227] 表4
[0228]PTEST指令- 没有PTEST指令-
movdqa xmm0,_x[eax] movdqa xmm0,_x[eax]
pcmpeqd xmm0, pcmpeqd xmm0,
const_000000010000000100000001 const_000000010000000100000001
00000001 00000001
PTEST xmm0,xmm0 pmovmskb eax,xmm0
Jz all_under_mask_zero Test eax,eax
Jz all_under mask_zero
[0229] 表4所提出的伪代码有助于阐明所描述的LCSZC指令的实施例能够用于改进软件代码的性能。因此,LCSZC指令能够用于通用处理器,并且与所描述的现有技术指令相比,
提高了更多算法的性能。
[0230] 可选择实施例
[0231] 虽然所描述的实施例使用用于LCSZC指令的打包实施例的32-位数据元素和64-位数据元素的MSB的比较,但可选择实施例可以使用不同大小的输入、不同大小的数据
元素、和/或对不同位的比较(例如,数据元素的LSB)。此外,虽然在一些所描述的实施例
中,Source1和Dest每一个都包含128-位数据,但可选择实施例可以对具有更多或更少数
据的打包数据进行操作。例如,一个可选择实施例可以对具有64-位数据的打包数据进行
操作。而且,LCSZC指令所比较 的位不需要必须表示每个打包数据元素的相同的各个位的
位置。
[0232] 虽然已经依据一些实施例对本发明进行了描述,但本领域技术人员将认识到,本发明并不限制于所描述的实施例。本发明的方法和装置可以在在附带的权利要求的精神和
范围内进行实践上的修改和变化。因此,说明书被看成是说明性的,而不是对本发明的限
制。
[0233] 上面的说明书的目的是阐明本发明的优选实施例。从上面的讨论中也应当明白,特别是在这样发展快速并且进一步的进步不易预见的技术领域中,可以由本领域技术人员
在附加权利要求的范围内对本发明在安排和细节上进行修改,而不脱离的本发明的原理。