CN106445469A - 打包数据操作掩码移位处理器、方法、系统及指令 - Google Patents

打包数据操作掩码移位处理器、方法、系统及指令 Download PDF

Info

Publication number
CN106445469A
CN106445469A CN201610865103.3A CN201610865103A CN106445469A CN 106445469 A CN106445469 A CN 106445469A CN 201610865103 A CN201610865103 A CN 201610865103A CN 106445469 A CN106445469 A CN 106445469A
Authority
CN
China
Prior art keywords
instruction
packing data
bit
mask
processor
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201610865103.3A
Other languages
English (en)
Other versions
CN106445469B (zh
Inventor
B·L·托尔
R·凡伦天
J·考博尔圣阿德里安
E·乌尔德-阿迈德-瓦尔
M·J·查尼
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
Priority to CN201610865103.3A priority Critical patent/CN106445469B/zh
Publication of CN106445469A publication Critical patent/CN106445469A/zh
Application granted granted Critical
Publication of CN106445469B publication Critical patent/CN106445469B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/30003Arrangements for executing specific machine instructions
    • G06F9/30007Arrangements for executing specific machine instructions to perform operations on data operands
    • G06F9/30032Movement instructions, e.g. MOVE, SHIFT, ROTATE, SHUFFLE
    • 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/30018Bit or string 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/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/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
    • G06F9/30038Instructions to perform operations on packed data, e.g. vector, tile or matrix operations using a mask

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Executing Machine-Instructions (AREA)

Abstract

本发明涉及打包数据操作掩码移位处理器、方法、系统及指令。一方面的方法包括接收打包数据操作掩码移位指令。打包数据操作掩码移位指令指示具有打包数据操作掩码的源,指示比特移位计数并指示目的地。该方法还包括响应于打包数据操作掩码移位指令将结果存储在目的地中。结果包括已经移位了移位比特计数的打包数据操作掩码的比特序列。公开了其它方法、装置、系统和指令。

Description

打包数据操作掩码移位处理器、方法、系统及指令
本申请是申请日为2011年12月22日申请号为第201180075868.2号发明名称为“打包数据操作掩码移位处理器、方法、系统及指令”的中国专利申请的分案申请。
背景技术
技术领域
实施例涉及处理器。具体地,实施例涉及响应于打包数据操作掩码移位指令而移位打包数据操作掩码的比特序列的处理器。
背景信息
许多处理器具有单指令多数据(SIMD)架构。该SIMD架构通常有助于显著提高处理速度。在SIMD架构中,与仅在一个数据元素或一对数据元素上操作标量指令不同,打包数据指令、矢量指令、或SIMD指令可在多个数据元素、或多对数据元素上同时或并行地操作。处理器可具有并行执行硬件,该并行执行硬件响应于打包数据指令来同时或并行地执行多个操作。
在SIMD架构中,可将多个数据元素打包在一个寄存器或存储器位置内作为打包数据或矢量数据。在矢量数据中,寄存器或其他存储位置的比特可被逻辑地划分成多个固定大小的数据元素的序列。数据元素中的每一个可表示个体数据片,该个体数据片连同通常具有相同大小的其他数据元素一起被存储在寄存器或存储位置中。例如,256比特宽寄存器可具有四个64比特宽打包数据元素,八个32比特宽打包数据元素,十六个16比特宽打包数据元素,或三十二个8比特宽打包数据元素。每一打包数据元素可表示独立个体的一段数据(例如,像素颜色等),该段数据可单独地操作或与其他数据独立地操作。
代表性地,打包数据指令、矢量指令或SIMD指令(例如,打包加法指令)中的一种类型可指定在来自两个源打包数据操作数的所有相应数据元素对上以垂直方式执行单个打包数据操作(例如,加法)以生成目的或结果打包数据。这些源打包数据操作数是相同大小,可包含相同宽度的数据元素,并因此可各自包含相同数量的数据元素。两个源打包数据操作数中的相同的比特位置中的源数据元素可表示相应的数据元素对。可分开地或独立地对这些相应的源数据元素对中的每一个执行打包数据操作,以便生成匹配数量的结果数据元素,且因而每一对相应的源数据元素可以具有相应的结果数据元素。通常,这样的指令的结果数据元素是以相同的次序,且它们常常具有相同的大小。其它打包数据指令包括独立地移位单个打包数据的每个数据元素的打包数据移位指令。
除这种示例性类型的打包数据指令之外,还有各种其它类型的打包数据指令。例如,存在仅具有一个源打包数据操作数或具有两个以上的源打包数据操作数的打包数据指令、以水平方式而不是垂直方式操作的打包数据指令、生成不同尺寸的结果打包数据操作数的打包数据指令、具有不同尺寸的数据元素的打包数据指令和/或具有不同的数据元素次序的打包数据指令。
附图说明
通过参考用来说明本发明的实施例的以下描述和附图,可最好地理解本发明。在附图中:
图1是具有含一个或多个打包数据操作掩码移位指令的指令集的处理器的示例实施例的框图。
图2A是示出带有合并的经掩码的打包数据操作的第一代表性示例实施例的框图。
图2B是例示带有填零(zeroing)的经掩码的打包数据操作的第二代表性示例实施例的框图。
图3是包括存储有打包数据操作掩码移位指令的机器可读的存储介质的制品(例如,计算机程序产品)的框图。
图4是具有执行单元的指令处理装置的示例实施例的框图,该执行单元可操作用于执行包含打包数据操作掩码移位指令的示例实施例的指令。
图5A是可由执行单元响应于和/或作为打包数据操作掩码右移位逻辑指令的结果而执行的打包数据操作掩码右移位逻辑操作的示例实施例的框图。
图5B是可由执行单元响应于和/或作为打包数据操作掩码左移位算术指令的结果而执行的打包数据操作掩码左移位算术操作的示例实施例的框图。
图6是处理打包数据操作掩码移位指令的示例实施例的方法的示例实施例的流程框图。
图7是一组合适的打包数据寄存器的示例实施例的框图。
图8是示出具有合适打包数据格式的若干示例实施例的框图。
图9是示出打包数据操作掩码比特的数目依赖于打包数据宽度和打包数据元素宽度的表格。
图10是一组合适的打包数据操作掩码寄存器的示例实施例的框图。
图11是例示在打包数据操作掩码寄存器的示例实施例中可被用作打包数据操作掩码和/或用于进行掩码的比特的数目取决于打包数据宽度和数据元素宽度的图。
图12A示出示例性AVX指令格式,包括VEX前缀、实操作码字段、MoD R/M字节、SIB字节、位移字段以及IMM8。
图12B示出来自图12A的哪些字段构成完整操作码字段和基础操作字段。
图12C示出来自图12A的哪些字段构成寄存器索引字段。
图13是根据本发明的一个实施例的寄存器架构的框图。
图14A是示出根据本发明的各实施例的示例性有序流水线和示例性的寄存器重命名的无序发布/执行流水线的框图。
图14B示出处理器核,该核包括耦合到执行引擎单元的前端单元,并且两者耦合到存储器单元。
图15A是根据本发明实施例的单处理器核连同其到管芯上互连网络的连接以及其2级(L2)高速缓存的本地子集的框图。
图15B是根据本发明的各实施例的图15A中的处理器核的一部分的展开图。
图16是根据本发明实施例可具有一个以上的核、可具有集成存储器控制器以及可具有集成图形器件的处理器的框图。
图17所示为根据本发明的一个实施例的系统的框图。
图18所示为根据本发明的一实施例的第一更具体示例性系统的框图。
图19示出根据本发明的实施例的第二更具体的示例性系统的框图。
图20示出根据本发明的实施例的片上系统(SoC)的框图。
图21是根据本发明的各实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。
具体实施方式
本文中公开的是打包数据操作掩码移位指令、用于执行打包数据操作掩码移位指令的处理器、处理器在处理或执行打包数据操作掩码移位指令时执行的方法以及包含用于处理或执行打包数据操作掩码移位指令的一个或多个处理器的系统。在下面的描述中,阐述了很多具体细节。然而,应当理解,本发明的各实施例可以在不具有这些具体细节的情况下得到实施。在其他实例中,公知的电路、结构和技术未被详细示出以免混淆对本描述的理解。
图1是具有含一个或多个打包数据操作掩码移位指令105的指令集的处理器100的示例实施例的框图。该处理器可以是各种复杂指令集计算(CISC)处理器、各种精简指令集计算(RISC)处理器、各种超长指令字(VLIW)处理器、其各种混合、或完全其他类型的处理器中的任何处理器。在一些实施例中,处理器可以是通用处理器(例如,具有在台式、膝上型等计算机中使用的类型的通用微处理器),但这不是必须的。替换地,指令处理处理装置可以是专用处理器。合适的专用处理器的示例包括但不限于,网络处理器、通信处理器、加密处理器、图形处理器、协处理器、嵌入式处理器、数字信号处理器(DSP)以及控制器(例如,微控制器),仅列举数例。
处理器具有指令集架构(ISA)101。ISA表示处理器的架构中涉及编程的那部分。ISA通常包括本地指令、架构寄存器、数据类型、寻址模式、存储器架构、中断和异常处理以及处理器的外部输入和输出(I/O)。ISA与微架构不同,微架构通常表示选择用于实现指令集架构的特定处理器设计技术。带有不同的微架构的处理器可以共享共同的指令集架构。
ISA包括架构寄存器(例如,架构寄存器组)106。所示出的架构寄存器包括打包数据寄存器107。每个打包数据寄存器可操作用于存储打包数据、矢量数据或者SIMD数据。所示出的架构寄存器还包括打包的数据操作掩码寄存器108。打包数据操作掩码寄存器中的每一个都可操作以存储打包数据操作掩码。
架构寄存器表示板上处理器存储位置。架构寄存器此处也可以被简称为寄存器。短语架构寄存器、寄存器组、以及寄存器在本文中用于表示对软件和/或编程器(例如,软件可见的)和/或由宏指令指定来标识操作数(operand)的寄存器,除非另外予以指定或清楚明显可知。这些寄存器与给定微架构(例如,临时寄存器、重排序缓冲器、引退(retirement)寄存器等)中的其他非架构寄存器形成对比。
所示的ISA包括处理器支持的指令集102。指令集包括若干不同类型的指令。指令集的这些指令表示宏指令(例如,提供给处理器以供执行的指令),与微指令或微操作(例如,从处理器的解码器解码宏指令得到的)不同。
指令集包括一个或多个经掩码打包数据指令103。经掩码的打包数据指令可类似于在背景部分中提及的矢量指令,且具有几个显著的差别。类似于前述打包数据指令,经掩码的打包数据指令中的每一个可操作用于导致或致使处理器在该打包数据指令指示的一个或多个打包操作数的数据元素上执行打包数据操作。打包数据操作数可被存储在打包数据寄存器107中。然而,经掩码的打包数据指令中的每个指令可使用一个或多个打包数据操作掩码寄存器108和/或打包数据操作掩码以对打包数据处理进行掩码、断言或条件控制。打包数据操作掩码和/或掩码寄存器可表示掩码操作数、断言操作数或条件操作控制操作数。
打包数据操作掩码和/或掩码寄存器可操作用于在每数据元素的粒度下对打包数据处理进行掩码或条件控制。例如,打包数据操作掩码可操作用于对是否将在来自单个源打包数据操作数的个体数据元素或来自两个源打包数据操作数的各相应数据元素对上执行的经掩码的打包数据指令的打包数据操作的结果存储在打包数据结果中进行掩码。经掩码的打包数据指令可允许与数据元素分开地且独立地断言或条件控制对每个数据元素或每对相对应数据元素的打包数据处理。经掩码的打包数据指令、操作和掩码可提供某些优点,诸如增加的代码密度和/或较高的指令吞吐量。
在此参考图1,指令集还包括一个或多个打包数据操作掩码和/或掩码寄存器操纵指令104。打包数据操纵掩码和/或掩码寄存器操纵指令中的每一个可操作用于导致或致使处理器对一个或多个打包数据操作掩码寄存器108和/或掩码进行操纵或操作。如所示,打包数据操作掩码或掩码寄存器操纵指令可包括一个或多个打包数据操作掩码移位指令105。打包数据操作掩码移位指令105中的每一个可操作用于导致或致使处理器将结果存储在目的地中,该目的地包括已经移位了移位比特计数(a shift count number of bits)的打包数据操作掩码的比特序列。以下进一步公开打包数据操作掩码移位指令的各不同实施例。
处理器还包括执行逻辑109。执行逻辑可操作用于执行或处理指令集的指令(例如,经掩码的打包数据指令和打包数据操作掩码移位指令)。执行逻辑可包括一个或多个执行单元、功能单元、算术单元、算术逻辑单元、逻辑单元、移位器等。
为了进一步示出打包数据操作掩码,考虑它们的使用的代表示例可能是有用的。图2A是示出带有合并的经掩码的打包数据操作203A的第一代表性示例实施例的框图。可响应于经掩码的打包数据指令(例如,图1的经掩码的打包数据指令103)或者作为该指令的结果来执行经掩码的打包数据操作。
用于所示的经掩码的打包数据操作的指令指示第一源打包数据210-1和第二源打包数据210-2。其掩盖打包数据指令(例如,打包移位指令)可指示仅单个源打包数据,或多于两个源打包数据。在例示中,第一和第二源打包数据具有相同大小,包含相同宽度的数据元素,并且由此各自包含相同数目的数据元素。在例示中,第一和第二源打包数据中的每一个具有十六个数据元素。作为一个示例,第一和第二源打包数据可各自为512比特宽,并且可各自包括十六个32比特双字数据元素。两个源打包数据中相同比特位置中(例如,相同垂直位置中)的源数据元素表示相对应数据元素对。数据元素中的每一个具有表示数据元素的块内示出的数值。例如,第一源打包数据的最低位数据元素(右侧)具有值3,第一源打包数据的次最低位数据元素具有值7,第一源打包数据的最高位数据元素(左侧)具有值12,依此类推。
经掩码的打包数据操作的指令还指示打包数据操作掩码211。打包数据操作掩码包括多个掩码元素、断言元素或条件控制元素或标志。可以按与一个或多个相对应源数据元素的一对一对应的形式包括元素或标志。例如,如图所示,在操作涉及两个源打包数据操作数的情况下,对于每对相应源数据元素,可以有一个这样的元素或标志。打包数据操作掩码的每个元素或标志可操作用于对一个或多个相应的源打包数据元素上单独打包数据操作进行掩码。例如,在该示例中,每个元素或标志可对相应源打包数据元素对上的单独打包数据操作进行掩码。
如图中所示的,通常每个元素或标志可以是单个比特。单个比特可允许指定两个不同可能性(例如,执行操作对不执行操作,存储操作的结果对不存储操作的结果等)中的任一个。替代地,如果需要在多于两个的不同选项中进行选择,则可对每个标志或元素使用两个或更多个比特。在图示中,打包数据操作掩码包括十六个比特(即,0011100001101011)。十六个比特中的每一个具有与第一和第二打包数据的十六个相应数据元素对中的一对的有序对应关系。例如,掩码的最低位比特对应于第一和第二打包数据的相应最低位数据元素对,掩码的最高位比特对应于相应最高位数据元素对,依次类推。在替换实施例中,其中源打包数据具有更少或更多的数据元素,打包数据操作掩码可类似地具有更少或更多的数据元素。
具体示出的经掩码的打包数据操作是经掩码的打包数据加法操作,其可操作用于根据打包数据操作掩码211的相应比特提供的条件操作控制或断言,将来自第一和第二源打包数据210-1、210-2的相应数据元素对的和有条件地存储打包数据结果212中。该具体的经掩码的打包数据加法操作指定:在每个相应的数据元素对上与其它对分离或独立于其它对地、以垂直方式条件地执行单个操作(在这种情况下是加法)。目的地操作数或打包数据结果与源打包数据的大小相同且具有与源打包数据相同数量的数据元素。因此,每对相应的源数据元素在打包数据结果中的与其相应的源数据元素对在源打包数据中相同的比特位置中具有相应结果数据元素。
在此参考打包数据操作掩码211。打包数据操作掩码的十六个比特中的每一个被置位(即,具有二进制值1)或者被清零(即,具有二进制值0)。根据所例示的协定,每个比特被分别置位(即,1)或清零(即,0),以允许或不允许将在第一和第二源打包数据的相应数据元素对上执行的打包数据操作的结果存储在打包数据结果的相应数据元素中。例如,打包数据操作掩码中的次最低位比特被置位(即,1),且表示在相应的次最低位数据元素对上执行的打包数据加法操作(即,7+1)的结果的和(即,8)被存储在打包数据结果的相应次最低数据元素中。在例示中,和通过下划线标出。
相反,当给定的比特被清零(即,0)时,不允许对相应的源数据元素对的打包数据操作的结果被存储在打包数据结果的对应数据元素中。相反,可将另一个值存储在结果数据元素中。例如,如图所示,来自第二源打包数据的相应数据元素的值可被存储在打包数据结果的相应数据元素中。例如,打包数据操作掩码中最高位比特被清零(即,0),且来自第二源打包数据的最高位数据元素的数值(即,15)被存储在打包数据结果的最高位结果数据元素中。这称为合并-掩码。与所示相反的协定也是可能的,其中比特被清零(即,0)以允许存储结果,或被置位(即,1)以不允许存储结果。
在一些实施例中,打包数据操作可任选地在第一和第二源打包数据的所有相应数据元素对上执行,而不管打包数据操作掩码的相应比特被置位还是清零,但是打包数据操作的结果可被存储或可不被存储在打包数据结果中,这取决于打包数据操作掩码的相应比特被置位还是清零。替代地,在另一实施例中,如果打包数据操作掩码的相应比特指定操作的结果不被存储在打包数据结果操作中,则打包数据操作可被任选地省去(即,不被执行)。在一些实施例中,掩码掉(masked-off)元素上的打包数据操作可任选地抑制或不引起异常(例如,异常标志)或违犯。在一些实施例中,对于具有存储器操作数的经掩码打包数据指令,可任选地针对掩码掉数据元素抑制存储器错误。该特征可有助于实现控制流断言,因为掩码可有效地提供合并状态打包数据寄存器,但不是必须的。
图2B是例示带有填零(zeroing)的经掩码打包数据元素203B的第二代表性示例实施例的框图。带有填零的经掩码打包数据操作类似于前述带有融合的经掩码打包数据操作。为了避免使描述变得模糊,不再重复相似之处,相反,将主要提及不同之处。一个明显的不同之处在于,与在打包数据结果的相应比特被掩码掉(例如,清除为0)时将源打包数据(例如,图2A中的第二源打包数据210-2)的数据元素的值合并或存储到打包数据结果的相应数据元素中不同,打包数据结果的相应数据元素被清零。例如,双字结果打包数据元素的所有32比特可具有零值。这称为填零-掩码。替换地,也可任选地使用除零之外的其他预定值。
这些仅仅是经掩码打包数据操作的几个示例性示例。应当理解,处理器可支持宽泛的各种不同类型的经掩码的打包数据操作。例如,这些可包括仅具有一个源打包数据或具有两个以上的源打包数据的操作、生成不同尺寸的结果打包数据的操作、具有不同尺寸的数据元素的操作和/或具有不同的结果数据元素顺序的操作及其组合。
图3是包括存储有打包数据操作掩码移位指令305的机器可读的存储介质314的制品(例如,计算机程序产品)的框图。在某些实施例中,机器可读存储介质可包括有形的和/或非瞬态的机器可读存储介质。在各示例实施例中,机器可读存储介质314可包括软盘、光存储介质、光盘、CD-ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、闪存、相变存储器、半导体存储器、其它类型的存储器或它们的组合。在一些实施例中,介质可包括一个或多个固态材料,例如半导体材料、相变材料、磁性材料、光学透明固体材料等等。
打包数据操作掩码移位指令305可操作用于指定或以其它方式指示具有打包数据操作掩码的源,指定或以其它方式指示移位比特计数(a shift count number of bits),以及指定或以其它方式指示目的地。在一些实施例中,打包数据操作掩码移位指令可操作用于显式指定源和目的地。在一些实施例中,源和目的地可各自是打包数据操作掩码寄存器。指令可具有由指令格式或指令的编码定义的一个或多个字段以显式指定打包数据操作掩码寄存器和目的地。在一些实施例中,打包数据操作掩码移位指令可遵循VEX编码方案,但这不是必须的。VEX编码方案的进一步的细节(如果需要的话,但对于理解本发明而言不是必须的)可在以下文件中获得:加利福尼亚州圣克拉拉市的英特尔公司,64和IA-32架构软件开发者手册,序号:253666-039US,2011年5月。或者,指令可隐含地指示源和/或目的地中的一个或多个。在一些实施例中,源和目的地可以是不同的打包数据操作掩码寄存器。在其它实施例中,可将相同的打包数据操作掩码寄存器用于源和目的地,且源掩码的最初比特可被经移位的打包数据操作掩码覆写。
打包数据操作掩码移位指令如果被机器(即,处理器或指令处理装置)执行则可操作用于导致机器响应于打包数据操作掩码移位指令将结果存储在目的地中。结果可包括已经移位了移位比特计数的打包数据操作掩码的比特序列。将意识到也可将本文公开的用于执行一个或多个操作或方法的指令或指令序列(例如,利用打包数据操作掩码移位指令的例程或算法)存储在存储介质上。
不同类型的机器的示例包括但不限于指令处理装置、指令执行装置、处理器(例如,通用处理器和专用处理器)以及具有一个或多个指令处理装置、指令执行装置和/或处理器的各种电子设备。这种电子设备的几个代表示例包括但不限于计算机系统、台式机、膝上型计算机、笔记本、服务器、网络路由器、网络交换机、上网计算机、机顶盒、蜂窝电话、视频游戏控制器等。
图4是具有执行单元417的指令处理装置415的示例实施例的框图,该执行单元417可操作用于执行包含打包数据操作掩码移位指令405的示例实施例的指令。在一些实施例中,指令处理装置可以是处理器和/或可被包括在处理器中。例如,在一些实施例中,指令处理装置可以是图1的处理器或类似设备,或者可被包括在图1的处理器或类似设备中。替换地,指令处理装置可被包括在不同的处理器或电子系统中。
指令处理装置415可接收打包数据操作掩码移位指令405。打包数据操作掩码移位指令可表示由指令处理装置识别的机器指令、宏指令或控制信号。指令处理装置可具有专用的或特定的电路或其它逻辑(例如,与硬件和/或固件结合的软件),专用的或特定的电路或其它逻辑可操作用于处理指令和/或响应于指令的结果或按指令指示存储结果。
指令处理装置的所示实施例包括指令解码器416。解码器可接收并解码较高级机器指令或宏指令,诸如所接收的打包数据操作掩码移位指令。解码器可以生成并输出一个或多个较低级的微操作、微代码进入点、微指令、或其他较低级的指令或控制信号,它们反映和/或来源于原始较高级的指令。一个或多个较低级指令或控制信号可通过一个或多个较低级(例如,电路级或硬件级)操作来实现较高级指令的操作。解码器可以使用各种不同的机制来实现。合适机制的示例包括但不限于微代码只读存储器(ROM)、查找表、硬件实现、可编程逻辑阵列(PLA)、用于实现本领域已知的解码器的其他机制等。
或者,并非具有解码器,在一个或多个其它实施例中,装置相反可具有指令仿真器、转换器、变形器(morpher)、解释器或者其他指令变换逻辑。各种不同类型的指令变换逻辑在本领域中是已知的,并且可在软件、硬件、固件、或者其组合中实现。指令转换逻辑可接收打包数据操作掩码移位指令,仿真、翻译、变形、解释、或者以其他方式将指令转换成一个或多个对应的导出指令或控制信号。在又一个其它实施例中,指令处理装置可具有解码器和附加的指令变换逻辑。例如,指令处理装置可具有:指令变换逻辑,用以将打包数据操作掩码移位指令变换成第二指令;以及解码器,用以将第二指令解码成可由指令处理装置的本机硬件执行的一个或多个较低级指令或控制信号。指令变换逻辑中的一些或全部可位于其余指令处理装置的管芯外,诸如在单独的管芯上或在管芯外的存储器中。
在此参考图4,指令处理装置还包括打包数据操作掩码寄存器408-1。打包数据操作掩码寄存器408-1可操作用以存储打包数据操作掩码。如前所述,打包数据操作掩码移位指令可显式指定(例如,通过一个或多个字段)或以其它方式指示打包数据操作掩码寄存器作为源。打包数据操作掩码移位指令还可指定或以其它方式指示目的地419。如所示,在一些实施例中,目的地419可以是第二打包数据操作掩码寄存器408-2。或者,目的地可以是另一个寄存器或存储器位置。在一些实施例中,打包数据操作掩码寄存器408-1、408-2可在一组打包数据操作掩码寄存器(例如,寄存器组)408中。
打包数据操作掩码寄存器可各自表示板上处理器存储位置。打包数据操作掩码寄存器可表示架构寄存器。打包数据操作掩码寄存器对于软件和/或编程器可见(例如,软件可见)和/或可以是宏指令(例如,打包数据操作掩码移位指令)指示或指定用以标识操作数的寄存器。打包数据操作掩码寄存器可通过使用公知技术以不同方式实现于不同的微架构中,并且不限于任何已知的特定类型的电路。多种不同类型的寄存器可适用,只要它们能够存储并提供在此所述的数据。合适类型的寄存器的示例包括但不限于,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器以及其组合。
指令处理装置还包括执行单元417。执行单元与打包数据操作掩码寄存器408-1和目的地419耦合。执行单元还与解码器耦合。执行单元可从解码器接收一个或多个微操作、微代码进入点、微指令、其他指令或其他控制信号,它们反映了打包数据操作移位指令或者是从打包数据操作移位指令导出的。
响应于指示打包数据操作掩码寄存器408-1作为源、指示比特移位计数(例如,利用立即数)、指示目的地419的打包数据操作掩码移位指令和/或作为其结果,执行单元可操作用于将结果存储在目的地419中。结果可包括已经移位了移位比特计数的打包数据操作掩码的比特序列。作为示例,执行单元可包括算术逻辑单元、逻辑单元、移位器单元、移位器电路、功能单元等。执行单元可包括可操作用于移位打包数据操作掩码的移位逻辑418。执行单元和/或移位逻辑可包括可操作用于实现指令的操作(例如,执行一个或多个微指令)的电路或其它执行逻辑(例如,软件、固件、硬件或组合)。
在一些实施例中,打包数据操作掩码移位指令可以是打包数据操作掩码右移位逻辑指令。打包数据操作掩码右移位逻辑指令可操作用以导致执行单元将打包数据操作掩码的比特序列逻辑地向右移位该移位比特计数,并且在左侧上移入移位计数个零(即二进制零或清除比特)。打包数据操作掩码的每个比特向右移位移位比特计数个位置。可丢弃在右侧移出的比特。可用替换比特填充在左侧上的空出的比特位置。在逻辑移位时,替换比特可均具有二进制值零。在其它实施例中,打包数据操作掩码移位指令可以是打包数据操作掩码左移位逻辑指令。打包数据操作掩码左移位逻辑指令可操作用以导致执行单元将打包数据操作掩码的比特序列逻辑地向左移位该移位比特计数,并且移入作为替换比特的移位计数个零以填充在右侧空出的比特位置。
在其它实施例中,打包数据操作掩码移位指令可以是打包数据操作掩码右移位算术指令。打包数据操作掩码右移位算术指令可操作以导致执行单元将打包数据操作掩码的比特序列算术地向右移位该移位比特计数,并且在左侧移入移位计数个替换比特。在算术移位中,替换比特中的每一个可具有用于带符号的标识的符号位和/或打包数据操作掩码的最左位的二进制值。在其它实施例中,打包数据操作掩码移位指令可以是打包数据操作掩码左移位算术指令。打包数据操作掩码左移位算术指令可操作以导致执行单元将打包数据操作掩码的比特序列算术地向左移位该移位比特计数,并且移入移位计数个零。
在各实施例中,打包数据操作掩码可以是8比特、16比特、32比特或64比特。在一些情况下,指令集可包括这些不同大小的打包数据操作掩码中的每一个的不同指令,且指令的操作码可隐含地指示相应的打包数据操作掩码的尺寸,虽然这不是必须的。打包数据操作掩码寄存器可至少与所支持的打包数据操作掩码的最大大小一样大或任选地比最大大小大。在一个示例中,打包数据操作掩码寄存器可以为64比特宽,但是并不要求如此。
图5A是可由执行单元响应于和/或作为打包数据操作掩码右移位逻辑指令(例如,指令405)的结果而执行的打包数据操作掩码右移位逻辑操作599A的示例实施例的框图。指令指示源打包数据操作掩码寄存器508-1和目的地打包数据操作掩码寄存器508-2。在该特定实施例中,源和目的地打包数据操作掩码寄存器各自是64比特宽。或者,在其它实施例中,这些寄存器可更宽(例如,80比特、128比特等)或更窄(例如,8比特、16比特、32比特、48比特等)。
N比特打包数据操作掩码511被存储在源打包数据操作掩码寄存器508-1中,其中N是整数个比特。在该特定实施例中,N比特打包数据操作掩码是16比特宽(即N=16)。或者,在其它实施例中,N比特打包数据操作掩码可更宽(例如32比特、64比特等)或更窄(例如,4比特、8比特等)。在一些方面,N比特打包数据操作掩码的大小可取决于相应的打包数据宽度和打包数据的数据元素的宽度。N比特打包数据操作掩码可包含打包数据操作掩码寄存器的活跃比特、利用的比特、或有意义的比特,而打包数据操作掩码寄存器的剩余最高位比特可表示非活跃比特、未利用的比特、非有意义的比特或多余比特。
指令指示M比特移位比特计数(an M-bit shift count number of bits),其中M是整数个比特。作为示例,M比特移位比特计数可由指令指示的寄存器中指令的立即数、指令的操作数或其它来指示。在该特定实施例中,M比特移位比特计数是3比特(即M=3)。或者,在其它实施例中,M比特移位比特计数可以是多于或少于3比特。M可小于、等于或大于N。
响应于打包数据操作掩码右移位逻辑指令或作为其结果,结果被存储在目的地打包数据操作掩码寄存器508-2中。如所示,在一些实施例中,结果可包括:
(a)在目的地的最低有效N比特(例如,在所示的实施例中,64比特目的地打包数据操作掩码寄存器的最右16比特),在其较低有效部分中,已经逻辑向右移位了M比特移位比特计数(the M-bit shift count number of bits)的N比特打包数据操作掩码的(N-M)比特的比特序列598A,而在其更高有效部分中,均具有相同比特值的M比特移位比特计数597A(即,在该逻辑移位指令的情况下均被清除或为二进制零(0));以及
(b)在目的地的最高有效剩余部分(例如,在所示的实施例中,64比特目的地打包数据操作掩码寄存器的最左侧48个比特),均具有预定值的多个比特596A。如所示,在所示的实施例中,这些比特中的每一个可被清除或为二进制零(0)。或者,这些比特可具有另一个预定值(例如,均被置位或为二进制一(1))。
图5B是可由执行单元响应于和/或作为打包数据操作掩码左移位算术指令的结果而执行的打包数据操作掩码左移位算术操作599B的示例实施例的框图。打包数据操作掩码左移位算术操作类似于上述打包数据操作掩码右移位逻辑操作,仅有几个例外。为了避免使描述变得模糊,不再重复相似之处,相反,将主要提及不同之处。
一个显著的区别在于,结果包括:在目的地的最低有效N比特中(例如,在所示实施例中,64比特目的地打包数据操作掩码寄存器的最右侧的16个比特),在其较高有效部分,已经算术地向左移位了M比特移位比特计数的N比特打包数据操作掩码的(N-M)比特的比特序列598B,而在其较低有效部分中,均具有等于零的相同比特值的M比特移位比特计数597B。
这些只是数个说明性示例实施例。在其它实施例中,存储在目的地的最低有效和最高有效部分中的数据可被交换。换言之,打包数据操作掩码可在寄存器的最高有效部分而不是最低有效部分中。
为了避免混淆描述,已示出和描述了相对简单的指令处理装置。在其他实施例中,指令处理装置或处理器可任选地包括其他公知组件,诸如举例而言,指令获取单元、指令调度单元、分支预测单元、指令和数据的高速缓存、指令和数据的转换后备缓冲器(translation lookaside buffer)、预获取缓冲器、微指令队列、微指令定序器、总线接口单元、第二或更高级高速缓存、引退单元(retirement unit)、寄存器重命名单元以及上述的各种组合。此外其它实施例可具有多种不同类型的执行单元,这些执行单元中的至少一个响应于本文公开的指令的实施例。其它实施例可具有多个核、逻辑处理器或执行引擎。可操作用于执行本文中公开的指令的实施例的执行单元可被包含在核、逻辑处理器或执行引擎中的至少一个、至少两个、大多数或全部中。实际上在处理器和其它指令处理装置中存在这些组件的多种不同的组合和配置。本发明的范围不仅限于任何已知的这样的组合或配置。
图6是处理打包数据操作掩码移位指令的示例实施例的方法620的示例实施例的流程框图。在各实施例中,方法600的方法可由通用处理器、专用处理器(例如,图形处理器或数字信号处理器)、或另一种类型的数字逻辑设备或指令处理装置执行。在一些实施例中,方法620可由图1的处理器100、图4的指令处理装置415或类似的处理器或指令处理装置执行。或者,方法620可由处理器或指令处理装置的不同实施例执行。此外,图1的处理器100和图4的指令处理装置415可执行与图6的方法620的操作和方法相同、类似或不同的操作和方法的实施例。
方法包括在框621处接收打包数据操作掩码移位指令。打包数据操作掩码移位指令指定或以其它方式指示具有打包数据操作掩码的源,指定或以其它方式指示比特移位计数,以及指定或以其它方式指示目的地。源对指令可以是隐含的,或者可在指令格式或指令的编码(例如,比特或一个或多个字段)中显式地指定源。可由指令的立即数、指令的操作数在指令指示的寄存器中或以其它方式指定移位计数。在各个方面,该指令可在处理器、指令处理装置或者其一部分(例如,解码器、指令变换器等)处接收。在各个方面,指令可从处理器外的源(例如,从主存储器、盘、或总线或互连)或者从处理器上的源(例如,从指令高速缓存)接收。
然后,在框622,可响应于打包数据操作掩码移位指令将结果存储在目的地中。结果包括已经移位了移位比特计数的打包数据操作掩码的比特序列。作为示例,执行单元、指令处理装置或处理器可移位比特序列。
如前所述,在各实施例中,打包数据操作掩码的比特序列可逻辑向右移位且可在左侧移入移位计数个零(例如,如果指令是打包数据操作掩码右移位逻辑指令),逻辑向左移位且可在右侧移入移位计数个零(例如,如果指令是打包数据操作掩码左移位逻辑指令),算术向右移位且可在左侧移入移位计数个符号位(例如,如果指令是打包数据操作掩码右移位算术指令),或算术向左移位且可在右侧移入移位计数个零(例如,如果指令是打包数据操作掩码左移位算术指令)。
在各实施例中,打包数据操作掩码可以是8比特、16比特、32比特或64比特。打包数据操作掩码寄存器可至少与处理器或指令处理装置所支持的打包数据操作掩码的最大大小一样大或任选地比最大大小大。在一个示例中,打包数据操作掩码寄存器可以为64比特宽,但是并不要求如此。
所示的方法包括从处理器或指令处理装置外部可见的操作(例如,从软件观点)。在其它实施例中,方法可任选地包括一个或多个其它操作(例如,在处理器或指令处理器装置内部发生的一个或多个操作)。作为示例,在接收到指令之后,可将指令解码、转换、仿真或以其它方式变换成一个或多个其它指令或控制信号。可访问和/或接收第一和第二打包数据操作掩码。可启用执行单元以根据指令执行移位,并且可执行该移位。该方法还可与其它操作和/或方法一起使用。例如,该方法可包括接收经掩码的打包数据指令,该指令指示结果或目的地作为用于掩码或断言打包数据上的打包数据操作的掩码或断言操作数。
图7是一组合适的打包数据寄存器707的示例实施例的方框图。所示打包数据寄存器包括三十二个512比特宽打包数据或矢量寄存器。这些三十二个512位宽寄存器被标记为ZMM0至ZMM31。在所示实施例中,这些寄存器中的较低十六个的较低阶256比特(即,ZMM0-ZMM15)被化名为各个256比特宽打包数据或矢量寄存器(标记为YMM0-YMM15),或者覆盖在各个256比特宽打包数据或矢量寄存器(标记为YMM0-YMM15)上,但是这不是必需的。同样,在所示实施例中,YMM0-YMM15的较低阶128比特被混叠或者覆盖在相应128比特打包数据或矢量寄存器(标记为XMM0-XMM1)上,但是这也不是必需的。512比特宽寄存器ZMM0至ZMM31可操作用于保持512比特打包数据、256比特打包数据、或者128比特打包数据。256比特宽寄存器YMM0-YMM15可操作用于保持256比特打包数据或者128比特打包数据。128比特宽寄存器XMM0-XMM1可操作用于保持128比特打包数据。每一寄存器可用于存储打包浮点数据或打包整数数据。支持不同数据元素大小,包括至少8比特字节数据、16比特字数据、32比特双字或单精度浮点数据、以及64比特四倍字或双精度浮点数据。打包数据寄存器的替换实施例可包括不同数量的寄存器、不同大小的寄存器,并且可以或者可以不将较大寄存器重叠在较小寄存器上。
图8是示出具有合适打包数据格式的若干示例实施例的框图。256比特打包字格式810-1是256比特宽,并且包括十六个16比特字数据元素。在图示中十六个16比特字数据元素从最低有效比特位置至最高有效比特位置标记为WORD0至WORD15。256比特打包双字格式810-2是256比特宽,并且包括八个32比特双字(dword)数据元素。在图示中八个32比特双字数据元素从最低有效比特位置至最高有效比特位置标记为DWORD0至DWORD7。256比特打包四字格式810-3是256比特宽,并且包括四个64比特四字数据元素。在图示中四个64比特四字数据元素从最低有效比特位置至最高有效比特位置标记为QWORD0至QWORD3。
其他打包数据结果也是合适的。例如,其他合适的256比特打包数据格式包括256比特打包8比特字节格式,256比特打包32比特单精度浮点格式,以及256比特打包64比特双精度浮点格式。单精度浮点格式和双精度浮点格式可分别看起来类似于所示的双字格式810-2和四字格式810-3,然而数据元素内的比特的含义/解释可不同。此外,大于和/或小于256比特的打包数据格式也是合适的。例如,前述数据类型的512比特(或更大)打包数据格式和/或128比特(或更小)打包数据格式也是合适的。通常,对于相同数据类型而言,512比特打包数据格式可具有为256比特打包数据格式的两倍之多的数据元素,而对于相同数据类型而言,128比特数据格式可具有为256比特打包数据格式的一半那么多的数据元素。通常,打包数据元素的数量等于以比特计的打包数据的大小除以以比特计的打包数据元素的大小。
图9是例示打包数据操作掩码比特923的数目取决于打包数据宽度和打包数据元素宽度的表格。示出128比特、256比特和512比特的打包数据宽度,但是其它宽度也是可能的。8比特字节、16比特字、32比特双字(dword)或单精度浮点、以及64比特四倍字(Qword)或双精度浮点的打包数据元素宽度被考虑,然而其它宽度也是可能的。
如图所示,当打包数据宽度是128比特时,当打包数据元素宽度是8比特时可将16比特用于掩码,当打包数据元素宽度是16比特时可将8比特用于掩码,当打包数据元素宽度是32比特时可将4比特用于掩码,当打包数据元素宽度是64比特时可将2比特用于掩码。当打包数据宽度是256比特时,当打包数据元素宽度是8比特时可将32比特用于掩码,当打包数据元素宽度是16比特时可将16比特用于掩码,当打包数据元素宽度是32比特时可将8比特用于掩码,当打包数据元素宽度是64比特时可将4比特用于掩码。当打包数据宽度是512比特时,当打包数据元素宽度是8比特时可将32比特用于掩码,当打包数据元素宽度是16比特时可将16比特用于掩码,当打包数据元素宽度是32比特时可将8比特用于掩码,当打包数据元素宽度是64比特时可将4比特用于掩码。
图10是一组合适的打包数据操作掩码寄存器1008的示例实施例的框图。打包数据操作掩码寄存器中的每一个可用于存储打包数据操作掩码。在所例示的实施例中,该组包括标示为K0至k7的八个打包数据操作掩码寄存器。替代的实施例可包括比八个更少(例如,两个、四个、六个等)或比八个更多(例如,十六个、二十个、三十二个等)打包数据操作掩码寄存器。在所例示的实施例中,打包数据操作掩码寄存器中的每一个为64比特宽。在替代实施例中,打包数据操作掩码寄存器的宽度可以比64比特更宽(例如,80比特,128比特等)或比64比特更窄(例如,8比特、16比特、32比特等)。打包数据操作掩码寄存器可通过使用公知技术以不同方式实现,并且不限于任何已知的特定类型的电路。多种不同类型的寄存器可适用,只要它们能够存储并提供在本申请中描述的数据。合适寄存器的示例包括但不限于,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器、以及其组合。
在一些实施例中,打包数据操作掩码寄存器1008可以是分开的专用架构寄存器集合。在一些实施例中,与用于编码或指定其它类型的寄存器(例如,图1的打包数据寄存器108)相比,指令可在指令格式的不同比特或一个或多个不同字段组合中编码或指定打包数据操作掩码寄存器。作为示例,经掩码的打包数据指令可使用三个比特(例如,3比特字段)来编码或指定八个打包数据操作掩码寄存器k0至k7中的任一个。在替代实施例中,在分别有更少或更多打包数据操作掩码寄存器时,可使用更少或更多比特。在一个特定实现中,仅打包数据操作掩码寄存器k1至k7(而非k0)可被寻址作为用于断言经掩码打包数据操作的断言操作数。寄存器k0可被用作常规源或目的地,但是可能不被编码为断言操作数(例如,如果k0被指定,则其具有全一或“无掩码”编码)。在其他实施例中,寄存器中的全部或仅一些可被编码为断言操作数。
图11是例示打包数据操作掩码寄存器1108的示例实施例并且示出可被用作打包数据操作掩码和/或用于进行掩码的比特的数目取决于打包数据宽度和数据元素宽度的示图。所例示的打包数据操作掩码寄存器的示例实施例为64比特宽,但是并不要求如此。取决于打包数据宽度和数据元素宽度的组合,可将全部64比特或仅64比特的子集用作用来进行掩码的打包数据操作掩码。一般而言,当单个每元素掩码控制比特被使用时,打包数据操作掩码寄存器中可用于进行掩码的比特的数目等于以比特计的打包数据宽度除以以比特计的打包数据元素宽度。
示出若干示例性示例。即,当打包数据宽度为512比特而打包数据元素宽度为64比特时,则仅寄存器的最低位8比特被用作打包数据操作掩码。当打包数据宽度为512比特而打包数据元素宽度为32比特时,则仅寄存器的最低位16比特被用作打包数据操作掩码。当打包数据宽度为512比特而打包数据元素宽度为16比特时,则仅寄存器的最低位32比特被用作打包数据操作掩码。当打包数据宽度为512比特而打包数据元素宽度为8比特时,则寄存器的全部64比特被用作打包数据操作掩码。根据所示例的实施例,经掩码打包数据指令可基于该指令相关联打包数据宽度和数据元素宽度仅访问和/或利用寄存器中用于打包数据操作掩码的最低位或最低有效位的数目。
在所例示的实施例中,寄存器的最低阶子集或部分被用于进行掩码,但是并不要求如此。在替代实施例中,可任选地使用最高阶子集或某一其他子集。此外,在所例示的实施例中,仅512比特打包数据宽度被考虑,然而,相同的原理适用于其他打包数据宽度,诸如例如256比特和128比特宽度。如先前提及的,并不要求使用64比特打包数据操作掩码寄存器。
以下列出的是打包数据操作掩码移位指令和操作的各种特定示例实施例。在代码中,SRC1是源,DEST是目的地,imm8是用于指定移位比特计数的立即数,MAX_KL表示SRC1和DEST的比特数,符号<<表示左移位,符号>>表示右移位,且符号←表示存储。在一些实施例中,SRC1和DEST各自是打包数据操作掩码寄存器,且在一些实施例中MAX_KL是64比特,但这不是必须的。所示的指令是移位逻辑指令。如所示,在一些实施例中,在将打包数据操作掩码的移位比特存储到目的地之前,目的地可填零,但这不是必须的。或者,可给予它们另一个预定值。
KSHIFTLB DEST,SRC1(左移位字节逻辑)
COUNT←imm8[7:0]
DEST[MAX_KL-1:0]←0
IF COUNT<=7
THEN DEST[7:0]←SRC1[7:0]<<COUNT;
FI;
KSHIFTLW DEST,SRC1(左移位字逻辑)
COUNT←imm8[7:0]
DEST[MAX_KL-1:0]←0
IF COUNT<=15
THEN DEST[15:0]←SRC1[15:0]<<COUNT;
FI;
KSHIFTLD DEST,SRC1(左移位双字逻辑)
COUNT←imm8[7:0]
DEST[MAX_KL-1:0]←0
IF COUNT<=31
THEN DEST[31:0]←SRC1[31:0]<<COUNT;
FI;
KSHIFTLQ DEST,SRC1(左移位四字逻辑)
COUNT←imm8[7:0]
DEST[MAX_KL-1:0]←0
IF COUNT<=63
THEN DEST[63:0]←SRC1[63:0]<<COUNT;
FI;
KSHIFTRB DEST,SRC1(右移位字节逻辑)
COUNT←imm8[7:0]
DEST[MAX_KL-1:0]←0
IF COUNT<=7
THEN DEST[7:0]←SRC1[7:0]>>COUNT;
FI;
KSHIFTRW DEST,SRC1(右移位字逻辑)
COUNT←imm8[7:0]
DEST[MAX_KL-1:0]←0
IF COUNT<=15
THEN DEST[15:0]←SRC1[15:0]>>COUNT;
FI;
KSHIFTRD DEST,SRC1(右移位双字逻辑)
COUNT←imm8[7:0]
DEST[MAX_KL-1:0]←0
IF COUNT<=31
THEN DEST[31:0]←SRC1[31:0]>>COUNT;
FI;
KSHIFTRQ DEST,SRC1(右移位四字逻辑)
COUNT←imm8[7:0]
DEST[MAX_KL-1:0]←0
IF COUNT<=63
THEN DEST[63:0]←SRC1[63:0]>>COUNT;
FI;
这些格式只是数个说明性示例。其它实施例包括右移位或左移位算术指令的操作。其它实施例可按立即数以外的方式指定移位计数(例如,在指令指示的寄存器中)。
本文中公开的打包数据操作掩码移位指令是具有一般用途的通用指令。例如,这些指令可被单独使用或结合其他指令使用,以移位打包数据操作掩码和/或掩码寄存器,以便以对于特定应用、算法或代码有用且合需的各种不同方式操纵掩码或掩码寄存器。
在一些实施例中,本文公开的打包数据操纵掩码移位指令可与紧密附属的或相关联的指令结合使用。在一些实施例中,紧密附属的或相关联的指令是可操作用于向右或向左移位打包数据,使得至少一个打包数据元素分别在右侧或左侧移出的移位指令。通过字节递增指令的适当的打包数据移位的一个示例是在x86ISA中的PSRLDQ。在一些实施例中,本文公开的打包数据操纵掩码移位指令的移位操作可用于使源打包数据的数据元素上执行的移位操作并行或镜像——作为相关联的移位指令的结果。例如,如果左移位指令移出两个最左侧的打包数据元素,则打包数据操作掩码左移位指令可指定两比特的移位计数,以移出与两个移出的打包数据元素对应的两个最左侧比特。
在源打包数据上的相关联的移位指令和/或操作可与具有打包数据操作掩码移位指令和/或操作的代码序列并行或一起执行。换言之,在打包数据元素上执行的移位操作可在打包数据操作掩码比特上重复,使得打包数据操作掩码比特在移位后跟踪对应的数据元素。有利地,这可帮助保持打包数据操作掩码的比特和对应的打包数据元素之间的位置对应关系。保持这种位置对应关系可有助于允许打包数据凑啊在掩码的比特跟踪对应的打包数据元素,使得这些比特可用于掩码后续的打包数据操作(由在移位指令的打包数据结果上操作的后续掩码打包数据指令所使用)。然而,本发明的范围不限于使用本文公开的具有在打包数据上的相关联移位指令的打包数据操作掩码移位指令。
在替换使用中,打包数据操作掩码移位指令还可用于将临时存储的第一打包数操作掩码从打包数据操作掩码寄存器的较高非活跃比特集移位到打包数据操作掩码寄存器的最低有效的活跃比特集,该寄存器最初存储第二打包数据操作掩码。第一打包数据操作掩码可临时存储在寄存器的上部非活跃比特中,而这不是必须的以避免需要消耗附加打包数据操作掩码寄存器来存储第一掩码。这可帮助避免用尽打包数据操作掩码寄存器和/或在没有可用的打包数据操作掩码寄存器时需要将打包数据操作掩码存储到存储器中。还基于本公开构想到其它使用。
指令集包括一个或多个指令格式。给定指令格式定义各个字段(位的数量、位的位置)以指定要执行的操作(操作码)以及对其要执行该操作的操作码等。通过指令模板(或子格式)的定义来进一步分解一些指令格式。例如,给定指令格式的指令模板可被定义为具有指令格式的字段(所包括的字段通常在相同的阶中,但是至少一些字段具有不同的比特位置,因为包括更少的字段)的不同子集,和/或被定义为具有不同解释的给定字段。由此,ISA的每一指令使用给定指令格式(并且如果定义,则在该指令格式的指令模板的给定一个中)来表达,并且包括用于指定操作和操作码的字段。例如,示例性ADD指令具有专用操作码以及包括指定该操作码的操作码字段和选择操作数的操作数字段(源1/目的地以及源2)的指令格式,并且该ADD指令在指令流中的出现将具有选择专用操作数的操作数字段中的专用内容。已经发布和/或公布了涉及高级矢量扩展(AVX)(AVX1和AVX2)且使用矢量扩展(VEX)编码方案的SIMD扩展集(例如,参见2011年10月的64和IA-32架构软件开发手册,并且参见2011年6月的高级矢量扩展编程参考)。
示例性指令格式
本文中所描述的指令的实施例可以不同的格式体现。另外,在下文中详述示例性系统、架构、以及流水线。指令的实施例可在这些系统、架构、以及流水线上执行,但是不限于详述的系统、架构、以及流水线。
VEX指令格式
VEX编码允许指令具有两个以上操作数,并且允许SIMD矢量寄存器比128比特长。VEX前缀的使用提供了三个操作数(或者更多)句法。例如,先前的两个操作数指令执行改写源操作数的操作(诸如A=A+B)。VEX前缀的使用使操作数执行非破坏性操作,诸如A=B+C。
图12A示出示例性AVX指令格式,包括VEX前缀1202、实操作码字段1230、MoD R/M字节1240、SIB字节1250、位移字段1262以及IMM8 1272。图12B示出来自图12A的哪些字段构成完整操作码字段1274和基础操作字段1242。图12C示出来自图12A的哪些字段构成寄存器索引字段1244。
VEX前缀(字节0-2)1202以三字节形式进行编码。第一字节是格式字段1240(VEX字节0,比特[7:0]),该格式字段1240包含明确的C4字节值(用于区分C4指令格式的唯一值)。第二-第三字节(VEX字节1-2)包括提供专用能力的大量比特字段。具体地,REX字段1205(VEX字节1,比特[7-5])由VEX.R比特字段(VEX字节1,比特[7]–R)、VEX.X比特字段(VEX字节1,比特[6]–X)以及VEX.B比特字段(VEX字节1,比特[5]–B)组成。这些指令的其他字段对如在本领域中已知的寄存器索引的较低三个比特(rrr、xxx以及bbb)进行编码,由此Rrrr、Xxxx以及Bbbb可通过增加VEX.R、VEX.X以及VEX.B来形成。操作码映射字段1215(VEX字节1,比特[4:0]–mmmmm)包括对隐含的领先操作码字节进行编码的内容。W字段1264(VEX字节2,比特[7]–W)由记号VEX.W表示,并且取决于该指令提供了不同的功能。VEX.vvvv 1220(VEX字节2,比特[6:3]-vvvv)的作用可包括如下:1)VEX.vvvv对以颠倒(1(多个)补码)的形式指定第一源寄存器操作数进行编码,且对具有两个或两个以上源操作数的指令有效;2)VEX.vvvv针对特定矢量位移对以1(多个)补码的形式指定的目的地寄存器操作数进行编码;或者3)VEX.vvvv不对任何操作数进行编码,保留该字段,并且应当包含1111b。如果VEX.L 1268大小的字段(VEX字节2,比特[2]-L)=0,则它指示128比特矢量;如果VEX.L=1,则它指示256比特矢量。前缀编码字段1225(VEX字节2,比特[1:0]-pp)提供了用于基础操作字段的附加位。
实操作码字段1230(字节3)还被称为操作码字节。操作码的一部分在该字段中指定。
MOD R/M字段1240(字节4)包括MOD字段1242(比特[7-6])、Reg字段1244(比特[5-3])、以及R/M字段1246(比特[2-0])。Reg字段1244的作用可包括如下:对目的地寄存器操作数或源寄存器操作数(Rfff中的rrr)进行编码;或者被视为操作码扩展且不用于对任何指令操作数进行编码。R/M字段1246的作用可包括如下:对参考存储器地址的指令操作数进行编码;或者对目的地寄存器操作数或源寄存器操作数进行编码。
缩放、索引、基址(SIB)-缩放字段1250(字节5)的内容包括用于存储器地址生成的SS752(比特[7-6])。先前已经针对寄存器索引Xxxx和Bbbb参考了SIB.xxx 1254(比特[5-3])和SIB.bbb 1256(比特[2-0])的内容。
位移字段1262和立即数字段(IMM8)1272包含地址数据。
示例性寄存器架构
图13是根据本发明的一个实施例的寄存器架构1300的框图。在所示出的实施例中,有32个512比特宽的矢量寄存器1310;这些寄存器被引用为zmm0到zmm31。较低的16zmm寄存器的较低阶256个比特覆盖在寄存器ymm0-16上。较低的16zmm寄存器的较低阶128个比特(ymm寄存器的较低阶128个比特)覆盖在寄存器xmm0-15上。
写掩码寄存器1315-在所示的实施例中,存在8个写掩码寄存器(k0至k7),每一写掩码寄存器的大小是64比特。在替换实施例中,写掩码寄存器1315的大小是16比特。如先前所述的,在本发明的一个实施例中,向量掩码寄存器k0无法用作写掩码;当正常可指示k0的编码用作写掩码时,它选择硬连线的写掩码0xFFFF,从而有效地停用该指令的写掩码。
通用寄存器1325——在所示出的实施例中,有十六个64比特通用寄存器,这些寄存器与现有的x86寻址模式来寻址存储器操作数一起使用。这些寄存器通过名称RAX、RBX、RCX、RDX、RBP、RSI、RDI、RSP,以及R8到R15来引用。
标量浮点堆栈寄存器组(x87堆栈)1345,在其上面混叠MMX打包整数平坦寄存器组1350——在所示出的实施例中,x87堆栈是用于使用x87指令集扩展来对32/64/80比特浮点数据执行标量浮点操作的八元素堆栈;而使用MMX寄存器来对64比特打包整数数据执行操作,以及为在MMX和XMM寄存器之间执行的某些操作保存操作数。
本发明的替换实施例可以使用较宽的或较窄的寄存器。另外,本发明的替换实施例可以使用多一些,少一些或不同的寄存器组和寄存器。
示例性核架构、处理器和计算机架构
处理器核可以用出于不同目的的不同方式在不同的处理器中实现。例如,这样的核的实现可以包括:1)旨在用于通用计算的通用有序核;2)预期用于通用计算的高性能通用无序核;3)主要预期用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:包括预期用于通用计算的一个或多个通用有序核和/或预期用于通用计算的一个或多个通用无序核的CPU;以及2)包括主要预期用于图形和/或科学(吞吐量)的一个或多个专用核的协处理器。这样的不同处理器导致不同的计算机系统架构,其可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中但分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该情况下,这样的协处理器有时被称为诸如集成图形和/或科学(吞吐量)逻辑等专用逻辑,或被称为专用核);以及4)可以将所描述的CPU(有时被称为应用核或应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上的片上系统。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
示例性核架构
有序和无序核框图
图14A是示出根据本发明的实施例的示例性有序流水线和示例性的寄存器重命名的无序发布/执行流水线二者的框图。图14B是示出根据本发明的实施例的有序架构核的示例性实施例以及包括在处理器中的示例性寄存器重命名的无序发布/执行架构核两者的方框图。图14A-B中的实线框示出有序流水线和有序核,而任选增加的虚线框示出寄存器重命名的无序发布/执行流水线和核。给定有序方面是无序方面的子集的情况下,无序方面将被描述。
在图14A中,处理器流水线1400包括提取级1402、长度解码级1404、解码级1406、分配级1408、重命名级1410、调度(也称为分派或发布)级1412、寄存器读取/存储器读取级1414、执行级1416、写回/存储器写入级1418、异常处理级1422和提交级1424。
图14B示出处理器核1490,该核1490包括耦合到执行引擎单元1450的前端单元1430,并且两者耦合到存储器单元1470。核1490可以是精简指令集合计算(RISC)核、复杂指令集合计算(CISC)核、非常长的指令字(VLIW)核或混合或替代核类型。作为又一选项,核1490可以是专用核,诸如例如网络或通信核、压缩引擎、协处理器核、通用计算图形处理器单元(GPGPU)核、或图形核等等。
前端单元1430包括耦合到指令高速缓存单元1434的分支预测单元1432,该指令高速缓存单元1434被耦合到指令转换后备缓冲器(TLB)1436,该指令转换后备缓冲器1436被耦合到指令获取单元1438,指令获取单元1438被耦合到解码单元1440。解码单元1440(或解码器)可解码指令,并生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元1440可使用各种不同的机制来实现。合适的机制的示例包括但不限于查找表、硬件实现、可编程逻辑阵列(OLA)、微代码只读存储器(ROM)等。在一个实施例中,核1490包括存储(例如,在解码单元1440中或否则在前端单元1430内的)某些宏指令的微代码的微代码ROM或其他介质。解码单元1440耦合至执行引擎单元1450中的重命名/分配器单元1452。
执行引擎单元1450包括重命名/分配器单元1452,该重命名/分配器单元1452耦合至引退单元1454和一个或多个调度器单元(多个)1456的集合。调度器单元1456表示任何数目的不同调度器,包括预留站、中央指令窗等。调度器单元1456被耦合到物理寄存器组单元1458。每个物理寄存器组(多个)单元1458表示一个或多个物理寄存器组,其中不同的物理寄存器组存储一种或多种不同的数据类型,诸如标量整数、标量浮点、打包整数、打包浮点、矢量整数、矢量浮点、状态(例如,作为要执行的下一指令的地址的指令指针)等。在一个实施例中,物理寄存器组单元1458包括矢量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构矢量寄存器、矢量掩码寄存器、和通用寄存器。物理寄存器组单元1458与引退单元1454重叠以示出可以用来实现寄存器重命名和无序执行的各种方式(例如,使用记录器缓冲器和引退寄存器组;使用将来的文件、历史缓冲器和引退寄存器组;使用寄存器映射和寄存器池等等)。引退单元1454和物理寄存器组(多个)单元(多个)1458被耦合到执行群集(多个)1460。执行群集1460包括一个或多个执行单元1462的集合和一个或多个存储器访问单元1464的集合。执行单元1462可以执行各种操作(例如,移位、加法、减法、乘法),以及对各种类型的数据(例如,标量浮点、打包整数、打包浮点、向量整型、向量浮点)执行。尽管某些实施例可以包括专用于特定功能或功能集合的多个执行单元,但其他实施例可包括全部执行所有函数的仅一个执行单元或多个执行单元。调度器单元(多个)1456、物理寄存器组(多个)单元(多个)1458和执行群集(多个)1460被示为可能有多个,因为某些实施例为某些类型的数据/操作(例如,标量整型流水线、标量浮点/打包整型/打包浮点/矢量整型/矢量浮点流水线,和/或各自具有其自己的调度器单元、物理寄存器组(多个)单元和/或执行群集的存储器访问流水线——以及在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行群集具有存储器访问单元(多个)1464的某些实施例)创建分开的流水线。还应当理解,在分开的流水线被使用的情况下,这些流水线中的一个或多个可以为无序发布/执行,并且其余流水线可以为有序发布/执行。
存储器访问单元1464的集合被耦合到存储器单元1470,该存储器单元1470包括耦合到数据高速缓存单元1474的数据TLB单元1472,其中数据高速缓存单元1474耦合到二级(L2)高速缓存单元1476。在一个示例性实施例中,存储器访问单元1464可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合至存储器单元1470中的数据TLB单元1472。指令高速缓存单元1434还耦合到存储器单元1470中的二级(L2)高速缓存单元1476。L2高速缓存单元1476被耦合到一个或多个其他级的高速缓存,并最终耦合到主存储器。
作为示例,示例性寄存器重命名的、无序发布/执行核架构可以如下实现流水线1400:1)指令获取1438执行获取和长度解码级1402和1404;2)解码单元1440执行解码级1406;3)重命名/分配器单元1452执行分配级1408和重命名级1410;4)调度器单元1456执行调度级1412;5)物理寄存器组单元1458和存储器单元1470执行寄存器读取/存储器读取级1414;执行群集1460执行执行级1416;6)存储器单元1470和物理寄存器组单元1458执行写回/存储器写入级1418;7)各单元可牵涉到异常处理级1422;以及8)引退单元1454和物理寄存器组单元1458执行提交级1424。
核1490可支持一个或多个指令集合(例如,x86指令集合(具有与较新版本一起添加的某些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集合;加利福尼州桑尼维尔市的ARM控股的ARM指令集合(具有诸如NEON等可选附加扩展)),其中包括本文中描述的各指令。在一个实施例中,核1490包括支持打包数据指令集合扩展(例如,AVX1、AVX2)的逻辑,由此允许被许多多媒体应用使用的操作将使用打包数据来执行。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,此各种方式包括时分多线程化、同步多线程化(其中单个物理核为物理核正同步多线程化的各线程中的每一个线程提供逻辑核)、或其组合(例如,时分提取和解码以及此后诸如用超线程化技术来同步多线程化)。
尽管在无序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所解说的处理器的实施例还包括分开的指令和数据高速缓存单元1434/1474以及共享L2高速缓存单元1476,但替换实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如一级(L1)内部高速缓存或多个级别的内部缓存。在某些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
具体的示例性有序核架构
图15A-B示出了更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块之一(包括相同类型和/或不同类型的其他核)。这些逻辑块通过高带宽的互连网络(例如,环形网络)与某些固定的功能逻辑、存储器I/O接口和其它必要的I/O逻辑通信,这依赖于应用。
图15A是根据本发明的实施例的连接到管芯上互联网络1502且具有第二级(L2)高速缓存1504的本地子集的单一处理器内核的方框图。在一个实施例中,指令解码器1500支持具有打包数据指令集合扩展的x86指令集。L1高速缓存1506允许对标量和矢量单元中的高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元1508和矢量单元1510使用分开的寄存器集合(分别为标量寄存器1512和矢量寄存器1514),并且在这些寄存器之间转移的数据被写入到存储器并随后从一级(L1)高速缓存1506读回,但是本发明的替换实施例可以使用不同的方法(例如使用单个寄存器集合或包括允许数据在这两个寄存器组之间传输而无需被写入和读回的通信路径)。
L2高速缓存的本地子集1504是全局L2高速缓存的一部分,该全局L2高速缓存被划分成多个分开的本地子集,即每个处理器核一个本地子集。每个处理器核具有到其自己的L2高速缓存1504的本地子集的直接访问路径。被处理器核读出的数据被存储在其L2高速缓存子集1504中,并且可以被快速访问,该访问与其他处理器核访问其自己的本地L2高速缓存子集并行。被处理器核写入的数据被存储在其自己的L2高速缓存子集1504中,并在必要的情况下从其它子集清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其它逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012比特宽。
图15B是根据本发明的实施例的图15A中的处理器核的一部分的展开图。图15B包括L1高速缓存1504的L1数据高速缓存1506A部分、以及关于矢量单元1510和矢量寄存器1514的更多细节。具体地说,矢量单元1510是16宽矢量处理单元(VPU)(见16宽ALU 1528),该单元执行整型、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元1520支持对寄存器输入的混合、通过数值转换单元1522A-B支持数值转换,并通过复制单元1524支持对存储器输入的复制。写掩码寄存器1526允许断言所得的矢量写入。
具有集成存储器控制器和图形器件的处理器
图16是根据本发明的实施例的可具有一个以上核、可具有集成存储器控制器、并且可具有集成图形的处理器1600的方框图。图16的实线框示出了处理器1600,处理器1600具有单个核心1602A、系统代理1610、一组一个或多个总线控制器单元1606而可选附加的虚线框示出了替换式的处理器1600,具有多个核心1602A-N、系统代理单元1610中的一组一个或多个集成存储器控制器单元1614以及专用逻辑1608。
因此,处理器1600的不同实现可包括:1)CPU,其中专用逻辑1608是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核1602A-N是一个或多个通用核(例如,通用的有序核、通用的无序核、这两者的组合);2)协处理器,其中核1602A-N是主要预期用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核1602A-N是大量通用有序核。因此,处理器1600可以是通用处理器、协处理器或专用处理器,诸如例如网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、或嵌入式处理器等。该处理器可以被实现在一个或多个芯片上。处理器1600可以是一个或多个衬底的一部分,和/或可以使用诸如例如BiCMOS、CMOS或NMOS等的多个加工技术中的任何一个技术将其实现在一个或多个衬底上。
存储器层次结构包括在各核内的一个或多个级别的高速缓存、一个或多个共享高速缓存单元1606的集合、以及耦合至集成存储器控制器单元1614的集合的外部存储器(未示出)。该共享高速缓存单元1606的集合可以包括一个或多个中间级高速缓存,诸如二级(L2)、三级(L3)、四级(L4)或其他级别的高速缓存、末级高速缓存(LLC)、和/或其组合。尽管在一个实施例中,基于环的互连单元1612将集成图形逻辑1608、共享高速缓存单元1606的集合以及系统代理单元1610/集成存储器控制器单元1614互连,但替代实施例可使用任何数量的公知技术来将这些单元互连。在一个实施例中,在一个或多个高速缓存单元1606与核1602-A-N之间维持相干性。
在某些实施例中,核1602A-N中的一个或多个核能够多线程化。系统代理1610包括协调和操作核1602A-N的那些组件。系统代理单元1610可包括例如功率控制单元(PCU)和显示单元。PCU可以是或包括调整核1602A-N和集成图形逻辑1608的功率状态所需的逻辑和组件。显示单元用于驱动一个或多个外部连接的显示器。
核1602A-N在架构指令集合方面可以是同构的或异构的;即,这些核1602A-N中的两个或更多个核可能能够执行相同的指令集合,而其他核可能能够执行该指令集合的仅仅子集或不同的指令集合。
示例性计算机架构
图17-20是示例性计算机架构的框图。本领域已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般来说,能够纳入本文中所公开的处理器和/或其它执行逻辑的大量系统和电子设备一般都是合适的。
现在参考图17,所示出的是根据本发明一实施例的系统1700的框图。系统1700可以包括一个或多个处理器1710、1715,这些处理器耦合到控制器中枢1720。在一个实施例中,控制器中枢1720包括图形存储器控制器中枢(GMCH)1790和输入/输出中枢(IOH)1750(其可以在分开的芯片上);GMCH 1790包括存储器1740和协处理器1745耦合到的存储器和图形控制器;IOH 1750将输入/输出(I/O)设备1760耦合到GMCH 1790。替换地,存储器和图形控制器中的一个或两个在处理器(如本文中所描述的)内集成,存储器1740和协处理器1745直接耦合到处理器1710、以及在单一芯片中具有IOH 1750的控制器中枢1720。
附加的处理器1715的任选性在图17中通过虚线来表示。每一处理器1710、1715可包括本文中描述的处理核中的一个或多个,并且可以是处理器1600的某一版本。
存储器1740可以是例如动态随机存取存储器(DRAM)、相变化存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢1720经由诸如前侧总线(FSB)之类的多分总线(multi-drop bus)、诸如快速通道互连(QPI)之类的点对点接口、或者类似的连接1795与处理器1710、1715进行通信。
在一个实施例中,协处理器1745是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、或嵌入式处理器等等。在一个实施例中,控制器中枢1720可以包括集成图形加速计。
按照包括架构、微架构、热、功耗特征等等优点的度量谱,物理资源1710、1715之间存在各种差别。
在一个实施例中,处理器1710执行控制一般类型的数据处理操作的指令。嵌入在这些指令中的可以是协处理器指令。处理器1710识别如具有应当由附连的协处理器1745执行的类型的这些协处理器指令。因此,处理器1710在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器1745。协处理器1745接受并执行所接收的协处理器指令。
现在参照图18,所示出的是根据本发明一个实施例的更具体的第一示例性系统1800的框图。如图18所示,多处理器系统1800是点对点互连系统,且包括经由点对点互连1850耦合的第一处理器1870和第二处理器1880。处理器1870和1880中的每一个都可以是处理器1600的某一版本。在本发明的一个实施例中,处理器1870和1880分别是处理器1710和1715,而协处理器1838是协处理器1745。在另一实施例中,处理器1870和1880分别是处理器1710和协处理器1745。
处理器1870和1880被示为分别包括集成存储器控制器(IMC)单元1872和1882。处理器1870还包括作为其总线控制器单元的一部分的点对点(P-P)接口1876和1878;类似地,第二处理器1880包括点对点接口1886和1888。处理器1870、1880可以使用点对点(P-P)电路1878、1888经由P-P接口1850来交换信息。如图18所示,IMC 1872和1882将处理器耦合到相应的存储器,即存储器1832和存储器1834,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器1870、1880可各自经由使用点对点接口电路1876、1894、1886、1898的各个P-P接口1852、1854与芯片组1890交换信息。芯片组1890可以可选地经由高性能接口1839与协处理器1838交换信息。在一个实施例中,协处理器1838是专用处理器,诸如例如高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、或嵌入式处理器等等。
共享高速缓存(未示出)可以被包括在任一处理器之内或被包括两个处理器外部但仍经由P-P互连与这些处理器连接,从而如果将某处理器置于低功率模式时,可将任一处理器或两个处理器的本地高速缓存信息存储在该共享高速缓存中。
芯片组1890可经由接口1896耦合至第一总线1816。在一个实施例中,第一总线1816可以是外围部件互连(PCI)总线,或诸如PCI Express总线或其它第三代I/O互连总线之类的总线,但本发明的范围并不受此限制。
如图18所示,各种I/O设备1814可连同总线桥1818一起耦合到第一总线1816,总线桥1818将第一总线1816耦合到第二总线1820。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU的处理器、加速计(诸如例如图形加速计或数字信号处理器(DSP)单元)、场可编程门阵列或任何其他处理器的一个或多个附加处理器1815被耦合到第一总线1816。在一个实施例中,第二总线1820可以是低引脚计数(LPC)总线。各种设备可以被耦合至第二总线1820,在一个实施例中这些设备包括例如键盘/鼠标1822、通信设备1827以及诸如可包括指令/代码和数据1830的盘驱动器或其它海量存储设备的存储单元1828。此外,音频I/O1824可以被耦合至第二总线1820。注意,其它架构是可能的。例如,代替图18的点对点架构,系统可实现多点总线或者其他此类架构。
现在参照图19,所示出的是根据本发明实施例的更具体的第二示例性系统1900的框图。图18和19中的类似元件使用类似附图标记,且在图19中省略了图18的某些方面以避免混淆图19的其它方面。
图19示出处理器1870、1880可分别包括集成存储器和I/O控制逻辑(“CL”)1872和1882。因此,CL 1872、1882包括集成存储器控制器单元并包括I/O控制逻辑。图19示出:不仅存储器1832、1834耦合至CL 1872、1882,I/O设备1914也耦合至控制逻辑1872、1882。传统I/O设备1915被耦合至芯片组1890。
现在参照图20,所示出的是根据本发明一个实施例的SoC 2000的框图。图16中的类似元件具有相似的附图标记。另外,虚线框是更先进的SoC的可选特征。在图20中,互连单元2002被耦合至:应用处理器2010,该应用处理器包括一个或多个核202A-N的集合以及共享高速缓存单元1606;系统代理单元1610;总线控制器单元1616;集成存储器控制器单元1614;一组或一个或多个协处理器2020,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元2030;直接存储器存取(DMA)单元2032;以及用于耦合至一个或多个外部显示器的显示单元2040。在一个实施例中,协处理器2020包括专用处理器,诸如例如网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器等等。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或这些实现方法的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
诸如图18所示的代码1830之类的程序代码可应用于输入指令,以执行本文中所描述的功能并生成输出信息。输出信息可以按已知方式被应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有诸如例如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器之类的处理器的任何系统。
程序代码可以用高级程序化语言或面向对象的编程语言来实现,以便与处理系统通信。程序代码也可以在需要的情况下用汇编语言或机器语言来实现。事实上,本文中描述的机制不仅限于任何特定编程语言的范围。在任一情形下,语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表征性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制作用于执行本文所述的技术的逻辑。被称为“IP核”的这些表示可以被存储在有形的机器可读介质上,并被提供给多个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
这样的机器可读存储介质可以包括但不限于通过机器或设备制造或形成的物品的非瞬态、有形安排,其包括存储介质,诸如硬盘;任何其它类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、紧致盘可重写(CD-RW)的以及磁光盘;半导体器件,例如只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变化存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其它类型的介质。
因此,本发明的各实施例还包括非瞬态、有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特性。这些实施例也被称为程序产品。
仿真(包括二进制变换、代码变形等)
在某些情况下,指令转换器可用来将指令从源指令集转换至目标指令集。例如,指令转换器可以变换(例如使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其它方式将指令转换成将由核来处理的一个或多个其它指令。指令转换器可以用软件、硬件、固件、或其组合实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上部分在处理器外。
图21是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所示的实施例中,指令转换器是软件指令转换器,但作为替代该指令转换器可以用软件、固件、硬件或其各种组合来实现。图21以高级语言2102示出了程序,该程序可使用x86编译器2104来编译以生成x86二进制代码2106,该二进制代码可天然地由具有至少一个x86指令集核心的处理器2116来执行。具有至少一个x86指令集核2116的处理器表示任何处理器,这些处理器能通过兼容地执行或以其他方式处理以下内容来执行与具有至少一个x86指令集核的英特尔处理器基本相同的功能:1)英特尔x86指令集核的指令集的本质部分,或2)被定向为在具有至少一个x86指令集核的英特尔处理器上运行的应用或其它程序的目标代码版本,以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果。x86编译器2104表示用于生成x86二进制代码2106(例如,对象代码)的编译器,该二进制代码2106可通过或不通过附加的链接处理在具有至少一个x86指令集核2116的处理器上执行。类似地,图21以高级语言2102示出了程序,该程序可使用替换指令集编译器2108来编译以生成替换指令集二级制代码2110,替换指令集二级制代码2110可由不具有至少一个x86指令集核心的处理器2114(诸如,具有可执行加利福尼亚州桑尼威尔的MIPS技术公司的MIPS指令集的处理器和/或执行加利福尼亚州桑尼威尔的ARM控股公司的ARM指令集的处理器)来天然地执行。指令转换器2112被用来将x86二进制代码2106转换成可以由不具有x86指令集核2114的处理器原生执行的代码。该转换后的代码不大可能与替换性指令集二进制代码2110相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作并由来自替换性指令集的指令构成。因此,指令转换器2112通过仿真、模拟或任何其它过程来表示允许不具有x86指令集处理器或核的处理器或其它电子设备执行x86二进制代码2106的软件、固件、硬件或其组合。
在描述和权利要求书中,可使用术语“耦合”和“连接”及其衍生词。应当理解,这些术语并不旨在作为彼此的同义词。相反,在具体实施例中,“连接的”用于指示两个或更多个要素彼此直接物理或电接触。“耦合”可表示两个或多个元件直接物理或电气接触。然而,“耦合的”也可表示两个或更多个要素可能并未彼此直接接触,但是仍然彼此协作、彼此作用。例如,执行单元可通过一个或多个中间组件与寄存器耦合。
在以上描述中,为解释起见,阐明了众多具体细节以提供对本发明的实施例的透彻理解。然而,将对本领域技术人员明显的是,没有这些具体细节中的一些也可实践一个或多个其他实施例。具体实施例不是为了限制本发明而是为了说明。本发明的范围不是由所提供的具体示例确定,而是仅由所附权利要求确定。在其它实例中,以方框图形式而非以细节地示出了公知的电路、结构、设备和操作以避免使说明书的理解变得晦涩。
本领域的技术人员将意识到可对本文公开的实施例做出修改,诸如对实施例的各组件的配置、形式、功能和操作方式和使用进行修改。在附图中显示且在说明书中描述的关系的所有等效关系都被涵盖在本发明的实施例内。为说明的简单和清楚起见,在附图中示出的元素不一定按比例绘制。例如,为清楚起见,一些元件的尺寸相对其它元件被夸大。在附图中,箭头用于示出耦合。
已描述了各种操作和方法。已经以流程图方式以基础方式对一些方法进行了描述,但操作可选择地被添加至这些方法和/或从这些方法中移去。另外,根据示例性实施例,描述操作的特定顺序,但要理解该特定顺序是示例性的。替代实施例可选择地以不同顺序执行操作、合并某些操作、重叠某些操作,等等。可对所描述的方法作出和构想出许多修正和调整。
某些操作可由硬件组件执行,或者可体现在机器可执行或电路可执行的指令中,它们可用于使得或至少导致用执行这些操作的指令编程的电路或硬件。电路可包括通用或专用处理器、或逻辑电路,这里仅给出几个示例。这些操作还可任选地由硬件和软件的组合执行。执行单元和/或处理器可包括专门或特定电路,或者其它逻辑,它们对指令或微指令或者衍生自机器指令的一个或多个控制信号作出响应,以执行某些操作。
还应当理解,说明书全文对“一个实施例”、“一实施例”或“一个或多个实施例”的引用例如表示特定特征可包含在本发明实施例的实践中。类似地应当理解,在本说明书中,各个特征有时被一起编组在单个实施例、附图或其描述中以使本公开变得流畅并帮助理解各个创新性方面。然而,该公开方法不应被解释成反映本发明需要比每项权利要求中所明确记载的更多特征的意图。相反,如下面权利要求反映的,各创新性方面可具有比单个公开的实施例的全部特征更少的特征。因此,说明书之后所附的权利要求因此被明确纳入该说明书中,每一项权利要求独自作为本发明单独的实施例。

