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

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

Info

Publication number
CN101231583B
CN101231583B CN2007101441872A CN200710144187A CN101231583B CN 101231583 B CN101231583 B CN 101231583B CN 2007101441872 A CN2007101441872 A CN 2007101441872A CN 200710144187 A CN200710144187 A CN 200710144187A CN 101231583 B CN101231583 B CN 101231583B
Authority
CN
China
Prior art keywords
operand
logic
data
value
instruction
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.)
Expired - Fee Related
Application number
CN2007101441872A
Other languages
English (en)
Other versions
CN101231583A (zh
Inventor
R·卡普尔
R·祖海尔
M·巴克斯顿
Z·斯佩贝尔
K·戈特利布
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of CN101231583A publication Critical patent/CN101231583A/zh
Application granted granted Critical
Publication of CN101231583B publication Critical patent/CN101231583B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30021Compare instructions, e.g. Greater-Than, Equal-To, MINMAX
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/22Microcontrol or microprogram arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0875Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with dedicated cache, e.g. instruction or stack
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/02Comparing digital values
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/02Comparing digital values
    • G06F7/026Magnitude comparison, i.e. determining the relative order of operands based on their numerical value, e.g. window comparator
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F7/00Methods or arrangements for processing data by operating upon the order or content of the data handled
    • G06F7/06Arrangements for sorting, selecting, merging, or comparing data on individual record carriers
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/3001Arithmetic instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30029Logical and Boolean instructions, e.g. XOR, NOT
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30036Instructions to perform operations on packed data, e.g. vector, tile or matrix operations
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/3005Arrangements for executing specific machine instructions to perform operations for flow control
    • G06F9/30058Conditional branch instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30094Condition code generation, e.g. Carry, Zero flag
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30098Register arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/30149Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3877Concurrent instruction execution, e.g. pipeline or look ahead using a slave processor, e.g. coprocessor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3885Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units
    • G06F9/3887Concurrent instruction execution, e.g. pipeline or look ahead using a plurality of independent parallel functional units controlled by a single instruction for multiple data lanes [SIMD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/45Caching of specific data in cache memory
    • G06F2212/452Instruction code

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)
  • Advance Control (AREA)

Abstract

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

Description

用于执行逻辑比较操作的方法和装置
技术领域
本公开内容总体上涉及处理器领域。特别地,本公开内容涉及使用单个控制信号对多位数据上执行多个逻辑比较操作。
背景技术
在典型的计算机系统中,处理器被实现为使用产生一个结果的指令对由许多位(例如,64个)表示的值进行操作。例如,执行加法指令将会把第一个64位的值和第二个64位的值加在一起,并将结果存储为第三个64位的值。多媒体应用程序(例如,以计算机支持协作(CSC--具有混合的媒体数据处理的电信会议集合)、2D/3D图形、图像处理、视频压缩/解压缩、识别算法和音频处理为目标的应用程序)要求处理大量数据。所述数据可以用单个大值(例如,64位或128位)表示,或者作为代替,可以用少量的位(例如,8或16或32位)表示。例如,图形数据可以由8或16位表示,声音数据可以由8或16位表示,整数数据可以由8、16或32位表示,而浮点数据可以由32或64位表示。
为了提高多媒体应用程序(以及其它具有相同特征的应用程序)的效率,处理器可以提供打包数据(packed data)格式。典型地,打包数据格式是这样的格式:其中,将通常用来表示单个值的多个位划分成多个固定大小的数据元素,每个数据元素表示一个单独的值。例如,128位寄存器可以分成四个32位元素,每个元素表示单独的32位值。用这种方式,这些处理器可以更有效地处理多媒体应用程序。
发明内容
根据本发明的一个方面,提供一种执行逻辑比较操作的方法,包括:解码单个指令以指示第一操作数、第二操作数和所希望的操作, 所述第一操作数和所述第二操作数中的每一个都包含多个位;响应于所述单个指令,控制对所述第一操作数的一个或多个位与所述第二操作数的对应位进行的第一逐位逻辑AND操作,并且响应于所述单个指令,控制对所述第一操作数的一个或多个位与所述第二操作数的反码的对应位进行的第二逐位逻辑AND操作;根据所述第一逐位逻辑AND操作的结果修改第一状态标志的值,并且根据所述第二逐位逻辑AND操作的结果修改第二状态标志的值。
根据一个方面,所述第一操作数包括第一多个数据元素;所述第二操作数包括第二多个数据元素;对所述第一操作数的每一个数据元素的一个位执行所述逐位逻辑AND操作,并且所述第二操作数的所述对应位是所述第二操作数的每个数据元素的相同的各个位。
根据一个方面,所述数据元素可以是字节、字、双字和四字中的任何一个。
根据一个方面,所述一个位可以是最高有效位和最低有效位中的任何一个。
根据一个方面,所述第一和第二操作数每一个都包括128个位。
根据一个方面,所述第一状态标志为零标志,所述第二状态标志为进位标志。
根据一个方面,所述单个指令包括逻辑比较、设置零标志和进位标志(LCSZC)指令。
根据一个方面,还包括在处理器的LCSZC电路中执行所述控制和修改。
根据本发明的另一个方面,提供一种执行逻辑比较操作的装置,包括:解码器,用于接收待解码的单个指令,所述单个指令用于指示第一操作数、第二操作数和所希望的操作,所述第一操作数和所述第二操作数中的每一个都包含多个位;转化器,用于获得所述第二操作数的至少一些位的反码值;电路,用于响应于所述单个指令执行对所述第一操作数的一个或多个位与所述第二操作数的对应位进行的第一逐位逻辑AND操作,并且响应于所述单个指令执行对所述第一操作数的一个或多个位与所述反码值的对应位进行的第二逐位逻辑AN D操作;第一状态标志,由所述电路根据所述第一逐位逻辑AND操作的结果将所述第一状态标志修改为一个值;以及第二状态标志,由所述电路根据所述第二逐位逻辑AND操作的结果将所述第二状态标志修改为一个值。
根据一个方面,所述第一操作数包括第一多个数据元素;所述第二操作数包括第二多个数据元素;对所述第一操作数的每一个数据元素的一个位执行所述第一逐位逻辑AND操作,并且所述第二操作数的所述对应位是所述第二操作数的每个数据元素的相同的各个位。
根据一个方面,所述电路包括:第一组AND门,用于所述第一操作数的每一个数据元素的所述位和所述第二操作数的所述对应位;第二组AND门,用于所述第一操作数的每一个数据元素的所述位和所述第二操作数的所述对应位的所述反码值;第一NAND门,用于确定所述第一逐位逻辑AND操作的结果;第二NAND门,用于确定关于所述反码值的所述第二逐位逻辑AND操作的结果。
根据一个方面,所述数据元素可以是字节、字、双字和四字中的任何一个。
根据一个方面,所述一个位可以是最高有效位和最低有效位中的任何一个。
根据本发明的又一个方面,提供一种计算系统,包括:存储指令的可寻址存储器和处理器,所述处理器包括:存储第一状态标志值且架构上可见的第一存储区域,以及存储第二状态标志值且架构上可见的第二存储区域;解码器,用于接收待解码的单个指令,所述单个指令用于指示第一操作数、第二操作数和所希望的操作,所述第一操作数和所述第二操作数中的每一个都包含多个位;以及执行单元,用于响应于所述单个指令,控制对所述第一操作数的一个或多个位与所述第二操作数的相应位进行的第一逐位逻辑AND操作,并且根据所述第一逐位逻辑AND操作的结果修改所述第一状态标志值;并且所述执行单元用于响应于所述单个指令,控制对所述第一操作数的一个或多个位与所述第二操作数的一个或多个位的反码值进行的第二逐位逻辑AND操作,并且根据所述第二逐位逻辑AND操作的结果修改 所述第二状态标志值。
根据一个方面,所述第一操作数包括第一多个数据元素;所述第二操作数包括第二多个数据元素;对所述第一操作数的每一个数据元素的一个位执行所述第一逐位逻辑AND操作,并且所述第二操作数的所述对应位是所述第二操作数的每个数据元素的相同的各个位。
根据一个方面,所述执行单元包括:第一组AND门,用于所述第一操作数的每一个数据元素的所述位和所述第二操作数的所述对应位;第二组AND门,用于所述第一操作数的每一个数据元素的所述位和所述第二操作数的所述对应位的所述反码值;第一NAND门,用于确定所述第一逐位逻辑AND操作的结果;第二NAND门,用于确定关于所述反码值的所述第二逐位逻辑AND操作的结果。
根据一个方面,所述数据元素可以是字节、字、双字和四字中的任何一个。
根据一个方面,所述一个位可以是最高有效位和最低有效位中的任何一个。
根据一个方面,所述第一状态标志为零标志,所述第二状态标志为进位标志。
附图说明
本发明借助于示例进行说明,但并不局限于附图中的示图。
图1a-1c说明根据本发明可选择实施例的示例计算机系统。
图2a-2b说明根据本发明可选择实施例的处理器的寄存器堆。
图3说明由用于处理数据的处理器所执行的处理的至少一个实施例的流程图。
图4说明根据本发明可选择实施例的打包数据类型。
图5说明根据本发明至少一个实施例的寄存器内打包字节和寄存器内打包字的数据表示。
图6说明根据本发明至少一个实施例的寄存器内打包双字和寄存器内打包四字的数据表示。
图7a-7d是说明用于执行逻辑-比较(logical-compare)、设置-零-和-进位-标志(set-zero-and-carry-flag)操作的处理的各种实施例的流程图。
图8a-8c说明用于执行逻辑-比较、设置-零-和-进位-标志操作的电路的可选择实施例。
图9是说明处理器指令的操作码格式的各种实施例的框图。
细节描述
这里所公开的是包括在响应于单个控制信号而对多位数据执行逻辑比较操作的处理器指令中的方法、系统和电路的多个实施例。该逻辑比较操作中所涉及的数据可以是打包或非打包数据。对于至少一个实施例而言,处理器耦合到存储器。该存储器中已经存储了第一数据和第二数据。处理器响应于所接收的指令,对在第一数据和第二数据中的数据元素执行逻辑比较操作。逻辑比较操作可以包括第一和第二数据的数据元素的位AND,并且还可以包括第一数据的数据元素的反码和第二数据的数据元素的位AND。根据该逻辑比较操作的结果,修改处理器的至少两个状态标志。这两个状态标志可以包括零标志(zero flag)和进位标志(carry flag)。这些标志可以在体系上对应用程序可见,并且可以是更大标志值的一部分,比如体系上可见的扩展标志(EFLAGS)寄存器。
本发明的这些和其它实施例可以根据下面的教导实现,并且显而易见的是,可以用下面的教导进行各种修改和改变而不背离本发明宽 泛的精神和范围。相应地,说明书和附图被看成是说明性的而不具有限制性意义,并且本发明仅根据权利要求来确定。
定义
为了提供用于理解本发明实施例的描述的基础,提供以下定义。位X到位Y:
定义二进制数的子字段。例如,字节001110102(以二进制示出)的位6到位0代表子字段1110102。在二进制数后的‘2’表示二进制。因此,10002等于810,而F16等于1510
RX:是寄存器。寄存器是任何能够存储和提供数据的设备。寄存器的进一步的功能在下面描述。寄存器不是必需与处理器包括在相同的芯片中或相同的封装中。
SRC和DEST:
用于标识存储区域(例如,存储器地址、寄存器等)源1-i和结果1-i以及Destin:
表示数据。
总概
本申请描述了包括在用于打包或非打包数据的逻辑比较操作的处理器指令中的方法、装置和系统的实施例。更具体而言,所述指令可以用于对数据进行逻辑比较,并且随后根据该比较设置零标志和进位标志。对于至少一个实施例,使用下面表1a和表1b中所示的单个指令执行两个逻辑比较操作。所述比较操作包括目标操作数和源操作数的逐位逻辑AND以及目标操作数的反码与源操作数的逐位逻辑AND。表1a示出所公开的逻辑比较操作的一个实施例的简化表示,而表1b示出所公开的逻辑比较指令的实施例的在位级别上的示例,给出了一些样本值。对于在表1a和1b中所示出的实施例,虽然源操作数和目标操作数中的数据可以是打包数据,但是其可以是任何数据表示,而并非必须是打包数据。在源和/或目标操作数的数据是128-位的单个实体且由此并不将其认为是“打包”数据的情况下,在这里将其称为“非打包(unpacked)”数据,其简单地表示该数据不需要被再分割成组分(component)表示,并且可以被认为是单个数据值。虽然为了简化说明,表1a中的数据被表示为32-位的值,但本领域技 术人员将认识到,在表1a和1b中所说明的概念可以应用于任何长度的数据,包括更小的数据长度(例如,4-位、8-位和16-位的长度)以及更大的数据长度(例如,64-位和128-位的长度)。
表1a
逻辑比较Dest,Source
Figure DEST_PATH_S2007101441872D00041
表1b
逻辑比较Dest,Source-示例值
  目标操作数  10101010010101010000111100000000
  源操作数  01010101101010101111000000001111
  DestAND(逐位)Source  00000000000000000000000000000000
  [NOT Dest]AND(逐位)Source  01010101101010101111000000001111
  零标志=TRUE
  进位标志=FALSE
对于至少一个实施例,源和目标操作数的数据值可以表示打包数据。用于该实施例的源操作数和目标操作数的每个打包组分可以表示任何类型的数据。
表2a和2b说明组分A1到A4以及B1到B4,其每个都表示32- 位单精度浮点数的二进制表示。然而,这样的说明不应当被看成是限制。本领域技术人员将认识到每个组分可以表示任何数据,包括任何整数或浮点数据格式,以及串格式或任何其它类型的数据格式。
表2a
逻辑比较Dest,Source
Figure DEST_PATH_S2007101441872D00051
表2b
逻辑比较Dest,Source-示例值
  A1:-118.625  1100001011101101  0100000000000000   A2:0.15625  0011111000100000  0000000000000000   A3:-2.125  1100000000001000  0000000000000000   A4:2.5  0100000000100000  0000000000000000
  B1:-0.0  1000000000000000  0000000000000000   B2:0.0  0000000000000000  0000000000000000   B3:-0.0  1000000000000000  0000000000000000   B4:0.0  0000000000000000  0000000000000000
  A1AND B1  1000000000000000  0000000000000000   A2AND B2  0000000000000000  0000000000000000   A3AND B3  1000000000000000  0000000000000000   A4AND B4  0000000000000000  0000000000000000
  [NOTA1]AND B1  0000000000000000  0000000000000000   [NOTA2]AND B2  0000000000000000  0000000000000000   [NOTA3]AND B3  0000000000000000  0000000000000000   [NOTA4]AND B4  0000000000000000  0000000000000000
  零标志=FALSE
  进位标志=TRUE
对于打包实施例,例如表2a和2b所说明的,可以这样来利用可选择实施例:使得在比较操作期间,仅仅对每个打包元素的特定的位进行操作。例如,在下面将结合图7c、7d、8b和8c的讨论对至少某些这样的实施例进行讨论。
本领域技术人员将认识到,只是为了易于说明,在表1a和2a中示出了中间值“中间结果1”和“中间结果2”,在表1b和2b中示出了二进制值的第三和第四行。虽然它们在至少一个实施例中可以这样进行存储,但是它们在表1a到2b中的表示不应当被看成意味着这些中间值必须存储在处理器中。可选择地,对于至少一个其它实施例,通过电路来确定这些中间值,而不将上述值存储在存储区域中。
在上面,表1a、1b、2a和2b描述了“逻辑比较,设置零标志和进位标志”(“LCSZC”)指令的实施例,该指令对源操作数和目标操作数的128个位中的每一个位执行逐位的AND操作,并且还对源操作数的128个位中的每一个位与目标操作数的反码值的128个位中的每一位执行逐位的AND操作,并且根据该AND操作的结果来设置零标志和进位标志。
零标志和进位标志的设置支持基于逻辑比较的分支行为。对于至少一个实施例,该LCSZC指令后面可以跟着单独的分支指令,该分支指令基于所述标志中的一个或两个的值,指示希望由处理器执行的分支操作(例如,见下面表4的伪代码)。本领域技术人员将认识到,状态标志的设置不是分支操作可以用以利用比较结果的唯一硬件机制,也可以实现其它机制,以便基于比较结果来支持分支。因此,虽然下面描述的具体实施例指示作为逻辑比较的结果,可以设置零标志和进位标志,但这种支持分支的标志设置并不要求用于所有实施例。相应地,在这里使用的术语“LCSZC”不应当被看成限制性的,原因在于零标志和进位标志的设置并非对于所有实施例都是必需的。
例如,对于一个可选择的实施例,分支行为可以作为在一个指令中融合了比较和分支的LCSZC指令(例如融合“测试-和-分支(test-and-branch)”指令)的变量的直接结果来执行。对于融合“测试-和-分支”指令的至少一个实施例,作为所执行的逻辑比较的结果,不设置任何状态标志。
可选择的实施例可以改变在数据元素和中间结果中位的数量。而且,可选择的实施例可以只比较源值和目标值各自的某些位。此外,可选择的实施例可以改变所使用的数据元素的数量以及所产生的中间结果的数量。例如,可选择的实施例可以包括但不局限于:用于无符号源和有符号目标的LCSZC指令;用于有符号源和无符号目标的LCSZC指令;用于无符号源和无符号目标的LCSZC指令;以及用于有符号源和有符号目标的LCSZC指令。在每个示例中,所述源和目每一个都可以都包含8-位、16-位、32-位或64-位组分的打包数据。可选择地,所述源和目标数据不是打包的,而是一个128-位的数据元素。源和目标的打包性质不需要是对称的,并且如果源和目标都是打包的,源和目标的数据大小也无需必须相同。
计算机系统
图1a示出了根据本发明的一个实施例的示例计算机系统100。计算机系统100包括用于信息通信的互连部件101。该互连部件101可以包括多分支(multi-drop)总线、一个或多个点对点互连部件或两者的任意组合,以及任何其它通信硬件和/或软件。
图1a示出了用于处理信息的、与互连部件101耦合的处理器109。处理器109表示任何架构类型的中央处理单元,包括CISC或RISC类型的架构。
计算机系统100还包括随机访问存储器(RAM)或其它动态存储设备(称为主存储器104),其耦合到互连部件101,用于存储信息和由处理器109执行的指令。主存储器104还可以用于在处理器109执行指令期间存储临时变量或其它中间信息。
计算机系统100还包括只读存储器(ROM)106和/或其它静态存储设备,其耦合到互连部件101,用于为处理器109存储静态信息和指令。数据存储设备107耦合到互连部件101,用于存储信息和指令。
图1a还示出:处理器109包括执行单元130、寄存器堆(registerfile)150、高速缓存160、解码器165和内部互连部件170。当然,处理器109包括不是理解本发明所必需的其他电路。
解码器165用于对处理器109接收的指令进行解码,而执行单元 130用于执行处理器109接收的指令。如这里所述,除了识别典型地由通用处理器执行的指令之外,解码器165和执行单元130还识别用于执行逻辑-比较-和-设置-零-和-进位-标志(LCSZC)操作的指令。解码器165和执行单元130识别用于对打包数据和非打包数据执行LCSZC操作的指令。
执行单元130通过内部互连部件170耦合到寄存器堆150。而且,内部互连部件170无需必须是多分支总线,在可选择的实施例中可以是点对点互连部件或其它类型的通信路径。
一个(或多个)寄存器堆150表示处理器109中用于存储信息(包括数据)的存储区域。可以理解的是,本发明的一个方面是用于对打包或非打包数据执行LCSZC操作的、所描述指令的实施例。根据本发明的这个方面,用于存储数据的存储区域不是关键的。然而,寄存器堆150的实施例在后面参考图2a-2b进行描述。
执行单元130耦合到高速缓存160和解码器165。高速缓存160用于对例如来自主存储器104的数据和/或控制信号进行高速缓存。解码器165用于将处理器109接收的指令解码成控制信号和/或微代码入口点。可以将这些控制信号和/或微代码入口点从解码器165传送给执行单元130。
执行单元130响应于这些控制信号和/或微代码入口点,执行适当的操作。例如,如果接收到LCSZC指令,则解码器165使执行单元130执行所要求的比较逻辑。对于至少一些实施例(比如那些没有实现融合“测试和分支”操作的实施例),执行单元130可以相应地设置零标志和进位标志(例如,见逻辑比较电路145)。对于这样的实施例,处理器109的分支单元(未示出)可以在随后的指示目标代码位置的分支指令的执行期间使用这些标志。
可选择地,执行单元130本身可以包括基于逻辑比较来影响分支的分支电路(未示出)。对于这样的实施例,由LCSZC指令所提供的“分支支持”是跳转到指定目标代码位置的控制跳转,而不是控制标志的设置。对于至少一个实施例,执行跳转或“分支”的分支电路可以是逻辑比较电路145的一部分。
可以使用任意数量的不同机制(例如,查寻表、硬件实现、PLA 等)来实现解码器165。因此,虽然解码器165和执行单元130对各种指令的执行在这里可以由一系列if/then语句表示,但可以理解的是,指令的执行并不要求这些if/then语句的串行处理。相反地,在逻辑上执行该if/then处理的任何机制均认为是在本发明的范围内。
图1a还示出了数据存储设备107(例如,磁盘、光盘、和/或其它机器可读介质),其可以耦合到计算机系统100。另外,数据存储设备107示出为包括由处理器109执行的代码195。代码195可以包括LCSZC指令142的一个或多个实施例,并且可以将其编写为:使处理器109用一个(或多个)LCSZC指令142执行用于任意数量的目的(例如,运动视频压缩/解压缩、图像滤波、音频信号压缩、滤波或合成、调制/解调等)的位测试。
计算机系统100还可以通过互连部件101耦合到用于为计算机用户显示信息的显示设备121。显示设备121可以包括帧缓冲器、专用图形渲染设备、液晶显示器(LCD)和/或平板显示器。
可以将包括字母数字和其它键的输入设备122耦合到互连部件101,用于传递信息和命令选择给处理器109。另一种类型的用户输入设备是光标控制器123,比如鼠标、轨迹球、笔、触摸屏或光标方向键,用于传递方向信息和命令选择给处理器109,并用于控制显示设备121上的光标移动。这些输入设备典型地在两个轴(第一轴(例如,x)和第二轴(例如,y))上具有两个自由度,这允许该设备在平面上指定位置。然而,本发明不应当局限于只具有两个自由度的输入设备。
可以耦合到互连部件101的另一个设备是可以用来在介质(比如纸、胶卷或类似的介质类型)上打印指令、数据或其它信息的硬拷贝设备124。此外,计算机系统100可以耦合到用于声音记录和/或重放的设备125,比如用来记录信息的、耦合到麦克风的音频数字化仪。此外,设备125可以包括用来播放数字化声音的、耦合到数模(D/A)转换器的扬声器。
计算机系统100可以是计算机网络(例如,LAN)中的终端。从而计算机系统100可以是计算机网络的计算机子系统。计算机系统100可选择性地包括视频数字化设备126和/或通信设备190(例如, 提供与外部设备或网络之间的通信的串行通信芯片、无线接口、以太网芯片或调制解调器)。视频数字化设备126可以用于拍摄视频图像,视频图像可以被传送到计算机网络上的其它设备。
对于至少一个实施例,处理器109支持与现存的由加利福利亚Santa Clara的Intel公司制造的处理器(比如,例如,Intel
Figure DEST_PATH_2007101441872_0
Pentium
Figure DEST_PATH_2007101441872_1
 处理器、Intel
Figure DEST_PATH_2007101441872_2
Pentium
Figure DEST_PATH_2007101441872_3
Pro处理器、Intel
Figure DEST_PATH_2007101441872_4
Pentium
Figure DEST_PATH_2007101441872_5
II处理器、Intel
Figure DEST_PATH_2007101441872_6
Pentium
Figure DEST_PATH_2007101441872_7
III处理器、Intel
Figure DEST_PATH_2007101441872_8
Pentium
Figure DEST_PATH_2007101441872_9
4处理器、Intel Itanium
Figure DEST_PATH_2007101441872_11
处理器、IntelItanium2处理器或Intel
Figure DEST_PATH_2007101441872_14
CoreTM Duo处理器)使用的指令集相兼容的指令集。由此,处理器109能够支持除了本发明的操作之外的现存的处理器操作。处理器109还可以适于以一种或多种处理技术制造,并且通过足够详细地在机器可读介质上对其进行表示,可以适于方便所述制造。虽然下面描述的本发明与基于x86的指令集相结合,但可选择的实施例可以将本发明与其它指令集相结合。例如,本发明可以与使用与基于x86的指令集不同的指令集的64-位处理器相结合。
图1b示出了用于实现本发明原理的数据处理系统102的可选择实施例。数据处理系统102的一个实施例是采用Intel XScaleTM技术的应用处理器。本领域技术人员易于理解的是,这里所描述的实施例可以与可选择的处理系统一起使用,而不背离本发明的范围。
计算机系统102包括能够执行LCSZC操作的处理内核110。对于一个实施例,处理内核110表示任何架构类型的处理单元,包括但不局限于:CISC、RISC或VLIW类型的架构。处理内核110也可以适于采用一种或多种处理技术制造,并且通过足够详细地在机器可读介质上对其进行表示,可以适于方便所述制造。
处理内核110包括执行单元130、一组寄存器堆150和解码器165。处理内核110还包括对于理解本发明所不需要的其他电路(未示出)。
执行单元130用于执行由处理内核110接收的指令。除了识别典型的处理器指令外,执行单元130还识别用于对打包和非打包数据格式执行LCSZC操作的指令。由解码器165和执行单元130所识别的指令集可以包括一个或多个用于LCSZC操作的指令,还可以包括其 它打包指令。
执行单元130通过内部总线(再次论之,其可以是包括多分支总线、点对点互连部件等的任何类型的通信路径)耦合到寄存器堆150。寄存器堆150表示处理内核110的用于存储信息(包括数据)的存储区域。如前所述,可以理解的是,用于存储数据的存储区域不是关键的。执行单元130耦合到解码器165。解码器165用于将处理内核110接收的指令解码成控制信号和/或微代码入口点。对这些控制信号和/或微代码入口点进行响应。这些控制信号和/或微代码入口点可以被传送到执行单元130。执行单元130可以响应于所接收的控制信号和/或微代码入口点,来执行适当操作。对于至少一个实施例,例如,执行单元130可以执行这里描述的逻辑比较,并且还可以设置这里讨论的状态标志或到指定代码位置的分支,或两者都设置。
处理内核110与总线214耦合,以便与其它各种系统设备进行通信,这些系统设备包括但不局限于:例如,同步动态随机访问存储器(SDRAM)控制器271、静态随机访问存储器(SRAM)控制器272、猝发式闪速存储器接口(burst flash memory interface)273、个人计算机存储卡国际协会(PCMCIA)/小型闪存(compact flash,CF)卡控制器274、液晶显示器(LCD)控制器275、直接存储器访问(DMA)控制器276和可选择总线主接口277。
对于至少一个实施例,数据处理系统102还可以包括用于通过I/O总线295与各种I/O设备通信的I/O桥290。这样的I/O设备可以包括但不局限于:例如,通用异步接收器/发送器(UART)291、通用串行总线(USB)292、蓝牙无线UART293以及I/O扩展接口294。如同上面讨论的其它总线,I/O总线295可以是包括多分支总线、点对点互连部件等的任何类型的通信路径。
数据处理系统102的至少一个实施例为移动电话提供网络和/或无线通信以及能够对打包和非打包数据执行LCSZC操作的处理内核110。处理内核110可以用以下进行编程:包括离散变换、滤波或卷积在内的各种音频、视频、图像以及通信算法;诸如颜色空间变换、视频编码运动估计或视频解码运动补偿之类的压缩/解压缩技术;以及诸如脉冲编码调制(PCM)之类的调制/解调(MODEM)功能进 行编程。
图1c示出了能够对打包和非打包数据执行LCSZC操作的数据处理系统103的可选择实施例。根据一个可选择实施例,数据处理系统103可以包括芯片封装310,其包含主处理器224以及一个或多个协处理器226。附加的协处理器226的可选择性在图1c中用虚线表示。例如,一个或多个协处理器226可以是能够执行SIMD指令的图形协处理器。
图1c示出:数据处理系统103还可以包括高速缓冲存储器278和输入/输出系统265,两者都耦合到芯片封装310。输入/输出系统295可以选择性地耦合到无线接口296。
协处理器226能够执行通用计算操作,并且还能够执行SIMD操作。对于至少一个实施例,协处理器226能够对打包和非打包数据执行LCSZC操作。
对于至少一个实施例,协处理器226包括执行单元130和一个(或多个)寄存器堆209。主处理器224的至少一个实施例包括用于对由执行单元130所执行的指令集(包括LCSZC指令)中的指令进行识别和解码的解码器165。对于可选择实施例,协处理器226还包括用于对指令集(包括LCSZC指令)中的指令进行解码的解码器166的至少一部分。数据处理系统103还包括对理解本发明不是必需的其他电路(未示出)。
在运行中,主处理器224执行用于控制通用类型的数据处理操作的数据处理指令流,所述通用类型的数据处理操作包括与高速缓冲存储器278和输入/输出系统295的交互。嵌入在数据处理指令流中的是协处理器指令。主处理器224的解码器165将这些协处理器指令识别为应当由附加的协处理器226执行的类型。相应地,主处理器224在协处理器互连部件236上发布这些协处理器指令(或表示协处理器指令的控制信号),任何附加的一个(或多个)协处理器从协处理器互连部件236上接收这些指令(或信号)。对于图1c所示的单个协处理器的实施例,协处理器226接受并执行任何发给它的所接收的协处理器指令。协处理器互连部件可以是包括多分支总线、点对点互连部件等的任何类型的通信路径。
数据可以通过无线接口296接收,以便由协处理器指令进行处理。对于一个示例,可以以数字信号的形式接收语音通信,所述数字信号可以由协处理器指令进行处理以便重新生成表示语音通信的数字音频采样。对于另一示例,可以以数字比特流的形式接收压缩的音频和/或视频,所述数字比特流可以由协处理器指令处理以便重新生成数字音频采样和/或运动视频帧。
对于至少一个可选择实施例,主处理器224和协处理器226可以集成到包括执行单元130、一个(或多个)寄存器堆209以及解码器165在内的单个处理内核中,其中,解码器165用来识别由执行单元130执行的指令集(包括LCSZC指令)中的多个指令。
图2a示出了根据本发明的一个实施例的处理器的寄存器堆。寄存器堆150可以用于存储信息,包括:控制/状态信息、整数数据、浮点数据和打包数据。本领域技术人员将认识到,前述的信息和数据列表不是穷举的、全包含的列表。
对于图2a所示的实施例,寄存器堆150包括整数寄存器201、寄存器209、状态寄存器208和指令指针寄存器211。状态寄存器208指示处理器109的状态,并且可以包括诸如零标志和进位标志的各种状态寄存器。指令指针寄存器211存储将要执行的下一个指令的地址。整数寄存器201、寄存器209、状态寄存器208和指令指针寄存器211都耦合到内部互连部件170。还可以将其他的寄存器耦合到内部互连部件170。内部互连部件170可以是多分支总线,但不需要必须如此。可替换地,内部互连部件170可以是包括点对点互连部件在内的任何其它类型的通信路径。
对于一个实施例,寄存器209可以既用于打包数据又用于浮点数据。在这样的一个实施例中,在任何给定时刻,处理器109把寄存器209看成是栈参考浮点寄存器(stack referenced floating point register)或非栈参考打包数据寄存器。在该实施例中,包含了一种机制,其允许处理器109在将寄存器209作为栈参考浮点寄存器进行操作和将寄存器209作为非栈参考打包数据寄存器进行操作之间进行切换。在另一个这样的实施例中,处理器109可以同时将寄存器209作为栈参考浮点寄存器和非栈参考打包数据寄存器进行操作。在另一个实施例 中,作为另一示例,这些寄存器可以用来存储整数数据。
当然,可选择的实施例可以实现为包括更多或更少的寄存器组。例如,可选择的实施例可以包括用于存储浮点数据的独立的浮点寄存器组。作为另一示例,可选择的实施例可以包括每个都用于存储控制/状态信息的第一组寄存器以及每个都能够存储整数、浮点数和打包数据的第二组寄存器。作为澄清,实施例的寄存器不应当在意思上限制于特殊类型的电路。相反地,实施例的寄存器只需要能够存储和提供数据并执行这里描述的功能。
可以实现各种寄存器组(例如,整数寄存器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个寄存器。
图2b示出了根据本发明的一个可选择实施例的处理器的寄存器堆。寄存器堆150可以用于存储信息,包括:控制/状态信息、整数数据、浮点数据和打包数据。在图2b所示的实施例中,寄存器堆150包括整数寄存器201、寄存器209、状态寄存器208、扩展寄存器210和指令指针寄存器211。状态寄存器208、指令指针寄存器211、整数寄存器201、寄存器209全部都耦合到内部互连部件170。相应地,扩展寄存器210也耦合到内部互连部件170。内部互连部件170可以是多分支总线,但不需要必须如此。可替换地,内部互连部件170可以是包括点对点互连部件在内的任何其它类型的通信路径。
对于至少一个实施例,扩展寄存器210既用于打包的整数数据也 用于打包的浮点数据。对于可选择的实施例,扩展寄存器210可用于标量数据(scalar data)、打包的布尔数据、打包的整数数据和/或打包的浮点数据。当然,可选择的实施例可以实现为包含更多或更少的寄存器组、在每组中有更多或更少的寄存器或在每个寄存器中的更多或更少的数据存储位,而不脱离本发明更宽的范围。
对于至少一个实施例,整数寄存器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个寄存器。
图3示出了根据本发明的一个实施例,用于操作数据的处理300的一个实施例的流程图。也就是说,图3示出了例如对打包数据执行LCSZC操作、对非打包数据执行LCSZC操作或执行一些其它操作时,由处理器109(例如,见图1a)进行的处理。这里所讨论的处理300和其它处理由处理块来执行,所述处理块可以包括专用硬件或者或可由通用机器或由专用机器或由它们的组合执行的软件或固件操作码。
图3示出:用于该方法的处理在“开始”处开始,并进行到处理块301。在处理块301,解码器165(例如,见图1a)接收来自高速缓存160(例如,见图1a)或互连部件101(例如,见图1a)的控制信号。对于至少一个实施例,在块301接收的控制信号可以是通常称为软件“指令”的控制信号类型。解码器165将控制信号解码以确定将要执行的操作。处理从处理块301进行到处理块302。
在处理块302,解码器165访问寄存器堆150(图1a)或存储器中的单元(例如,见图1a的主存储器104或高速缓冲存储器160)。根据控制信号中指定的寄存器地址,来访问寄存器堆150中的寄存器或存储器中的存储单元。例如,用于操作的控制信号能够包含SRC1、SRC2和DEST寄存器地址。SRC1是第一源寄存器的地址。SRC2是 第二源寄存器的地址。在某些情况下,SRC2地址是可选的,因为并非所有操作都要求两个源地址。如果对于一个操作没有要求SRC2地址,则仅使用SRC1地址。DEST是存储结果数据的目标寄存器的地址。对于至少一个实施例,在由解码器165识别的至少一个控制信号中,SRC1或SRC2也可以用作DEST。
在相应寄存器中所存储的数据分别称为Source1、Source2和Result。在一个实施例中,这些数据中的每一个可以是64位长度。对于可选择的实施例,这些数据中的一个或多个可以是其它长度,比如128位长度。
对于本发明的另一个实施例,SRC1、SRC2和DEST中的任何一个或全部能够确定在处理器109(图1a)或处理内核110(图1b)的可寻址存储空间中的存储单元。例如,SRC1可以标识主存储器104中的存储单元,而SRC2标识在整数寄存器201中的第一寄存器,而DEST标识寄存器209中的第二寄存器。为了简化这里的描述,本发明将描述与寄存器堆150有关的访问。然而,本领域技术人员将认识到,替代地,这些所描述的访问也可以使用于存储器。
处理从块302进行到处理块303。在处理块303,执行单元130(例如,见图1a)能够对所访问的数据执行操作。
处理从处理块303进行到处理块304。在处理块304,根据控制信号的要求,将结果存储回寄存器堆150或存储器。然后处理在“停止”处结束。
数据存储格式
图4示出了根据本发明一个实施例的多个打包数据类型。示出了四个打包数据和一个非打包数据格式,包括打包字节421、打包半(packed half)422、打包单(packed single)423、打包双(packed double)424和非打包双四字412。
对于至少一个实施例,打包字节格式421是包括16个数据元素(B0-B15)的128位长。每个数据元素(B0-B15)是一个字节(例如,8位)长。
对于至少一个实施例,打包半格式422是包括8个数据元素(Half0到Half7)的128位长。每个数据元素(Half0到Half7)可以 保存16位的信息。可选择地,这些16-位的数据元素中的每一个可以被称为“半字”或“短字”,或简单地称为“字”。
对于至少一个实施例,打包单格式423可以是128位长并且可以保存4个423数据元素(Single0到Single3)。数据元素(Single0到Single3)中的每一个可以保存32位的信息。可选择地,每一个32-位数据元素可以被称为“dword”或“双字”。每个数据元素(Single0到Single3)可以表示例如32-位的单精度浮点值,因此称作“打包单”格式。
对于至少一个实施例,打包双格式424可以是128位长并且可以保存两个数据元素。打包双格式424的每个数据元素(Double0、Double1)可以保存64-位的信息。可选择地,每个64-位数据元素可以被称为“qword”或“四字(quadword)”。每个数据元素(Double0、Double1)可以表示例如64-位的双精度浮点值,因此称作“打包双”格式。
非打包双四字格式412可以保存多达128位的数据。该数据不需要必须是打包数据。例如,对于至少一个实施例,非打包双四字格式412的128位的信息可以表示单个标量数据,比如字符、整数、浮点值或二进制的位-掩码值。可选择地,非打包双四字格式412的128位可以表示多个不相干的位(比如状态寄存器值,其中每一位或位组表示不同标志)等等的集合。
对于本发明的至少一个实施例,打包单格式423和打包双格式424的数据元素可以是如上所指示的打包的浮点数据元素。在本发明的可选择实施例中,打包单格式423和打包双格式424的数据元素可以是打包整数数据元素、打包布尔数据元素或打包浮点数据元素。对于本发明的另一可选择的实施例,打包字节格式421、打包半格式422、打包单格式423和打包双格式424的数据元素可以是打包整数数据元素或打包布尔数据元素。对于本发明的可选择实施例,并非允许或支持所有的打包字节数据格式421、打包半数据格式422、打包单数据格式423和打包双数据格式424。
图5和6示出了根据本发明的至少一个实施例的寄存器内的打包数据存储表示。
图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。
因此,在寄存器中所有可利用的位都被使用。该存储安排增加了处理器的存储效率。而且,使用被访问的16个数据元素,现在可以同时对16个数据元素执行一个操作。
有符号打包字节的寄存器内表示511示出了有符号打包字节的存储。注意,每个字节数据元素的第8位(MSB)是符号指示器(“s”)。
图5还分别示出了无符号和有符号打包字的寄存器内表示512和513。
无符号打包字的寄存器内表示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。
有符号打包字的寄存器内表示513类似于无符号打包字的寄存器内表示512。注意,符号位(“s”)存储在每个字数据元素的第16位(MSB)。
图6分别示出了无符号和有符号打包双字的寄存器内格式514和515。无符号打包双字的寄存器内表示514示出了扩展寄存器210怎样存储4个双字(每个32位)的数据元素。双字0存储在寄存器的位31到位0。双字1存储在寄存器的位63到位32。双字2存储在寄存器的位95到位64。双字3存储在寄存器的位127到位96。
有符号打包双字的寄存器内表示515类似于无符号打包双字的寄存器内表示514。注意,符号位(“s”)是每个双字数据元素的第32位(MSB)。
图6还分别示出了无符号和有符号打包四字的寄存器内格式516和517。无符号打包四字的寄存器内表示516示出了扩展寄存器210怎样存储2个四字(每个64位)的数据元素。四字0存储在寄存器的位63到位0。四字1存储在寄存器的位127到位64。
有符号打包四字的寄存器内表示517类似于无符号打包四字的寄存器内表示516。注意,符号位(“s”)是每个四字数据元素的第64位(MSB)。
一个(或多小)逻辑比较-和-交换、设置-零-和-进位-标志操作
对于本发明的至少一个实施例,SRC1寄存器可以保存打包数据或非打包双四字数据(Source1),并且DEST寄存器也可以保存打包数据或非打包双四字数据(Dest)。对于至少一个实施例,在DEST寄存器中的Dest值或在SRC1寄存器中的Source1值可以是要用作逐位掩码值的双四字非打包数据。
通常,在LCSZC指令的第一步中,执行两个比较操作。通过对Source1中的每个位与Dest的相应位执行独立的逻辑比较(逐位AND操作),产生第一中间结果。通过对Source1中的每个位与Dest的相应位的反码执行独立的逻辑比较(逐位AND操作),产生第二中间结果。这些中间结果可以存储在临时存储单元(比如,例如,寄存器)或者可以根本不由处理器存储。
图7a是根据本发明的至少一个实施例的执行LCSZC操作的一般方法700的流程图。这里所公开的处理700和其它处理由多个处理块来执行,所述处理块可以包括专用硬件或可由通用机器或由专用机器或由它们的组合执行的软件或固件操作码。在下面的段落中,将参考图1a讨论图7a到7d。
图7a示出了方法700开始于“开始”处,并且进行到处理块701。在处理块701,解码器165对处理器109接收的控制信号进行解码。因此,解码器165对LCSZC指令的操作码进行解码。然后处理从处理块701进行到处理块702。
在处理块702,给定在指令中编码的SRC1和DEST地址,解码器165通过内部总线170访问寄存器堆150中的寄存器209。对于至少一个实施例,每一个在指令中的被编码的地址都指示扩展寄存器(例如,见图2b的扩展寄存器210)。对于该实施例,在块702中访问所指示的扩展寄存器210,以便为执行单元130提供存储在SRC1寄存器中的数据(Source1)以及存储在DEST寄存器中的数据(Dest)。对于至少一个实施例,扩展寄存器210通过内部总线170将数据传递给执行单元130。
处理从处理块702进行到处理块703。在处理块703中,解码器165使执行单元130能够执行该指令。对于至少一个实施例,通过给执行单元发送一个或多个控制信号以指示所希望的操作(LCZCS),来执行该使能703。处理从块703进行到处理块714和715。虽然块714和715被并列示出,但本领域技术人员将认识到,只要它们在同一周期或周期组中执行,这样的操作就需要被严格同时地执行,并且对于至少一个可选择的实施例,块714和715的处理可以串行执行。因此,不同的实施例可以以并行、串行、或串行与并行操作的某种组合来执行块714和715的处理。
在处理块714,执行以下内容。所有或一些Source1位与Dest值的相同的各个位进行逻辑AND。类似地,在处理块715中,所有或一些Source1位与Dest值的相同的各个位的反码进行逻辑AND。
处理从块714进行到块720。处理从块715进行到块721。
在处理块720中,基于在处理块714中执行的比较结果,修改处理器的状态。类似地,在处理块721中,基于在处理块715中执行的比较结果,修改处理器的状态。本领域技术人员将注意到,图7a所说明的方法700是非破坏性的,原因在于作为LCSZC操作的结果Source1和Dest操作数的值都没有被修改。替代地,零标志在块720中被修改而进位标志在块721中被修改。
在处理块720中,如果中间结果1的全部位都等于0(例如,逻辑低值),则将零标志的值设置为true值(例如,逻辑高值)。然而,如果即使是中间结果1中的一个位是逻辑高值,也会在块720中将零标志设置为false值(例如,逻辑低值)。
在处理块721中,如果中间结果2的全部位都等于0(例如,逻辑低值),则将进位标志的值设置为true值(例如,逻辑高值)。然而,如果即使是中间结果2中的一个位是逻辑高值,以会在块721中将进位标志设置为false值(例如,逻辑低值)。
可以理解的是,处理700的可选择实施例可以仅实现处理块714和720,而不实现处理块715和721,或者只实现处理块715和721,而不实现处理块714和720。同样可以理解的是,处理700的可选择实施例可以实现支持LCSZC指令的其他变形的其他处理块。
处理可以从块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)标志等。当然,前述的具体标志的列表目的只是说明;其它实施例可以包括更少、更多或不同的标志。
从可选择块722,处理结束于“结束”处。对于不包括可选择块722的实施例,处理在块720和721的处理后就结束于“结束”处。
图7b示出了在图7a中所示的一般方法700的至少一个具体实施例700b的流程图。对于图7b所示的具体实施例700b,对128位长并且可以是或可以不是打包数据的Source1和Dest数据值,执行LCSZC操作。(当然,本领域技术人员将认识到,也可以对其它长度的数据值执行图7b中所示出的操作,包括小于或大于128位的数据值)。
方法700b的处理块701b到703b的操作本质上与上面结合图7a中所示的方法700所描述的处理块701到703的操作相同。当解码器165在块703b中使执行单元130执行指令时,该指令是用于对Source1和Dest值的各个位执行逻辑AND比较的LCSZC指令。(例如,见图6中所示的有符号打包双字的寄存器内表示515)。这样的指令可以用可由应用程序程序员使用的助记忆指令(比如“PTEST”)称谓。处 理从块703b进行到块714b和715b。同样,块714b和715b可以并行执行,但不需要必须如此。
处理从处理块703b进行到处理块714b和715b。应当再次注意,如上结合图7a的处理块714和715所指示的,虽然在图7b中示出的块714b和715b被并行执行,但本发明应当被解释为在这方面不受限制。替代地,不同实施例可以以并行、串行、或串行与并行操作的某种组合来执行块714b和715b的处理。
在处理块714b中,执行以下内容。Source1的全部位与Dest值的相同的各个位进行逻辑AND。也就是说,将Source1[127:0]与Dest[127:0]的各个位的逐位AND操作的结果分配给中间结果1的位[127:0]。
类似地,在处理块715b中,Source1的全部位与Dest值的相同的各个位的反码进行逻辑AND。也就是说,将Source1[127:0]的位与Dest[127:0]的各个位的反码的逐位AND操作的结果分配给中间结果2的位[127:0]。
处理从块714b进行到块720b。处理从块715b进行到块721b。
在处理块720b中,基于处理块714b中执行的比较的结果,修改处理器的状态。类似地,在处理块721b中,基于处理块715b中执行的比较的结果,修改处理器的状态。本领域技术人员将注意到,图7b中所示的方法700b是非破坏性的,原因在于作为LCSZC操作的结果,Source1和Dest操作数的值都没有被修改。可替换地,零标志在块720b中被修改而进位标志在块721b中被修改。
在处理块720b中,如果中间结果1的全部位(例如,中间结果1的位[127:0])都等于0(例如,逻辑低值),则将零标志的值设置为true值(例如,逻辑高值)。然而,如果即使是中间结果1中的一个位是逻辑高值,也会在块720b中将零标志设置为false值(例如,逻辑低值)。
在处理块721b中,如果中间结果2的全部位(例如,中间结果2的位[127:0])都等于0(例如,逻辑低值),则将进位标志的值设置为true值(例如,逻辑高值)。然而,如果即使是中间结果2中的一个位是逻辑高值,也会在块721b中将进位标志设置为false值(例如, 逻辑低值)。
可以理解的是,处理700b的可选择实施例可以仅实现处理块714b和720b,而不实现处理块715b和721b,或者只实现处理块715b和721b,而不实现处理块714b和720b。同样可以理解的是,处理700b的可选择实施例可以实现支持LCSZC指令的其他变形的其他处理块。
处理可以从块720b和721b选择性地进行到块722b。在块722b中,可以修改处理器内的其它状态位。对于图7b中所示的实施例,在块722b中,给AF(辅助进位)、OF(溢出)、PF(奇偶)和SF(符号)标志分配逻辑低值。
从可选择块722b,处理结束于“结束”处。对于不包括可选择块722b的实施例,处理在块720b和721b的处理后就结束于“结束”处。
应当理解的是,处理块714、714b、715或715b的可选择实施例可以对有符号数据元素或无符号数据元素或两者的组合执行逻辑比较操作。
图7c示出了在图7a中所示的一般方法700的至少一个可选择的具体实施例700c的流程图。对于图7c中所示的具体实施例700c,对128位长的Source1和Dest数据值执行LCSZC操作。源操作数或目标操作数或两者都可以是打包的,原因在于源操作数的128-位数据值表示4个打包的32-位(“双字”)数据元素。例如,数据元素的每一个都可以表示32位的有符号单精度浮点值。
当然,本领域技术人员将认识到,也可以对包括小于或大于128位的数据值在内的其它长度的数据值以及包括字节(8位)和/或短字(16位)在内的其它大小的数据元素,执行图7c中所示的操作。
方法700c的处理块701c到703c的操作本质上与上面结合图7a中所示的方法700所描述的处理块701到703的操作相同。前述语句的例外是,对于处理块703c,当解码器165使执行单元130能够执行指令时,该指令是用于对Source1和Destination值的每个32-位双字的MSB执行逻辑AND比较的LCSZC指令。(例如,见图6中所示的有符号打包双字的寄存器内表示515)。这样的指令可以用可由 应用程序程序员使用的助记忆指令(比如“TESTPS”)称谓,其中“PS”表示打包的单精度数据元素。
处理从块703c进行到块714c和715c。同样,块714c和715c可以并行执行,但不需要必须如此。
在处理块714c中,执行以下内容。Source1的全部位与Dest值的相同的各个位进行逻辑AND。也就是说,将Source1[127:0]与Dest[127:0]的各个位的逐位AND操作的结果分配给中间结果1的位[127:0]。
类似地,在处理块715c中,Source1的全部位与Dest值的相同的各位的反码进行逻辑AND。也就是说,将Source1[127:0]的位与Dest[127:0]的各个位的反码的逐位AND操作的结果分配给中间结果2的位[127:0]。
处理从块714c进行到块720c。处理从块715c进行到块721c。
在块720c中,确定第一中间值(中间值1)的每个32-位双字的MSB。如果中间值1的位127、95、63和31等于0,则在块720c中将零标志设置为逻辑高值。否则,在块720c中将零标志设置为逻辑低值。
类似地,在块721c中,确定第二中间值(中间值2)的每个32-位双字的MSB。如果中间值2的位127、95、63和31等于0,则在块721c中将进位标志设置为逻辑高值。否则,在块721c中将进位标志设置为逻辑低值。作为方法700c的处理结果,源寄存器(SRC1)没有被修改。
处理从块720c和721c进行到“结束”或进行到可选择处理块722c。在块722c中,可以修改处理器内的其它状态位。对于图7c所示的实施例,在块722c中,给AF(辅助进位)、OF(溢出)、PF(奇偶)和SF(符号)标志分配逻辑低值。
对于不包括可选择块722c的实施例,处理在块720c和721c的处理后就结束于“结束”处。对于包括可选择块722c的实施例,处理在处理块722c完成之后结束。
图7d示出了在图7a中所示的一般方法700的至少一个可选择的具体实施例700d的流程图。对于图7d中所示的具体实施例700d, 对128位长的Source1和Dest数据值执行LCSZC操作。源操作数或目标操作数或两者都可以是打包的,原因在于源操作数的128-位数据值表示两个打包的64-位数据元素。例如,数据元素的每一个都可以表示64位有符号双精度浮点值。
当然,本领域技术人员将认识到,也可以对包括小于或大于128位的数据值在内的其它长度的数据值以及包括字节(8位)和/或短字(16位)在内的其它大小的数据元素,执行图7d中所示的操作。
方法700d的处理块701d到703d的操作本质上与上面结合图7a中所示的方法700所描述的处理块701到703的操作相同。前述语句的例外是,对于处理块703d,当解码器165使执行单元130能够执行指令时,该指令是用于对Source1和Destination值的每个64-位四字的MSB执行逻辑AND比较的LCSZC指令。(例如,见图6中所示的有符号打包四字的寄存器内表示517)。这样的指令可以用可由应用程序程序员使用的助记忆指令(比如“TESTPD”)称谓,其中“PD”表示打包的双精度数据元素。
处理从块703d进行到块714d和715d。同样,块714d和715d可以并行执行,但不需要必须如此。
在处理块714d中,执行以下内容。Source1的全部位与Dest值的相同的各个位进行逻辑AND。也就是说,将Source1[127:0]与Dest[127:0]的各个位的逐位AND操作的结果分配给中间结果1的位[127:0]。
类似地,在处理块715d中,Source1的全部位与Dest值的相同的各个位的反码进行逻辑AND。也就是说,将Source1[127:0]的位与Dest[127:0]的各个位的反码的逐位AND操作的结果分配给中间结果2的位[127:0]。
处理从块714d进行到块720d。处理从块715d进行到块721d。
在块720d中,确定第一中间值(中间值1)的每个64-位四字的MSB。如果中间值1的位127和63等于0,则在块720d中将零标志设置为逻辑高值。否则,在块720d中将零标志设置为逻辑低值。
类似地,在块721d中,确定第二中间值(中间值2)的每个64-位四字的MSB。如果中间值2的位127和63等于0,则在块721d 中将进位标志设置为逻辑高值。否则,在块721d中将进位标志设置为逻辑低值。作为方法700d的处理结果,源寄存器(SRC1)的初始值(Source1)和目标寄存器(DEST)的初始值(Dest)都没有被修改。
处理从块720d和721d进行到“结束”或进行到可选择处理块722d。在块722d中,可以修改处理器内的其它状态位。对于图7d中所示的实施例,在块722d中给AF(辅助进位)、OF(溢出)、PF(奇偶)和SF(符号)标志分配逻辑低值。
对于不包括可选择块722d的实施例,处理在块720d和721d的处理后就结束于“结束”处。对于包括可选择块722d的实施例,处理在处理块722d完成之后结束。
逻辑-比较、设置-零-和-进位标志电路
对于至少一些实施例,在与非打包数据的比较操作相同的时钟周期数内,可以对多个数据元素执行用于打包数据的各种LCSZC指令(例如,上面讨论的TESTPS和TESTPD)。为了在相同时钟周期数内完成执行,可以使用并行机制。也就是说,可以同时命令处理器的元件(比如寄存器和执行单元)对数据元素执行LCSZC操作。在下面更详细地讨论该并行操作。下面参考图1a讨论图8a和8b。
图8a示出了根据本发明至少一个实施例的对打包数据执行LCSZC操作的电路801。对于至少一个实施例,电路801可以是图1a所示的逻辑比较电路145的全部或一部分。
图8a描述了源操作数Source1[127:0]831和目标操作数Dest[127:0]833。对于至少一个实施例,源和目标被存储在N-位长的SIMD寄存器内,比如例如128-位的Inte1
Figure DEST_PATH_2007101441872_15
SSE2XMM寄存器(例如,见图2b的扩展寄存器210)。
图8a所示的具体示例实施例示出了LCSZC指令的双四字(128-位)实施例,其中将128位的源操作数和目标操作数的每一位与它们各自的配对位进行比较。对于该实施例,因为每个位都进行比较,所以该操作可以操作于(并且在功能上不知道)源操作数和目标操作数中的任何性质的128位;源操作数和目标操作数两者之一或两者都可以是打包数据、非打包标量数据、有符号数据或无符号数据。在一些 具体示例中,虽然打包数据源831和目标833可以被表示为具有128-位,但可以理解的是,这里所公开的原理可以扩展到其它传统上选择的长度,比如80-位、128-位或256-位。
操作控制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的输入。
第一组825中的每一个AND门819的输出是NAND门854的输入。NAND门854的至少一个作用是确定对源和目标的位进行AND的结果是否得到全0值(逻辑低值),并且如果是,就给零标志858传递逻辑高值从而对其进行设置。
第二组827中的每一个AND门820的输出是NAND门856的输入。NAND门856的至少一个作用是确定对源831的位和目标833的位的反码进行AND的结果是否得到全0值(逻辑低值),并且如果是,就给进位标志860传递逻辑高值从而对其进行设置。
双四字LCSZC指令的可选择实施例可以包括但不局限于:用于源和目标中的无符号双四字值的操作,以及用于源和目标中的有符号双四字值的操作。LCSZC指令的其它可选择实施例可以包括应用于其它大小的有符号或无符号数据元素的操作(例如,见用于有符号双字实施例的图8b以及用于有符号四字实施例的图8c)。
图8b示出了根据本发明的一个可选择实施例的对打包数据执行LCSZC操作的电路801b的至少一个实施例。操作控制800处理用于打包LCSZC指令的控制信号。这样的打包LCSZC指令可以是,例 如指示要对4个打包32位值执行的LCSZC操作的“TESTPS”指令。每个打包32位值可以表示例如单精度浮点值。对于该实施例,应当理解的是,可能仅仅其中一个操作数(例如,源831或目标833)包含打包的单精度浮点值。其它操作数可以包括例如位掩码。
图8a示出了操作控制800在使能880上输出信号以控制LCSZC电路801b。[本领域技术人员将认识到,图8b中所示的LCSZC电路801b可以通过调用图8a中所示的LCSZC电路801的逻辑元件的子集来实现]。
LCSZC电路801b包括两组AND门,其中每组都包括用于要与目标操作数的相应位进行比较的源操作数的每个位的一个AND门。对于图8b中所示的实施例,要对4个32-位(“双字”)数据元素中每一个的最高有效位进行比较。因此,第一组AND门包括门8191到8194,而第二组AND门包括门8201到8204
图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的输入。
图8b还示出了源操作数831中的4个32-位数据元素中的每一个和目标操作数833中的4个32-位数据元素中的每一个的MSB值是第二组AND门820中的一个门的输入。应当注意,第二组AND门(8201到8204)在将目标操作数833的每个双字的MSB转换为其反码值之后(见转化器844a-844d),才接收来自它们的输入。
更具体地,图8b示出了源操作数831的位127和目标操作数833的位127的反码都是门8201的输入、源操作数831的位93和目标操作数833的位93的反码都是门8202的输入、源操作数831的位63和目标操作数833的位63的反码都是门8203的输入、以及源操作数831的位31和目标操作数833的位31的反码都是门8204的输入。
AND门8191到8194中每一个的输出都是到NAND门855的输 入。NAND门855的至少一个作用是确定对源和目标的4个双字中每一个的最高有效位进行AND的结果是否得到全0值(逻辑低值),并且如果是,就给零标志858传递逻辑高值从而对其进行设置。
AND门8201到8204中每一个的输出都是到NAND门859的输入。NAND门859的至少一个作用是确定对源的位和目标的位的反码进行AND的结果是否得到全0值(逻辑低值),并且如果是,就给进位标志860传递逻辑高值从而对其进行设置。
比较4个双字中每一个的MSB的打包LCSZC指令的可选择实施例可以包括但不局限于:用于对一个操作数中的打包有符号双字值和另一个操作数中的位掩码进行的操作、对在源和目标两者中的无符号双字值进行操作、以及用于对在源和目标两者中的有符号双字值进行的操作、或者用于一个组合的操作。LCSZC指令的其它可选择实施例可以包括应用于其它大小的有符号或无符号数据元素的操作。
图8c示出了根据本发明的另一可选择实施例的对打包数据执行LCSZC操作的电路801c的至少一个实施例。操作控制800处理用于打包LCSZC指令的控制信号。这样的打包LCSZC指令可以是,例如,指示要对2个打包的双精度(64-位)浮点值执行LCSZC操作的“TESTPD”指令。操作控制800在使能880上输出信号以控制LCSZC电路801c。[本领域技术人员将认识到图8c中所示的LCSZC电路801c可以通过调用图8a中所示的LCSZC电路801的逻辑元件的子集来实现]。
与上面结合图8b所讨论的电路801b一样,LCSZC电路801c包括两组AND门,其中每组包括用于要与目标操作数的相应位进行比较的源操作数的每个位的一个AND门。对于图8c中所示的实施例,要对2个64-位(“四字”)数据元素的每一个的最高有效位进行比较。因此,第一组AND门包括门8191和8193,而第二组AND门包括门8201和8203
图8c示出了源操作数831中的2个64-位数据元素中每一个的MSB值和目标操作数833中的2个64-位数据元素中每一个的MSB值是第一组AND门(8191和8193)中的一个门的输入。更具体而言,图8c示出了源操作数831和目标操作数833的位127都是门8191的 输入,以及源操作数831和目标操作数833的位63都是门8193的输入。
图8c还示出了源操作数831中的2个64-位数据元素中每一个的MSB值和目标操作数833中的2个64-位数据元素中每一个的MSB值是第二组AND门(8201和8203)中的一个门的输入。应当注意,第二组AND门8201和8203仅仅在目标操作数833的每个四字的MSB已经转化成其反码值之后(见转化器844a和844c),才接收来自它们的输入。
更具体地,图8c示出了源操作数831的位127和目标操作数833的位127的反码都是门8201的输入,并且源操作数831的位63和目标操作数833的位63的反码都是门8203的输入。
AND门8191和8193中每一个的输出都是NAND门853的输入。NAND门853的至少一个作用是确定对源和目标的2个四字中每一个的最高有效位进行AND的结果是否都是0(逻辑低值),并且如果是,就给零标志858传递逻辑高值从而对其进行设置。
AND门8201和8203中每一个的输出都是NAND门857的输入。NAND门857的至少一个作用是确定对源和目标的2个四字中每一个的最高有效位进行AND的结果是否都是0(逻辑低值),并且如果是,就给进位标志860传递逻辑高值从而对其进行设置。
比较2个四字中每一个的MSB的打包LCSZC指令的可选择实施例可以包括但不局限于:用于对源和目标两者中的无符号四字值的操作,以及用于对源和目标两者中的有符号四字值的操作,或用于一个组合的操作。LCSZC指令的其它可选择实施例可以包括应用于其它大小的有符号或无符号数据元素的操作。
如上所解释的,解码器165可以识别并解码处理器109所接收的控制信号,并且该控制信号可以是用于LCSZC指令的操作码。因此,解码器165解码LCSZC指令的操作码。
参考图9,其示出了可以用于对LCSZC指令的控制信号(操作码)进行编码的操作码的各种实施例。图9示出了根据本发明的一个实施例的指令900的格式。指令格式900包括各种字段;这些字段可以包括前缀字段910、操作码字段920以及操作数指定字段(例如, mod R/M、SIB(scale-index-base)、位移、立即数等)。操作数指定字段是可选择的,并且包括modR/M字段930、SIB字段940、位移字段950和立即数字段960。
本领域技术人员将认识到,图9所提出的格式900是说明性的,指令代码中的其它数据组织形式也可以用于所公开的实施例。例如,字段910、920、930、940、950、960不需要以所示的顺序组织,而可以重新被组织到彼此相关的其它位置,并且不需要是邻近的。同样,这里所讨论的字段长度不应当被看成是限制性的。作为多个字节的特定构件而讨论的字段,在可选择的实施例中可以被实现为更大或更小的字段。同样,术语“字节”虽然在这里作为8-位的分组使用,但是在其它实施例中,其可以实现为包括4位、16位和32位在内的其它任何大小的分组。
如这里所使用的,用于特定指令实例(比如LCSZC指令)的操作码可以包括指令格式200的字段中的特定值,以便指示所希望的操作。这样的指令有时被称为“真实指令”。有时,在这里将真实指令的位值共同称为“指令代码”。
对于每个指令代码,相应的解码后的指令代码唯一地表示由执行单元(例如,比如,图1a的130)响应于该指令代码而执行的操作。所述解码后的指令代码可以包括一个或多个微操作。
操作码字段920的内容指定该操作。对于至少一个实施例,用于在这里讨论的LCSZC指令的实施例的操作码字段920的长度是3个字。该操作码字段920可以包括一个、两个或三个字节的信息。对于至少一个实施例,将在操作码字段920的2-字节逃逸(escape)字段118c中的3-字节逃逸操作码值与操作码字段920的第三个字节925的内容相结合,以指定LCSZC操作。第三个字节925在这里被称为具体指令(instruction-specific)操作码。
对于用于LCSZC指令的指令格式的第二实施例928,图9示出了将在操作码字段920的2-字节字段118c中的3-字节逃逸操作码值与前缀字段910的内容和操作码字段920的具体指令操作码字段925的内容相结合,以指定LCSZC操作。
对于至少一个实施例,将前缀值0x66放置于前缀字段910中, 并且将其用作指令操作码的一部分,以定义所希望的操作。也就是说,在前缀910字段中的值被解码成操作码的一部分,而不是被解释成仅仅限制随后的操作码。例如,对于至少一个实施例,前缀值0x66被用来指示LCSZC指令的目标操作数和源操作数是驻留在128-位Inte1
Figure DEST_PATH_2007101441872_16
SSE2XMM寄存器中。可以类似地使用其它前缀。然而,对于LCSZC指令的至少一些实施例,在某些操作条件下,前缀可以替代地用于增强操作码或限制操作码的传统任务中。
指令格式的第一实施例926和第二实施例928都包括3-字节逃逸操作码字段118c和具体指令操作码字段925。对于至少一个实施例,3-字节逃逸操作码字段118c的长度为2个字节。指令格式926使用称为3-字节逃逸操作码的4个特定逃逸操作码中的一个。3-字节逃逸操作码的长度为2个字节,并且它们向解码器硬件指示该指令使用操作码字段920中的第三字节来定义该指令。3-字节逃逸操作码字段118c可以位于指令操作码内的任何地方,并且不需要必须为指令内的最高次序或最低次序字段。
对于至少一个实施例,定义了至少4个3-字节逃逸操作码值:0x0F3y,其中y是0x8、0x9、0xA或0xB。虽然这里所公开的LCSZC指令操作码的某些实施例与所述3-字节逃逸操作码值一样包括值“0x0F38”,但这样的公开内容不应当被看成是限制性的。其它的实施例可以使用其它的逃逸操作码值。
下面的表3提出使用前缀和3-字节逃逸操作码的LCSZC指令代码的示例。
表3
  指令   定义
  PTEST xmm1,mxx2/m128   将源128-位寄存器或源128-位存储器内  的所有位与寄存器内的128-位目标进行  比较;如果xmm2/m128 AND xmm1为全  0则设置ZF;否则清除ZF。如果  xmm2/m128 AND NOT xmm1结果为全  0则设置CF;否则清除CF。
  TESTPS xmm1,  xmm2/m128   将源(128-位寄存器或128-位存储器)  内的4个打包双字中每一个的MSB与目  标(128-位寄存器)内的4个打包双字  中每一个的相应MSB进行比较;如果  xmm2/m128 AND xmm1的MSB(位127、  95、63和31)为全0则设置ZF;否则  清除ZF。如果xmm2/m128 AND NOT  xmm1的MSB(位127、95、63和31)  结果为全0则设置CF;否则清除CF。
  TESTPD xmm1,  xmm2/m128   将源(128-位寄存器或128-位存储器)  内的2个打包四字中每一个的MSB与目  标(128-位寄存器)内的2个打包四字  中每一个的相应MSB进行比较;如果  xmm2/m128 AND xmm1的MSB(位127  和63)为全0则设置ZF;否则清除ZF。  如果xmm2/m128 AND NOT xmm1的  MSB(位127和63)结果为全0则设置  CF;否则清除CF。
对于至少一个实施例,源或目标操作数中的值可以被用作掩码(mask)。可以至少部分地通过所希望得到的行为,来驱使程序员选择是否使用源或目标操作数作为掩码值。例如,使用第二操作数(源) 作为掩码值,该结果行为可以陈述为:“如果在该掩码下的每个位都为“0”,则设置ZF;如果在该掩码下的每个位都为“1”,则设置CF。”另一方面,当使用第一个参数(目标)作为掩码值时,该结果行为可以陈述为:“如果在该掩码下的每个位都为“0”,则设置ZF;如果在该掩码下的每个位都为“0”,则设置CF。”
为了执行上面结合图7c、7d、8b和8c所讨论的打包LCSZC指令的至少一些实施例的等同物,需要附加指令,其为该操作增加了机器周期延迟。例如,下面的表4提出的伪代码示出了使用PTEST指令的多个指令相对于没有包括PTEST指令的指令集的节省。
表4
  PTEST指令-   没有PTEST指令-
  movdqa xmm0,_x[eax]  pcmpeqd xmm0,  const_000000010000000100000001  00000001  PTEST xmm0,xmm0  Jz all_under_mask_zero   movdqa xmm0,_x[eax]  pcmpeqd xmm0,  const_000000010000000100000001  00000001  pmovmskb eax,xmm0  Test eax,eax  Jz all_under mask_zero
表4所提出的伪代码有助于阐明所描述的LCSZC指令的实施例能够用于改进软件代码的性能。因此,LCSZC指令能够用于通用处理器,并且与所描述的现有技术指令相比,提高了更多算法的性能。
可选择实施例
虽然所描述的实施例使用用于LCSZC指令的打包实施例的32-位数据元素和64-位数据元素的MSB的比较,但可选择实施例可以使用不同大小的输入、不同大小的数据元素、和/或对不同位的比较(例如,数据元素的LSB)。此外,虽然在一些所描述的实施例中,Source1和Dest每一个都包含128-位数据,但可选择实施例可以对具有更多或更少数据的打包数据进行操作。例如,一个可选择实施例可以对具有64-位数据的打包数据进行操作。而且,LCSZC指令所比较 的位不需要必须表示每个打包数据元素的相同的各个位的位置。
虽然已经依据一些实施例对本发明进行了描述,但本领域技术人员将认识到,本发明并不限制于所描述的实施例。本发明的方法和装置可以在在附带的权利要求的精神和范围内进行实践上的修改和变化。因此,说明书被看成是说明性的,而不是对本发明的限制。
上面的说明书的目的是阐明本发明的优选实施例。从上面的讨论中也应当明白,特别是在这样发展快速并且进一步的进步不易预见的技术领域中,可以由本领域技术人员在附加权利要求的范围内对本发明在安排和细节上进行修改,而不脱离的本发明的原理。

Claims (19)

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的计算系统,其中,所述第一状态标志为零标志,所述第二状态标志为进位标志。
CN2007101441872A 2006-09-21 2007-09-21 用于执行逻辑比较操作的方法和装置 Expired - Fee Related CN101231583B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US11/525,706 2006-09-21
US11/525,706 US7958181B2 (en) 2006-09-21 2006-09-21 Method and apparatus for performing logical compare operations

Related Child Applications (2)

Application Number Title Priority Date Filing Date
CN2010102834141A Division CN101937329B (zh) 2006-09-21 2007-09-21 用于执行逻辑比较操作的装置
CN201110127835.XA Division CN102207849B (zh) 2006-09-21 2007-09-21 用于执行逻辑比较操作的方法和装置

Publications (2)

Publication Number Publication Date
CN101231583A CN101231583A (zh) 2008-07-30
CN101231583B true CN101231583B (zh) 2011-07-13

Family

ID=39200856

Family Applications (3)

Application Number Title Priority Date Filing Date
CN2007101441872A Expired - Fee Related CN101231583B (zh) 2006-09-21 2007-09-21 用于执行逻辑比较操作的方法和装置
CN2010102834141A Expired - Fee Related CN101937329B (zh) 2006-09-21 2007-09-21 用于执行逻辑比较操作的装置
CN201110127835.XA Active CN102207849B (zh) 2006-09-21 2007-09-21 用于执行逻辑比较操作的方法和装置

Family Applications After (2)

Application Number Title Priority Date Filing Date
CN2010102834141A Expired - Fee Related CN101937329B (zh) 2006-09-21 2007-09-21 用于执行逻辑比较操作的装置
CN201110127835.XA Active CN102207849B (zh) 2006-09-21 2007-09-21 用于执行逻辑比较操作的方法和装置

Country Status (6)

Country Link
US (13) US7958181B2 (zh)
JP (7) JP5284264B2 (zh)
KR (1) KR101064837B1 (zh)
CN (3) CN101231583B (zh)
DE (1) DE102007045187A1 (zh)
WO (1) WO2008036946A1 (zh)

Families Citing this family (23)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7958181B2 (en) 2006-09-21 2011-06-07 Intel Corporation Method and apparatus for performing logical compare operations
US8515052B2 (en) 2007-12-17 2013-08-20 Wai Wu Parallel signal processing system and method
US9690591B2 (en) * 2008-10-30 2017-06-27 Intel Corporation System and method for fusing instructions queued during a time window defined by a delay counter
CN101859325B (zh) * 2010-06-07 2012-07-11 华为技术有限公司 一种数据表项的查找处理方法和装置
US20120030451A1 (en) * 2010-07-28 2012-02-02 Broadcom Corporation Parallel and long adaptive instruction set architecture
CN102566975A (zh) * 2010-12-27 2012-07-11 北京国睿中数科技股份有限公司 一种跳转路径的分支跳转处理装置、方法和处理器
CN104011650B (zh) * 2011-12-23 2017-09-19 英特尔公司 使用输入写掩码和立即数从源写掩码寄存器在目的地写掩码寄存器中设置输出掩码的系统、装置和方法
CN116414459A (zh) * 2011-12-23 2023-07-11 英特尔公司 在不同的粒度水平下对数据值进行广播和掩码的指令执行
CN104011653B (zh) * 2011-12-29 2017-09-15 英特尔公司 打包数据操作掩码比较处理器、方法、系统
US9483266B2 (en) * 2013-03-15 2016-11-01 Intel Corporation Fusible instructions and logic to provide OR-test and AND-test functionality using multiple test sources
US9886277B2 (en) * 2013-03-15 2018-02-06 Intel Corporation Methods and apparatus for fusing instructions to provide OR-test and AND-test functionality on multiple test sources
US9496023B2 (en) 2014-06-05 2016-11-15 Micron Technology, Inc. Comparison operations on logical representations of values in memory
US10380593B2 (en) 2014-11-10 2019-08-13 Mastercard International Incorporated Systems and methods for detecting compromised automated teller machines
US20160179542A1 (en) * 2014-12-23 2016-06-23 Patrick P. Lai Instruction and logic to perform a fused single cycle increment-compare-jump
US10445092B2 (en) * 2014-12-27 2019-10-15 Intel Corporation Method and apparatus for performing a vector permute with an index and an immediate
US10423411B2 (en) 2015-09-26 2019-09-24 Intel Corporation Data element comparison processors, methods, systems, and instructions
GB2543304B (en) * 2015-10-14 2020-10-28 Advanced Risc Mach Ltd Move prefix instruction
US10379854B2 (en) * 2016-12-22 2019-08-13 Intel Corporation Processor instructions for determining two minimum and two maximum values
CN108897522A (zh) * 2018-06-14 2018-11-27 北京比特大陆科技有限公司 数据处理方法、数据处理装置以及电子设备
US11593105B2 (en) * 2018-12-29 2023-02-28 Intel Corporation Vector logical operation and test instructions with result negation
CN111506520B (zh) * 2020-07-01 2020-09-22 腾讯科技(深圳)有限公司 一种地址生成的方法、相关装置以及存储介质
US20230072105A1 (en) * 2021-08-31 2023-03-09 Intel Corporation Bfloat16 comparison instructions
US20240220262A1 (en) * 2022-12-30 2024-07-04 Jason Agron Instructions and support for conditional comparison and test

Family Cites Families (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US502069A (en) * 1893-07-25 John dierdorf
JPS6014338A (ja) * 1983-06-30 1985-01-24 インタ−ナショナル ビジネス マシ−ンズ コ−ポレ−ション 計算機システムにおける分岐機構
US4648059A (en) * 1984-09-13 1987-03-03 Motorola, Inc. N-bit magnitude comparator
JPS6491228A (en) * 1987-09-30 1989-04-10 Takeshi Sakamura Data processor
CA2045773A1 (en) 1990-06-29 1991-12-30 Compaq Computer Corporation Byte-compare operation for high-performance processor
US5408670A (en) * 1992-12-18 1995-04-18 Xerox Corporation Performing arithmetic in parallel on composite operands with packed multi-bit components
KR200152537Y1 (ko) 1993-12-21 1999-07-15 구본준 2진수 비교기 회로
JP3096387B2 (ja) * 1994-01-28 2000-10-10 三菱電機株式会社 数値演算処理装置
JP3000857B2 (ja) * 1994-08-31 2000-01-17 松下電工株式会社 プログラマブルコントローラ
US5748950A (en) * 1994-09-20 1998-05-05 Intel Corporation Method and apparatus for providing an optimized compare-and-branch instruction
WO1996017291A1 (en) 1994-12-02 1996-06-06 Intel Corporation Microprocessor with packing operation of composite operands
IL116210A0 (en) 1994-12-02 1996-01-31 Intel Corp Microprocessor having a compare operation and a method of comparing packed data in a processor
GB9509989D0 (en) * 1995-05-17 1995-07-12 Sgs Thomson Microelectronics Manipulation of data
WO1997008608A1 (en) * 1995-08-31 1997-03-06 Intel Corporation A set of instructions for operating on packed data
US5907842A (en) * 1995-12-20 1999-05-25 Intel Corporation Method of sorting numbers to obtain maxima/minima values with ordering
US6036350A (en) * 1995-12-20 2000-03-14 Intel Corporation Method of sorting signed numbers and solving absolute differences using packed instructions
US5835782A (en) * 1996-03-04 1998-11-10 Intel Corporation Packed/add and packed subtract operations
JPH1011628A (ja) 1996-06-25 1998-01-16 Fujitsu Ltd 営業車両管理システム
US5838984A (en) 1996-08-19 1998-11-17 Samsung Electronics Co., Ltd. Single-instruction-multiple-data processing using multiple banks of vector registers
TW325552B (en) * 1996-09-23 1998-01-21 Advanced Risc Mach Ltd Data processing condition code flags
GB2317466B (en) 1996-09-23 2000-11-08 Advanced Risc Mach Ltd Data processing condition code flags
JP3658927B2 (ja) * 1997-06-30 2005-06-15 コニカミノルタホールディングス株式会社 電子写真感光体、画像形成方法及び画像形成装置
JPH1124923A (ja) * 1997-07-09 1999-01-29 Mitsubishi Electric Corp マイクロプロセッサ
US6317824B1 (en) * 1998-03-27 2001-11-13 Intel Corporation Method and apparatus for performing integer operations in response to a result of a floating point operation
US6230261B1 (en) * 1998-12-02 2001-05-08 I. P. First, L.L.C. Method and apparatus for predicting conditional branch instruction outcome based on branch condition test type
US6189091B1 (en) * 1998-12-02 2001-02-13 Ip First, L.L.C. Apparatus and method for speculatively updating global history and restoring same on branch misprediction detection
US6772325B1 (en) * 1999-10-01 2004-08-03 Hitachi, Ltd. Processor architecture and operation for exploiting improved branch control instruction
JP3487421B2 (ja) * 2000-02-16 2004-01-19 日本電気株式会社 Simd型並列計算装置
DE10157822A1 (de) * 2001-11-24 2003-06-05 Behr Gmbh & Co Elektromagnetisch angesteuerte Flüssigkeitsreibungskupplung
JP3851228B2 (ja) * 2002-06-14 2006-11-29 松下電器産業株式会社 プロセッサ、プログラム変換装置及びプログラム変換方法、並びにコンピュータプログラム
JP2004046747A (ja) * 2002-07-16 2004-02-12 Matsushita Electric Ind Co Ltd ベクトル化方式
US7424501B2 (en) * 2003-06-30 2008-09-09 Intel Corporation Nonlinear filtering and deblocking applications utilizing SIMD sign and absolute value operations
GB2409063B (en) * 2003-12-09 2006-07-12 Advanced Risc Mach Ltd Vector by scalar operations
US7809932B1 (en) * 2004-03-22 2010-10-05 Altera Corporation Methods and apparatus for adapting pipeline stage latency based on instruction type
US7853578B1 (en) * 2005-12-09 2010-12-14 Marvell International Ltd. High-performance pattern matching
US7958181B2 (en) * 2006-09-21 2011-06-07 Intel Corporation Method and apparatus for performing logical compare operations
US9069547B2 (en) * 2006-09-22 2015-06-30 Intel Corporation Instruction and logic for processing text strings
JP6014338B2 (ja) 2012-03-05 2016-10-25 日本放送協会 コンテンツ配信装置、コンテンツ配信システム、およびコンテンツ配信プログラム
US20160179542A1 (en) * 2014-12-23 2016-06-23 Patrick P. Lai Instruction and logic to perform a fused single cycle increment-compare-jump

Also Published As

Publication number Publication date
US9043379B2 (en) 2015-05-26
JP2019023909A (ja) 2019-02-14
KR101064837B1 (ko) 2011-09-14
JP6416861B2 (ja) 2018-10-31
CN102207849B (zh) 2014-09-10
CN101937329A (zh) 2011-01-05
US20080091991A1 (en) 2008-04-17
JP2017079083A (ja) 2017-04-27
US20160154647A1 (en) 2016-06-02
JP2020091908A (ja) 2020-06-11
DE102007045187A1 (de) 2008-04-30
US9170813B2 (en) 2015-10-27
JP2013178791A (ja) 2013-09-09
US8380780B2 (en) 2013-02-19
US10572251B2 (en) 2020-02-25
CN102207849A (zh) 2011-10-05
CN101937329B (zh) 2012-11-28
US9037627B2 (en) 2015-05-19
US20130046960A1 (en) 2013-02-21
US20190087183A1 (en) 2019-03-21
US20130166884A1 (en) 2013-06-27
US20130046959A1 (en) 2013-02-21
US20130227253A1 (en) 2013-08-29
US9489198B2 (en) 2016-11-08
US9037626B2 (en) 2015-05-19
JP2022062223A (ja) 2022-04-19
JP2015007993A (ja) 2015-01-15
WO2008036946A1 (en) 2008-03-27
US20170161068A1 (en) 2017-06-08
US20180181395A1 (en) 2018-06-28
US10416997B2 (en) 2019-09-17
JP7423886B2 (ja) 2024-01-30
US20110191570A1 (en) 2011-08-04
JP5284264B2 (ja) 2013-09-11
US20130166883A1 (en) 2013-06-27
CN101231583A (zh) 2008-07-30
US8606841B2 (en) 2013-12-10
US20150212816A1 (en) 2015-07-30
US9898285B2 (en) 2018-02-20
US20190286444A1 (en) 2019-09-19
US10146536B2 (en) 2018-12-04
JP2010504595A (ja) 2010-02-12
US9268565B2 (en) 2016-02-23
US7958181B2 (en) 2011-06-07
KR20090042331A (ko) 2009-04-29

Similar Documents

Publication Publication Date Title
CN101231583B (zh) 用于执行逻辑比较操作的方法和装置
US11023236B2 (en) Instruction and logic for processing text strings
JP2017539013A (ja) 競合検出を実行するための方法および装置
EP1267255A2 (en) Conditional branch execution in a processor with multiple data paths
WO1997048041A9 (en) An apparatus and method for detecting and decompressing instructions from a variable-length compressed instruction set
JP2018500666A (ja) ベクトルビットギャザーを実行するための方法および装置

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
C17 Cessation of patent right
CF01 Termination of patent right due to non-payment of annual fee

Granted publication date: 20110713

Termination date: 20130921