用于执行逻辑比较操作的方法和装置转让专利
申请号 : CN200710144187.2
文献号 : CN101231583B
文献日 : 2011-07-13
发明人 : 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的计算系统,其中,所述第一状态标志为零标志,所述第二状态标志为进位标志。
说明书 :
用于执行逻辑比较操作的方法和装置
技术领域
64位的值加在一起,并将结果存储为第三个64位的值。多媒体应用程序(例如,以计算机
支持协作(CSC--具有混合的媒体数据处理的电信会议集合)、2D/3D图形、图像处理、视频
压缩/解压缩、识别算法和音频处理为目标的应用程序)要求处理大量数据。所述数据可
以用单个大值(例如,64位或128位)表示,或者作为代替,可以用少量的位(例如,8或16
或32位)表示。例如,图形数据可以由8或16位表示,声音数据可以由8或16位表示,整
数数据可以由8、16或32位表示,而浮点数据可以由32或64位表示。
常用来表示单个值的多个位划分成多个固定大小的数据元素,每个数据元素表示一个单独
的值。例如,128位寄存器可以分成四个32位元素,每个元素表示单独的32位值。用这种
方式,这些处理器可以更有效地处理多媒体应用程序。
每一个都包含多个位;响应于所述单个指令,控制对所述第一操作数的一个或多个位与所
述第二操作数的对应位进行的第一逐位逻辑AND操作,并且响应于所述单个指令,控制对
所述第一操作数的一个或多个位与所述第二操作数的反码的对应位进行的第二逐位逻辑
AND操作;根据所述第一逐位逻辑AND操作的结果修改第一状态标志的值,并且根据所述第
二逐位逻辑AND操作的结果修改第二状态标志的值。
作,并且所述第二操作数的所述对应位是所述第二操作数的每个数据元素的相同的各个
位。
作,所述第一操作数和所述第二操作数中的每一个都包含多个位;转化器,用于获得所述第
二操作数的至少一些位的反码值;电路,用于响应于所述单个指令执行对所述第一操作数
的一个或多个位与所述第二操作数的对应位进行的第一逐位逻辑AND操作,并且响应于所
述单个指令执行对所述第一操作数的一个或多个位与所述反码值的对应位进行的第二逐
位逻辑AN D操作;第一状态标志,由所述电路根据所述第一逐位逻辑AND操作的结果将
所述第一状态标志修改为一个值;以及第二状态标志,由所述电路根据所述第二逐位逻辑
AND操作的结果将所述第二状态标志修改为一个值。
AND操作,并且所述第二操作数的所述对应位是所述第二操作数的每个数据元素的相同的
各个位。
一个数据元素的所述位和所述第二操作数的所述对应位的所述反码值;第一NAND门,用于
确定所述第一逐位逻辑AND操作的结果;第二NAND门,用于确定关于所述反码值的所述第
二逐位逻辑AND操作的结果。
二状态标志值且架构上可见的第二存储区域;解码器,用于接收待解码的单个指令,所述单
个指令用于指示第一操作数、第二操作数和所希望的操作,所述第一操作数和所述第二操
作数中的每一个都包含多个位;以及执行单元,用于响应于所述单个指令,控制对所述第一
操作数的一个或多个位与所述第二操作数的相应位进行的第一逐位逻辑AND操作,并且根
据所述第一逐位逻辑AND操作的结果修改所述第一状态标志值;并且所述执行单元用于响
应于所述单个指令,控制对所述第一操作数的一个或多个位与所述第二操作数的一个或多
个位的反码值进行的第二逐位逻辑AND操作,并且根据所述第二逐位逻辑AND操作的结果
修改 所述第二状态标志值。
AND操作,并且所述第二操作数的所述对应位是所述第二操作数的每个数据元素的相同的
各个位。
的每一个数据元素的所述位和所述第二操作数的所述对应位的所述反码值;第一NAND门,
用于确定所述第一逐位逻辑AND操作的结果;第二NAND门,用于确定关于所述反码值的所
述第二逐位逻辑AND操作的结果。
打包或非打包数据。对于至少一个实施例而言,处理器耦合到存储器。该存储器中已经存
储了第一数据和第二数据。处理器响应于所接收的指令,对在第一数据和第二数据中的数
据元素执行逻辑比较操作。逻辑比较操作可以包括第一和第二数据的数据元素的位AND,并
且还可以包括第一数据的数据元素的反码和第二数据的数据元素的位AND。根据该逻辑比
较操作的结果,修改处理器的至少两个状态标志。这两个状态标志可以包括零标志(zero
flag)和进位标志(carry flag)。这些标志可以在体系上对应用程序可见,并且可以是更
大标志值的一部分,比如体系上可见的扩展标志(EFLAGS)寄存器。
附图被看成是说明性的而不具有限制性意义,并且本发明仅根据权利要求来确定。
后根据该比较设置零标志和进位标志。对于至少一个实施例,使用下面表1a和表1b中所
示的单个指令执行两个逻辑比较操作。所述比较操作包括目标操作数和源操作数的逐位逻
辑AND以及目标操作数的反码与源操作数的逐位逻辑AND。表1a示出所公开的逻辑比较操
作的一个实施例的简化表示,而表1b示出所公开的逻辑比较指令的实施例的在位级别上
的示例,给出了一些样本值。对于在表1a和1b中所示出的实施例,虽然源操作数和目标操
作数中的数据可以是打包数据,但是其可以是任何数据表示,而并非必须是打包数据。在源
和/或目标操作数的数据是128-位的单个实体且由此并不将其认为是“打包”数据的情况
下,在这里将其称为“非打包(unpacked)”数据,其简单地表示该数据不需要被再分割成组
分(component)表示,并且可以被认为是单个数据值。虽然为了简化说明,表1a中的数据
被表示为32-位的值,但本领域技 术人员将认识到,在表1a和1b中所说明的概念可以应
用于任何长度的数据,包括更小的数据长度(例如,4-位、8-位和16-位的长度)以及更大
的数据长度(例如,64-位和128-位的长度)。
源操作数 01010101101010101111000000001111
DestAND(逐位)Source 00000000000000000000000000000000
[NOT Dest]AND(逐位)Source 01010101101010101111000000001111
零标志=TRUE
进位标志=FALSE
以表示任何数据,包括任何整数或浮点数据格式,以及串格式或任何其它类型的数据格式。
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
8b和8c的讨论对至少某些这样的实施例进行讨论。
至少一个实施例中可以这样进行存储,但是它们在表1a到2b中的表示不应当被看成意味
着这些中间值必须存储在处理器中。可选择地,对于至少一个其它实施例,通过电路来确定
这些中间值,而不将上述值存储在存储区域中。
操作,并且还对源操作数的128个位中的每一个位与目标操作数的反码值的128个位中的
每一位执行逐位的AND操作,并且根据该AND操作的结果来设置零标志和进位标志。
值,指示希望由处理器执行的分支操作(例如,见下面表4的伪代码)。本领域技术人员将
认识到,状态标志的设置不是分支操作可以用以利用比较结果的唯一硬件机制,也可以实
现其它机制,以便基于比较结果来支持分支。因此,虽然下面描述的具体实施例指示作为逻
辑比较的结果,可以设置零标志和进位标志,但这种支持分支的标志设置并不要求用于所
有实施例。相应地,在这里使用的术语“LCSZC”不应当被看成限制性的,原因在于零标志和
进位标志的设置并非对于所有实施例都是必需的。
结果来执行。对于融合“测试-和-分支”指令的至少一个实施例,作为所执行的逻辑比较
的结果,不设置任何状态标志。
据元素的数量以及所产生的中间结果的数量。例如,可选择的实施例可以包括但不局限于:
用于无符号源和有符号目标的LCSZC指令;用于有符号源和无符号目标的LCSZC指令;用
于无符号源和无符号目标的LCSZC指令;以及用于有符号源和有符号目标的LCSZC指令。
在每个示例中,所述源和目每一个都可以都包含8-位、16-位、32-位或64-位组分的打包
数据。可选择地,所述源和目标数据不是打包的,而是一个128-位的数据元素。源和目标
的打包性质不需要是对称的,并且如果源和目标都是打包的,源和目标的数据大小也无需
必须相同。
个或多个点对点互连部件或两者的任意组合,以及任何其它通信硬件和/或软件。
还可以用于在处理器109执行指令期间存储临时变量或其它中间信息。
101,用于存储信息和指令。
的其他电路。
165和执行单元130还识别用于执行逻辑-比较-和-设置-零-和-进位-标志(LCSZC)
操作的指令。解码器165和执行单元130识别用于对打包数据和非打包数据执行LCSZC操
作的指令。
信路径。
所描述指令的实施例。根据本发明的这个方面,用于存储数据的存储区域不是关键的。然
而,寄存器堆150的实施例在后面参考图2a-2b进行描述。
指令解码成控制信号和/或微代码入口点。可以将这些控制信号和/或微代码入口点从解
码器165传送给执行单元130。
一些实施例(比如那些没有实现融合“测试和分支”操作的实施例),执行单元130可以相
应地设置零标志和进位标志(例如,见逻辑比较电路145)。对于这样的实施例,处理器109
的分支单元(未示出)可以在随后的指示目标代码位置的分支指令的执行期间使用这些标
志。
置的控制跳转,而不是控制标志的设置。对于至少一个实施例,执行跳转或“分支”的分支
电路可以是逻辑比较电路145的一部分。
语句表示,但可以理解的是,指令的执行并不要求这些if/then语句的串行处理。相反地,
在逻辑上执行该if/then处理的任何机制均认为是在本发明的范围内。
码195。代码195可以包括LCSZC指令142的一个或多个实施例,并且可以将其编写为:使
处理器109用一个(或多个)LCSZC指令142执行用于任意数量的目的(例如,运动视频压
缩/解压缩、图像滤波、音频信号压缩、滤波或合成、调制/解调等)的位测试。
或平板显示器。
迹球、笔、触摸屏或光标方向键,用于传递方向信息和命令选择给处理器109,并用于控制显
示设备121上的光标移动。这些输入设备典型地在两个轴(第一轴(例如,x)和第二轴
(例如,y))上具有两个自由度,这允许该设备在平面上指定位置。然而,本发明不应当局限
于只具有两个自由度的输入设备。
耦合到用于声音记录和/或重放的设备125,比如用来记录信息的、耦合到麦克风的音频数
字化仪。此外,设备125可以包括用来播放数字化声音的、耦合到数模(D/A)转换器的扬声
器。
和/或通信设备190(例如, 提供与外部设备或网络之间的通信的串行通信芯片、无线接
口、以太网芯片或调制解调器)。视频数字化设备126可以用于拍摄视频图像,视频图像可
以被传送到计算机网络上的其它设备。
Pro处理器、Intel Pentium II处理器、Intel Pentium III处理器、Intel
Pentium 4处理器、Intel Itanium 处理器、Intel Itanium 2处理器或
Intel CoreTM Duo处理器)使用的指令集相兼容的指令集。由此,处理器109能够支持
除了本发明的操作之外的现存的处理器操作。处理器109还可以适于以一种或多种处理技
术制造,并且通过足够详细地在机器可读介质上对其进行表示,可以适于方便所述制造。虽
然下面描述的本发明与基于x86的指令集相结合,但可选择的实施例可以将本发明与其它
指令集相结合。例如,本发明可以与使用与基于x86的指令集不同的指令集的64-位处理
器相结合。
系统102的一个实施例是采用Intel XScale 技术的应用处理器。本领域技术人员易于理
解的是,这里所描述的实施例可以与可选择的处理系统一起使用,而不背离本发明的范围。
处理内核110也可以适于采用一种或多种处理技术制造,并且通过足够详细地在机器可读
介质上对其进行表示,可以适于方便所述制造。
165和执行单元130所识别的指令集可以包括一个或多个用于LCSZC操作的指令,还可以包
括其 它打包指令。
于存储信息(包括数据)的存储区域。如前所述,可以理解的是,用于存储数据的存储区域
不是关键的。执行单元130耦合到解码器165。解码器165用于将处理内核110接收的指
令解码成控制信号和/或微代码入口点。对这些控制信号和/或微代码入口点进行响应。
这些控制信号和/或微代码入口点可以被传送到执行单元130。执行单元130可以响应于
所接收的控制信号和/或微代码入口点,来执行适当操作。对于至少一个实施例,例如,执
行单元130可以执行这里描述的逻辑比较,并且还可以设置这里讨论的状态标志或到指定
代码位置的分支,或两者都设置。
器(SRAM)控制器272、猝发式闪速存储器接口(burst flash memory interface)273、个人
计算机存储卡国际协会(PCMCIA)/小型闪存(compact flash,CF)卡控制器274、液晶显示
器(LCD)控制器275、直接存储器访问(DMA)控制器276和可选择总线主接口277。
器/发送器(UART)291、通用串行总线(USB)292、蓝牙无线UART293以及I/O扩展接口294。
如同上面讨论的其它总线,I/O总线295可以是包括多分支总线、点对点互连部件等的任何
类型的通信路径。
程:包括离散变换、滤波或卷积在内的各种音频、视频、图像以及通信算法;诸如颜色空间
变换、视频编码运动估计或视频解码运动补偿之类的压缩/解压缩技术;以及诸如脉冲编
码调制(PCM)之类的调制/解调(MODEM)功能进 行编程。
处理器224以及一个或多个协处理器226。附加的协处理器226的可选择性在图1c中用虚
线表示。例如,一个或多个协处理器226可以是能够执行SIMD指令的图形协处理器。
括LCSZC指令)中的指令进行识别和解码的解码器165。对于可选择实施例,协处理器226
还包括用于对指令集(包括LCSZC指令)中的指令进行解码的解码器166的至少一部分。
数据处理系统103还包括对理解本发明不是必需的其他电路(未示出)。
互。嵌入在数据处理指令流中的是协处理器指令。主处理器224的解码器165将这些协处
理器指令识别为应当由附加的协处理器226执行的类型。相应地,主处理器224在协处理
器互连部件236上发布这些协处理器指令(或表示协处理器指令的控制信号),任何附加
的一个(或多个)协处理器从协处理器互连部件236上接收这些指令(或信号)。对于图
1c所示的单个协处理器的实施例,协处理器226接受并执行任何发给它的所接收的协处理
器指令。协处理器互连部件可以是包括多分支总线、点对点互连部件等的任何类型的通信
路径。
新生成表示语音通信的数字音频采样。对于另一示例,可以以数字比特流的形式接收压缩
的音频和/或视频,所述数字比特流可以由协处理器指令处理以便重新生成数字音频采样
和/或运动视频帧。
器165用来识别由执行单元130执行的指令集(包括LCSZC指令)中的多个指令。
认识到,前述的信息和数据列表不是穷举的、全包含的列表。
如零标志和进位标志的各种状态寄存器。指令指针寄存器211存储将要执行的下一个指令
的地址。整数寄存器201、寄存器209、状态寄存器208和指令指针寄存器211都耦合到内
部互连部件170。还可以将其他的寄存器耦合到内部互连部件170。内部互连部件170可
以是多分支总线,但不需要必须如此。可替换地,内部互连部件170可以是包括点对点互连
部件在内的任何其它类型的通信路径。
referenced floating point register)或非栈参考打包数据寄存器。在该实施例中,包含
了一种机制,其允许处理器109在将寄存器209作为栈参考浮点寄存器进行操作和将寄存
器209作为非栈参考打包数据寄存器进行操作之间进行切换。在另一个这样的实施例中,
处理器109可以同时将寄存器209作为栈参考浮点寄存器和非栈参考打包数据寄存器进行
操作。在另一个实施例 中,作为另一示例,这些寄存器可以用来存储整数数据。
可以包括每个都用于存储控制/状态信息的第一组寄存器以及每个都能够存储整数、浮点
数和打包数据的第二组寄存器。作为澄清,实施例的寄存器不应当在意思上限制于特殊类
型的电路。相反地,实施例的寄存器只需要能够存储和提供数据并执行这里描述的功能。
位,而寄存器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个寄存器。
的实施例中,寄存器堆150包括整数寄存器201、寄存器209、状态寄存器208、扩展寄存器
210和指令指针寄存器211。状态寄存器208、指令指针寄存器211、整数寄存器201、寄存器
209全部都耦合到内部互连部件170。相应地,扩展寄存器210也耦合到内部互连部件170。
内部互连部件170可以是多分支总线,但不需要必须如此。可替换地,内部互连部件170可
以是包括点对点互连部件在内的任何其它类型的通信路径。
尔数据、打包的整数数据和/或打包的浮点数据。当然,可选择的实施例可以实现为包含更
多或更少的寄存器组、在每组中有更多或更少的寄存器或在每个寄存器中的更多或更少的
数据存储位,而不脱离本发明更宽的范围。
寄存器210实现为存储128个位。此外,扩展寄存器210可以包括8个寄存器XR0 213a到
XR7 213h。XR0 213a、XR1 213b和XR2 213c是寄存器210中的单个寄存器的示例。对于另
一实施例,每个整数寄存器201包括64个位,每个扩展寄存器210包括64个位,而扩展寄
存器210包括16个寄存器。对于一个实施例,扩展寄存器210的两个寄存器可以作为一个
“对”进行操作。对于另一可选择的实施例,扩展寄存器210包括32个寄存器。
操作或执行一些其它操作时,由处理器109(例如,见图1a)进行的处理。这里所讨论的处
理300和其它处理由处理块来执行,所述处理块可以包括专用硬件或者或可由通用机器或
由专用机器或由它们的组合执行的软件或固件操作码。
如,见图1a)的控制信号。对于至少一个实施例,在块301接收的控制信号可以是通常称为
软件“指令”的控制信号类型。解码器165将控制信号解码以确定将要执行的操作。处理
从处理块301进行到处理块302。
问寄存器堆150中的寄存器或存储器中的存储单元。例如,用于操作的控制信号能够包含
SRC1、SRC2和DEST寄存器地址。SRC1是第一源寄存器的地址。SRC2是 第二源寄存器的
地址。在某些情况下,SRC2地址是可选的,因为并非所有操作都要求两个源地址。如果对
于一个操作没有要求SRC2地址,则仅使用SRC1地址。DEST是存储结果数据的目标寄存器
的地址。对于至少一个实施例,在由解码器165识别的至少一个控制信号中,SRC1或SRC2
也可以用作DEST。
或多个可以是其它长度,比如128位长度。
可以标识主存储器104中的存储单元,而SRC2标识在整数寄存器201中的第一寄存器,而
DEST标识寄存器209中的第二寄存器。为了简化这里的描述,本发明将描述与寄存器堆150
有关的访问。然而,本领域技术人员将认识到,替代地,这些所描述的访问也可以使用于存
储器。
single)423、打包双(packed double)424和非打包双四字412。
的数据元素中的每一个可以被称为“半字”或“短字”,或简单地称为“字”。
的信息。可选择地,每一个32-位数据元素可以被称为“dword”或“双字”。每个数据元素
(Single0到Single3)可以表示例如32-位的单精度浮点值,因此称作“打包单”格式。
选择地,每个64-位数据元素可以被称为“qword”或“四字(quadword)”。每个数据元素
(Double0、Double1)可以表示例如64-位的双精度浮点值,因此称作“打包双”格式。
数据,比如字符、整数、浮点值或二进制的位-掩码值。可选择地,非打包双四字格式412的
128位可以表示多个不相干的位(比如状态寄存器值,其中每一位或位组表示不同标志)等
等的集合。
打包双格式424的数据元素可以是打包整数数据元素、打包布尔数据元素或打包浮点数据
元素。对于本发明的另一可选择的实施例,打包字节格式421、打包半格式422、打包单格
式423和打包双格式424的数据元素可以是打包整数数据元素或打包布尔数据元素。对
于本发明的可选择实施例,并非允许或支持所有的打包字节数据格式421、打包半数据格式
422、打包单数据格式423和打包双数据格式424。
如,见图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。
字2存储在寄存器的位47到位32。字3存储在寄存器的位63到位48。字4存储在寄存
器的位79到位64。字5存储在寄存器的位95到位80。字6存储在寄存器的位111到位
96。字7存储在寄存器的位127到位112。
据元素。双字0存储在寄存器的位31到位0。双字1存储在寄存器的位63到位32。双字
2存储在寄存器的位95到位64。双字3存储在寄存器的位127到位96。
数据元素。四字0存储在寄存器的位63到位0。四字1存储在寄存器的位127到位64。
少一个实施例,在DEST寄存器中的Dest值或在SRC1寄存器中的Source1值可以是要用作
逐位掩码值的双四字非打包数据。
Source1中的每个位与Dest的相应位的反码执行独立的逻辑比较(逐位AND操作),产生
第二中间结果。这些中间结果可以存储在临时存储单元(比如,例如,寄存器)或者可以根
本不由处理器存储。
件或可由通用机器或由专用机器或由它们的组合执行的软件或固件操作码。在下面的段落
中,将参考图1a讨论图7a到7d。
作码进行解码。然后处理从处理块701进行到处理块702。
码的地址都指示扩展寄存器(例如,见图2b的扩展寄存器210)。对于该实施例,在块702
中访问所指示的扩展寄存器210,以便为执行单元130提供存储在SRC1寄存器中的数据
(Source1)以及存储在DEST寄存器中的数据(Dest)。对于至少一个实施例,扩展寄存器
210通过内部总线170将数据传递给执行单元130。
示所希望的操作(LCZCS),来执行该使能703。处理从块703进行到处理块714和715。虽
然块714和715被并列示出,但本领域技术人员将认识到,只要它们在同一周期或周期组中
执行,这样的操作就需要被严格同时地执行,并且对于至少一个可选择的实施例,块714和
715的处理可以串行执行。因此,不同的实施例可以以并行、串行、或串行与并行操作的某种
组合来执行块714和715的处理。
的反码进行逻辑AND。
术人员将注意到,图7a所说明的方法700是非破坏性的,原因在于作为LCSZC操作的结果
Source1和Dest操作数的值都没有被修改。替代地,零标志在块720中被修改而进位标志
在块721中被修改。
高值,也会在块720中将零标志设置为false值(例如,逻辑低值)。
辑高值,以会在块721中将进位标志设置为false值(例如,逻辑低值)。
解的是,处理700的可选择实施例可以实现支持LCSZC指令的其他变形的其他处理块。
上可见的状态标志值。这些标志可以是1-位或2-位值并且可以包括:奇偶(PF)、辅助进
位(AF)、符号(SF)、陷阱(TF)、中断使能/无效(IF)、方向(DF)、溢出(OF)、I/O特权等级
(IOPL)、嵌套任务(NT)、恢复(RF)、虚拟8086模式(VM)、对齐检查(AC)、虚拟中断(VIF)、
虚拟未决中断(FIP)和CPU标识符(ID)标志等。当然,前述的具体标志的列表目的只是说
明;其它实施例可以包括更少、更多或不同的标志。
Source1和Dest数据值,执行LCSZC操作。(当然,本领域技术人员将认识到,也可以对其
它长度的数据值执行图7b中所示出的操作,包括小于或大于128位的数据值)。
行指令时,该指令是用于对Source1和Dest值的各个位执行逻辑AND比较的LCSZC指令。
(例如,见图6中所示的有符号打包双字的寄存器内表示515)。这样的指令可以用可由应
用程序程序员使用的助记忆指令(比如“PTEST”)称谓。处 理从块703b进行到块714b和
715b。同样,块714b和715b可以并行执行,但不需要必须如此。
应当被解释为在这方面不受限制。替代地,不同实施例可以以并行、串行、或串行与并行操
作的某种组合来执行块714b和715b的处理。
果分配给中间结果1的位[127:0]。
操作的结果分配给中间结果2的位[127:0]。
域技术人员将注意到,图7b中所示的方法700b是非破坏性的,原因在于作为LCSZC操作的
结果,Source1和Dest操作数的值都没有被修改。可替换地,零标志在块720b中被修改而
进位标志在块721b中被修改。
即使是中间结果1中的一个位是逻辑高值,也会在块720b中将零标志设置为false值(例
如,逻辑低值)。
果即使是中间结果2中的一个位是逻辑高值,也会在块721b中将进位标志设置为false值
(例如, 逻辑低值)。
同样可以理解的是,处理700b的可选择实施例可以实现支持LCSZC指令的其他变形的其他
处理块。
出)、PF(奇偶)和SF(符号)标志分配逻辑低值。
LCSZC操作。源操作数或目标操作数或两者都可以是打包的,原因在于源操作数的128-位
数据值表示4个打包的32-位(“双字”)数据元素。例如,数据元素的每一个都可以表示
32位的有符号单精度浮点值。
素,执行图7c中所示的操作。
器165使执行单元130能够执行指令时,该指令是用于对Source1和Destination值的每
个32-位双字的MSB执行逻辑AND比较的LCSZC指令。(例如,见图6中所示的有符号打
包双字的寄存器内表示515)。这样的指令可以用可由 应用程序程序员使用的助记忆指令
(比如“TESTPS”)称谓,其中“PS”表示打包的单精度数据元素。
果分配给中间结果1的位[127:0]。
操作的结果分配给中间结果2的位[127:0]。
中将零标志设置为逻辑低值。
则,在块721c中将进位标志设置为逻辑低值。作为方法700c的处理结果,源寄存器(SRC1)
没有被修改。
进位)、OF(溢出)、PF(奇偶)和SF(符号)标志分配逻辑低值。
LCSZC操作。源操作数或目标操作数或两者都可以是打包的,原因在于源操作数的128-位
数据值表示两个打包的64-位数据元素。例如,数据元素的每一个都可以表示64位有符号
双精度浮点值。
素,执行图7d中所示的操作。
器165使执行单元130能够执行指令时,该指令是用于对Source1和Destination值的每
个64-位四字的MSB执行逻辑AND比较的LCSZC指令。(例如,见图6中所示的有符号打包
四字的寄存器内表示517)。这样的指令可以用可由应用程序程序员使用的助记忆指令(比
如“TESTPD”)称谓,其中“PD”表示打包的双精度数据元素。
果分配给中间结果1的位[127:0]。
操作的结果分配给中间结果2的位[127:0]。
标志设置为逻辑低值。
721d中将进位标志设置为逻辑低值。作为方法700d的处理结果,源寄存器(SRC1)的初始
值(Source1)和目标寄存器(DEST)的初始值(Dest)都没有被修改。
位)、OF(溢出)、PF(奇偶)和SF(符号)标志分配逻辑低值。
为了在相同时钟周期数内完成执行,可以使用并行机制。也就是说,可以同时命令处理器的
元件(比如寄存器和执行单元)对数据元素执行LCSZC操作。在下面更详细地讨论该并行
操作。下面参考图1a讨论图8a和8b。
分。
SSE2XMM寄存器(例如,见图2b的扩展寄存器210)。
例,因为每个位都进行比较,所以该操作可以操作于(并且在功能上不知道)源操作数和目
标操作数中的任何性质的128位;源操作数和目标操作数两者之一或两者都可以是打包数
据、非打包标量数据、有符号数据或无符号数据。在一些 具体示例中,虽然打包数据源831
和目标833可以被表示为具有128-位,但可以理解的是,这里所公开的原理可以扩展到其
它传统上选择的长度,比如80-位、128-位或256-位。
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的输入。
果是,就给零标志858传递逻辑高值从而对其进行设置。
(逻辑低值),并且如果是,就给进位标志860传递逻辑高值从而对其进行设置。
择实施例可以包括应用于其它大小的有符号或无符号数据元素的操作(例如,见用于有符
号双字实施例的图8b以及用于有符号四字实施例的图8c)。
打包LCSZC指令可以是,例 如指示要对4个打包32位值执行的LCSZC操作的“TESTPS”指
令。每个打包32位值可以表示例如单精度浮点值。对于该实施例,应当理解的是,可能仅
仅其中一个操作数(例如,源831或目标833)包含打包的单精度浮点值。其它操作数可以
包括例如位掩码。
电路801的逻辑元件的子集来实现]。
(“双字”)数据元素中每一个的最高有效位进行比较。因此,第一组AND门包括门8191到
8194,而第二组AND门包括门8201到8204。
具体而言,图8b示出了源操作数831和目标操作数833的位127都是门8191的输入、源操
作数831和目标操作数833的位93都是门8192的输入、源操作数831和目标操作数833
的位63都是门8193的输入,以及源操作数831和目标操作数833的位31都是门8194的输
入。
应当注意,第二组AND门(8201到8204)在将目标操作数833的每个双字的MSB转换为其反
码值之后(见转化器844a-844d),才接收来自它们的输入。
输入、源操作数831的位63和目标操作数833的位63的反码都是门8203的输入、以及源
操作数831的位31和目标操作数833的位31的反码都是门8204的输入。
到全0值(逻辑低值),并且如果是,就给零标志858传递逻辑高值从而对其进行设置。
值),并且如果是,就给进位标志860传递逻辑高值从而对其进行设置。
对在源和目标两者中的无符号双字值进行操作、以及用于对在源和目标两者中的有符号双
字值进行的操作、或者用于一个组合的操作。LCSZC指令的其它可选择实施例可以包括应用
于其它大小的有符号或无符号数据元素的操作。
打包LCSZC指令可以是,例如,指示要对2个打包的双精度(64-位)浮点值执行LCSZC操
作的“TESTPD”指令。操作控制800在使能880上输出信号以控制LCSZC电路801c。[本
领域技术人员将认识到图8c中所示的LCSZC电路801c可以通过调用图8a中所示的LCSZC
电路801的逻辑元件的子集来实现]。
于图8c中所示的实施例,要对2个64-位(“四字”)数据元素的每一个的最高有效位进行
比较。因此,第一组AND门包括门8191和8193,而第二组AND门包括门8201和8203。
一个门的输入。更具体而言,图8c示出了源操作数831和目标操作数833的位127都是门
8191的 输入,以及源操作数831和目标操作数833的位63都是门8193的输入。
的一个门的输入。应当注意,第二组AND门8201和8203仅仅在目标操作数833的每个四字
的MSB已经转化成其反码值之后(见转化器844a和844c),才接收来自它们的输入。
8203的输入。
0(逻辑低值),并且如果是,就给零标志858传递逻辑高值从而对其进行设置。
0(逻辑低值),并且如果是,就给进位标志860传递逻辑高值从而对其进行设置。
号四字值的操作,或用于一个组合的操作。LCSZC指令的其它可选择实施例可以包括应用于
其它大小的有符号或无符号数据元素的操作。
包括各种字段;这些字段可以包括前缀字段910、操作码字段920以及操作数指定字段(例
如, mod R/M、SIB(scale-index-base)、位移、立即数等)。操作数指定字段是可选择的,并
且包括modR/M字段930、SIB字段940、位移字段950和立即数字段960。
以所示的顺序组织,而可以重新被组织到彼此相关的其它位置,并且不需要是邻近的。同
样,这里所讨论的字段长度不应当被看成是限制性的。作为多个字节的特定构件而讨论的
字段,在可选择的实施例中可以被实现为更大或更小的字段。同样,术语“字节”虽然在这
里作为8-位的分组使用,但是在其它实施例中,其可以实现为包括4位、16位和32位在内
的其它任何大小的分组。
有时,在这里将真实指令的位值共同称为“指令代码”。
或多个微操作。
括一个、两个或三个字节的信息。对于至少一个实施例,将在操作码字段920的2-字
节逃逸(escape)字段118c中的3-字节逃逸操作码值与操作码字段920的第三个字
节925的内容相结合,以指定LCSZC操作。第三个字节925在这里被称为具体指令
(instruction-specific)操作码。
920的具体指令操作码字段925的内容相结合,以指定LCSZC操作。
码的一部分,而不是被解释成仅仅限制随后的操作码。例如,对于至少一个实施例,前缀值
0x66被用来指示LCSZC指令的目标操作数和源操作数是驻留在128-位Inte1 SSE2XMM
寄存器中。可以类似地使用其它前缀。然而,对于LCSZC指令的至少一些实施例,在某些操
作条件下,前缀可以替代地用于增强操作码或限制操作码的传统任务中。
度为2个字节。指令格式926使用称为3-字节逃逸操作码的4个特定逃逸操作码中的一
个。3-字节逃逸操作码的长度为2个字节,并且它们向解码器硬件指示该指令使用操作码
字段920中的第三字节来定义该指令。3-字节逃逸操作码字段118c可以位于指令操作码
内的任何地方,并且不需要必须为指令内的最高次序或最低次序字段。
逸操作码值一样包括值“0x0F38”,但这样的公开内容不应当被看成是限制性的。其它的实
施例可以使用其它的逃逸操作码值。
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。
例如,使用第二操作数(源) 作为掩码值,该结果行为可以陈述为:“如果在该掩码下的每
个位都为“0”,则设置ZF;如果在该掩码下的每个位都为“1”,则设置CF。”另一方面,当使
用第一个参数(目标)作为掩码值时,该结果行为可以陈述为:“如果在该掩码下的每个位
都为“0”,则设置ZF;如果在该掩码下的每个位都为“0”,则设置CF。”
码示出了使用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
提高了更多算法的性能。
元素、和/或对不同位的比较(例如,数据元素的LSB)。此外,虽然在一些所描述的实施例
中,Source1和Dest每一个都包含128-位数据,但可选择实施例可以对具有更多或更少数
据的打包数据进行操作。例如,一个可选择实施例可以对具有64-位数据的打包数据进行
操作。而且,LCSZC指令所比较 的位不需要必须表示每个打包数据元素的相同的各个位的
位置。
范围内进行实践上的修改和变化。因此,说明书被看成是说明性的,而不是对本发明的限
制。
在附加权利要求的范围内对本发明在安排和细节上进行修改,而不脱离的本发明的原理。