Claims (5)

1.一种处理器,包括:
a)解码器,用于接收第一指令集中用于仿真第二不同指令集中的打包数据操作掩码左移位指令的一个或多个指令,所述打包数据操作掩码左移位指令显式地指定源打包数据操作掩码并且具有8比特立即数来提供移位比特计数;以及
b)与所述解码器耦合的执行逻辑,所述执行逻辑,由于所述第一指令集中所述一个或多个指令,能够操作用于将结果存储于目的地中,所述结果的比特[15:0]包括所述源打包数据操作掩码已经逻辑地向左移位了所述移位比特计数且右侧移入所述移位比特计数个零的比特[15:0]。
2.如权利要求1所述的处理器,其特征在于,所述结果的比特[63:16]全部为零。
3.如权利要求1所述的处理器,其特征在于,所述打包数据操作掩码左移位指令是具有包括三字节VEX前缀的指令格式。
4.如权利要求1所述的处理器,其特征在于,所述打包数据操作掩码左移位指令是具有三比特来指定所述源打包数据操作掩码。
5.如权利要求1所述的处理器,其特征在于,所述打包数据操作掩码左移位指令隐含地指示所述源打包数据操作掩码的比特[15:0]要被移位。
CN201610865103.3A 2011-12-22 2011-12-22 处理器、机器可读存储介质和计算机实现的系统 Active CN106445469B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201610865103.3A CN106445469B (zh) 2011-12-22 2011-12-22 处理器、机器可读存储介质和计算机实现的系统

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
CN201610865103.3A CN106445469B (zh) 2011-12-22 2011-12-22 处理器、机器可读存储介质和计算机实现的系统
PCT/US2011/066863 WO2013095513A1 (en) 2011-12-22 2011-12-22 Packed data operation mask shift processors, methods, systems, and instructions
CN201180075868.2A CN104025024B (zh) 2011-12-22 2011-12-22 打包数据操作掩码移位处理器、方法及系统

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
CN201180075868.2A Division CN104025024B (zh) 2011-12-22 2011-12-22 打包数据操作掩码移位处理器、方法及系统

Publications (2)

Publication Number Publication Date
CN106445469A true CN106445469A (zh) 2017-02-22
CN106445469B CN106445469B (zh) 2019-03-08

Family

ID=48669154

Family Applications (2)

Application Number Title Priority Date Filing Date
CN201610865103.3A Active CN106445469B (zh) 2011-12-22 2011-12-22 处理器、机器可读存储介质和计算机实现的系统
CN201180075868.2A Active CN104025024B (zh) 2011-12-22 2011-12-22 打包数据操作掩码移位处理器、方法及系统

Family Applications After (1)

Application Number Title Priority Date Filing Date
CN201180075868.2A Active CN104025024B (zh) 2011-12-22 2011-12-22 打包数据操作掩码移位处理器、方法及系统

Country Status (4)

Country Link
US (2) US10564966B2 (zh)
CN (2) CN106445469B (zh)
TW (1) TWI511040B (zh)
WO (1) WO2013095513A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110221807A (zh) * 2019-06-06 2019-09-10 龙芯中科(合肥)技术有限公司 数据移位方法、装置、设备及计算机可读存储介质

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2013095513A1 (en) 2011-12-22 2013-06-27 Intel Corporation Packed data operation mask shift processors, methods, systems, and instructions
WO2014160338A1 (en) * 2013-03-13 2014-10-02 Amphenol Corporation Lead frame for a high speed electrical connector
US9477467B2 (en) * 2013-03-30 2016-10-25 Intel Corporation Processors, methods, and systems to implement partial register accesses with masked full register accesses
US9442731B2 (en) * 2014-03-13 2016-09-13 Intel Corporation Packed two source inter-element shift merge processors, methods, systems, and instructions
US10133570B2 (en) * 2014-09-19 2018-11-20 Intel Corporation Processors, methods, systems, and instructions to select and consolidate active data elements in a register under mask into a least significant portion of result, and to indicate a number of data elements consolidated
US20170177362A1 (en) * 2015-12-22 2017-06-22 Intel Corporation Adjoining data element pairwise swap processors, methods, systems, and instructions
KR101805694B1 (ko) 2016-08-24 2017-12-06 고려대학교 산학협력단 데이터의 선택적 시프트 연산을 이용한 데이터의 확장 및 축소를 위한 병렬 연산용 데이터 변환 장치 및 그 방법
CN110399117B (zh) * 2019-07-31 2021-05-28 上海燧原智能科技有限公司 一种混合乘法加法处理方法及装置
US11442726B1 (en) 2021-02-26 2022-09-13 International Business Machines Corporation Vector pack and unpack instructions
US20230075534A1 (en) * 2021-08-19 2023-03-09 International Business Machines Corporation Masked shifted add operation

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5353420A (en) * 1992-08-10 1994-10-04 Intel Corporation Method and apparatus for decoding conditional jump instructions in a single clock in a computer processor
CN1185606A (zh) * 1996-12-20 1998-06-24 国际商业机器公司 面向算术/移位操作的单指令多数据校正电路
CN1200822A (zh) * 1995-08-31 1998-12-02 英特尔公司 在分组数据上操作的指令集
US6098087A (en) * 1998-04-23 2000-08-01 Infineon Technologies North America Corp. Method and apparatus for performing shift operations on packed data
US20020112147A1 (en) * 2001-02-14 2002-08-15 Srinivas Chennupaty Shuffle instructions
US20050198473A1 (en) * 2003-12-09 2005-09-08 Arm Limited Multiplexing operations in SIMD processing
US20060235914A1 (en) * 1994-12-01 2006-10-19 Lin Derrick C Method and apparatus for providing packed shift operations in a processor
US20080082791A1 (en) * 2006-09-29 2008-04-03 Srinivas Chennupaty Providing temporary storage for contents of configuration registers
US20080301415A1 (en) * 2007-05-31 2008-12-04 Kabushiki Kaisha Toshiba Information processing system
CN102103487A (zh) * 2009-12-17 2011-06-22 英特尔公司 用于在单个指令中执行移位和异或运算的方法和装置
CN102246524A (zh) * 2008-12-09 2011-11-16 微软公司 使用单指令、多派遣指令的远程桌面协议压缩加速

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7529907B2 (en) 1998-12-16 2009-05-05 Mips Technologies, Inc. Method and apparatus for improved computer load and store operations
US7320013B2 (en) 2002-12-12 2008-01-15 Adaptec, Inc. Method and apparatus for aligning operands for a processor
US20070186210A1 (en) 2006-02-06 2007-08-09 Via Technologies, Inc. Instruction set encoding in a dual-mode computer processing environment
US7761694B2 (en) 2006-06-30 2010-07-20 Intel Corporation Execution unit for performing shuffle and other operations
WO2013095513A1 (en) 2011-12-22 2013-06-27 Intel Corporation Packed data operation mask shift processors, methods, systems, and instructions

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5353420A (en) * 1992-08-10 1994-10-04 Intel Corporation Method and apparatus for decoding conditional jump instructions in a single clock in a computer processor
US20060235914A1 (en) * 1994-12-01 2006-10-19 Lin Derrick C Method and apparatus for providing packed shift operations in a processor
US7451169B2 (en) * 1994-12-01 2008-11-11 Intel Corporation Method and apparatus for providing packed shift operations in a processor
CN1200822A (zh) * 1995-08-31 1998-12-02 英特尔公司 在分组数据上操作的指令集
CN1185606A (zh) * 1996-12-20 1998-06-24 国际商业机器公司 面向算术/移位操作的单指令多数据校正电路
US6098087A (en) * 1998-04-23 2000-08-01 Infineon Technologies North America Corp. Method and apparatus for performing shift operations on packed data
US20020112147A1 (en) * 2001-02-14 2002-08-15 Srinivas Chennupaty Shuffle instructions
US20050198473A1 (en) * 2003-12-09 2005-09-08 Arm Limited Multiplexing operations in SIMD processing
US20080082791A1 (en) * 2006-09-29 2008-04-03 Srinivas Chennupaty Providing temporary storage for contents of configuration registers
US20080301415A1 (en) * 2007-05-31 2008-12-04 Kabushiki Kaisha Toshiba Information processing system
CN102246524A (zh) * 2008-12-09 2011-11-16 微软公司 使用单指令、多派遣指令的远程桌面协议压缩加速
CN102103487A (zh) * 2009-12-17 2011-06-22 英特尔公司 用于在单个指令中执行移位和异或运算的方法和装置

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110221807A (zh) * 2019-06-06 2019-09-10 龙芯中科(合肥)技术有限公司 数据移位方法、装置、设备及计算机可读存储介质

Also Published As

Publication number Publication date
TW201346717A (zh) 2013-11-16
WO2013095513A1 (en) 2013-06-27
US20130275719A1 (en) 2013-10-17
US10564966B2 (en) 2020-02-18
TWI511040B (zh) 2015-12-01
CN104025024A (zh) 2014-09-03
CN104025024B (zh) 2018-07-17
US20200183688A1 (en) 2020-06-11
CN106445469B (zh) 2019-03-08

Similar Documents

Publication Publication Date Title
CN104094218B (zh) 用于执行写掩码寄存器到向量寄存器中的一系列索引值的转换的系统、装置和方法
CN104025039B (zh) 打包数据操作掩码串接处理器、方法、系统及指令
CN104025024B (zh) 打包数据操作掩码移位处理器、方法及系统
CN104040488B (zh) 用于给出相应复数的复共轭的矢量指令
CN104040482B (zh) 用于在打包数据元素上执行增量解码的系统、装置和方法
CN104137060B (zh) 高速缓存协处理单元
CN104335166B (zh) 用于执行混洗和操作的装置和方法
CN104040487B (zh) 用于合并掩码模式的指令
CN104011653B (zh) 打包数据操作掩码比较处理器、方法、系统
CN104011652B (zh) 打包选择处理器、方法、系统和指令
CN109791488A (zh) 用于执行用于复数的融合乘-加指令的系统和方法
CN104350492B (zh) 在大寄存器空间中利用累加的向量乘法
CN104081341B (zh) 用于多维数组中的元素偏移量计算的指令
CN104094182B (zh) 掩码置换指令的装置和方法
CN104081337B (zh) 用于响应于单个指令来执行横向部分求和的系统、装置和方法
CN104137053B (zh) 用于响应于单个指令来执行蝴蝶横向和交叉加法或减法的系统、装置和方法
CN104126170B (zh) 打包数据操作掩码寄存器算术组合处理器、方法、系统及指令
CN104025019B (zh) 用于执行双块绝对差求和的系统、装置和方法
CN104350461B (zh) 具有不同的读和写掩码的多元素指令
CN107003846A (zh) 用于向量索引加载和存储的方法和装置
CN107003852A (zh) 用于执行向量位混洗的方法和装置
CN107003845A (zh) 用于在掩码寄存器和向量寄存器之间可变地扩展的方法和装置
CN109196467A (zh) 将源封包数据划分为通路的处理器、方法、系统和指令
CN107145335A (zh) 用于大整数运算的向量指令的装置和方法
CN108268244A (zh) 用于算术递归的系统、装置和方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant