CN108885551B - 存储器复制指令、处理器、方法和系统 - Google Patents

存储器复制指令、处理器、方法和系统 Download PDF

Info

Publication number
CN108885551B
CN108885551B CN201780021154.0A CN201780021154A CN108885551B CN 108885551 B CN108885551 B CN 108885551B CN 201780021154 A CN201780021154 A CN 201780021154A CN 108885551 B CN108885551 B CN 108885551B
Authority
CN
China
Prior art keywords
data
copy
memory operand
memory
operand
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.)
Active
Application number
CN201780021154.0A
Other languages
English (en)
Other versions
CN108885551A (zh
Inventor
M·米谢利
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 CN202310099536.2A priority Critical patent/CN116339828A/zh
Publication of CN108885551A publication Critical patent/CN108885551A/zh
Application granted granted Critical
Publication of CN108885551B publication Critical patent/CN108885551B/zh
Active 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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • 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/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/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling

Abstract

一种处理器,包括:解码单元,用于解码存储器复制指令,该存储器复制指令指示源存储器操作数的开始、目的地存储器操作数的开始、以及要从源存储器操作数复制到目的地存储器操作数的初始数据量。执行单元用于响应于存储器复制指令,在中断之前将数据的第一部分从源存储器操作数复制到目的地存储器操作数。当源存储器操作数与目的地存储器操作数重叠时,将使用降序复制方向。响应于中断,当使用降序复制方向时,执行单元用于存储要复制的剩余数据量,但不用于指示源存储器操作数的不同的开始,并且不用于指示目的地存储器操作数的不同的开始。

Description

存储器复制指令、处理器、方法和系统
背景技术
技术领域
本文中所描述的实施例一般涉及处理器。具体而言,本文中所描述的实施例一般涉及用于执行用于将数据从存储器中的一个位置复制到存储器中的另一位置的指令的处理器。
背景信息
各种不同类型的数据处理系统包括处理器和存储器。存储器可用于存储软件和数据。软件的示例可能包括文字处理应用、电子表格应用、互联网浏览器应用、图形应用、音频应用等等。不同类型的数据的示例包括文本数据、数值数据、图形数据、音频数据等等,此处仅是列举数例。
处理器可执行软件的指令以对数据进行操作和/或处理该数据。这些指令可包括机器级指令或处理器的指令集中的其他指令。本领域中已知用于处理数据的各种不同类型的指令,诸如例如,用于将数据从存储器加载到处理器的指令、用于处理数据的算术和/或逻辑指令、用于将数据从处理器存储到存储器的指令,等等。
附图说明
通过参考以下描述以及用于说明多个实施例的附图,可最佳地理解本发明。在附图中:
图1是执行存储器复制指令的实施例的方法的实施例的流程框图。
图2是无操作数重叠的情况下以升序复制方向的复制操作的框图。
图3是在有操作数重叠的情况下以升序复制方向的复制操作并且图示出重叠区域中的初始源数据可能由该复制操作覆写的框图。
图4是有操作数重叠的情况下以降序复制方向的复制操作的框图。
图5是可操作以执行存储器复制指令的实施例的处理器的实施例的框图。
图6是合适的32位通用寄存器组的示例实施例的框图。
图7是合适的64位通用寄存器组的示例实施例的框图。
图8是利用降序复制方向对重叠的存储器操作数执行存储器复制指令的实施例的方法的实施例的流程框图,其允许中断该存储器复制指令。
图9是变换器模块的实施例的框图。
图10A是图示出有序流水线的实施例以及寄存器重命名的乱序发布/执行流水线的实施例的框图。
图10B是处理器核的实施例的框图,该处理器核包括耦合到执行引擎单元的前端单元,并且执行引擎单元和前端单元两者都耦合到存储器单元。
图11A是单个处理器核以及它与管芯上互连网络的连接及其第二级(L2)高速缓存的本地子集的实施例的框图。
图11B是图11A的处理器核的部分的展开图的实施例的框图。
图12是可具有多于一个的核、可具有集成存储器控制器并且可具有集成图形器件的处理器的实施例的框图。
图13是计算机架构的第一实施例的框图。
图14是计算机架构的第二实施例的框图。
图15是计算机架构的第三实施例的框图。
图16是计算机架构的第四实施例的框图。
图17是根据本发明的实施例的使用软件指令转换器将源指令集中的二进制指令转换为目标指令集中的二进制指令的框图。
具体实施方式
本文中所公开的是存储器复制指令、用于处理或执行该存储器复制指令的处理器、由该处理器执行以处理或执行存储器复制指令的方法、包含用于处理或执行该存储器复制指令的一个或多个处理器的系统、以及用于存储或以其他方式提供存储器复制指令的机器可读介质。在一些实施例中,处理器可具有用于处理或执行存储器复制指令的逻辑。在一些实施例中,该逻辑可包括用于解码存储器复制指令的解码单元和用于执行存储器复制指令的执行单元。在以下描述中,阐述了众多特定细节(例如,特定指令操作、寄存器、指示操作数的方式、数据格式、处理器配置、微架构细节、操作序列等)。然而,可在没有这些特定细节的情况下实施实施例。在其他实例中,未详细示出公知的电路、结构和技术,以避免使对本说明书的理解模糊。
图1是处理或执行存储器复制指令的实施例的方法100的实施例的流程框图。在各实施例中,该方法可由处理器、指令处理装置、数字逻辑设备、集成电路、芯片上系统(SoC)等等来执行。
该方法包括,在框101处,接收存储器复制指令。在各方面中,可在处理器、SoC、集成电路等等或其部分(例如,指令取出单元、解码单元、总线接口单元等)处接收该指令。在各方面中,可从处理器外和/或管芯外的源(例如,从管芯外的存储器或总线或其他互连)或从处理器上和/或管芯上的源(例如,从指令高速缓存、指令队列或管芯上存储器)接收该指令。存储器复制指令可表示宏指令、机器代码指令或处理器的指令集中的其他指令或控制信号。
在一些实施例中,存储器复制指令可显式地指定(例如,通过一个或多个字段或者一组位)或以其他方式指示(例如,隐式地指示)存储器中的源操作数的开始、存储器中的目的地操作数的开始以及要从源操作数复制到目的地操作数的数据量中的每一个。在各实施例中,源操作数和目的地操作数可各自表示串(例如,字母数字字符串)、数据元素(例如,字母数字字符)序列、包括连续数据元素的数据结构等等。源操作数和目的地操作数还可被认为是并被简称为指令的源和目的地。如本文中所使用,术语"操作数"不意指需要对操作数执行的任何算术的、逻辑的或数学的操作。各数据或数据元素可具有8位的(例如,字节)、16位的(例如,字)、32位的(例如,双字)或64位的(例如,四字)粒度。源操作数和目的地操作数的开始点可表示源操作数和目的地操作数的开始或最低寻址部分的地址、地址信息、指针、偏移或其他指示。要复制的数据量在不同的实施例中可以以不同方式表达。作为示例,在各实施例中,可将数据量表达为要复制的位、字节、字、双字、四字或数据元素的数量,或者表达为以位、字节、字、双字、四字或数据元素表示的源操作数的长度,或者表达为要复制的字符串的尺寸,或者表达为源操作数或目的地操作数的结尾或最高寻址部分的地址、指针、偏移或其他指示。
源操作数和目的地操作数的开始点以及要复制的数据量可表示输入或输入参数。这些输入或输入参数在不同的实施例中可由指令以不同的方式指示。作为一个示例,指令可具有源和/或目的地操作数指定字段,用于指定用于存储源操作数的开始、目的地操作数的开始以及要复制的数据量的寄存器、存储器位置或其他存储位置。作为另一示例,这些寄存器或其他存储位置中的一个或多个可任选地对于指令是隐式的(例如,对于指令的操作码是隐式的)。作为又一示例,源操作数的开始、目的地操作数的开始和/或要复制的数据量中的一者或多者可任选地由指令自身的字段或其他部分指定或以其他方式指示,而不是在寄存器或其他存储位置中被指定或以其他方式指示。作为一个示例,指令的字段可具有用于指示要复制的数据量(例如,字节的数量)的值。可任选地使用这些不同方法的各种组合。
为了进一步说明,在一些实施例中,源操作数和目的地操作数的开始点以及要复制的数据量可通过处理器的架构寄存器、集成电路或执行指令的其他装置来指定或以其他方式指示。在一些实施例中,这些寄存器可以是通用寄存器(例如,其可部分地用于地址生成以及一般算术和/或逻辑计算)。例如,第一寄存器(例如,第一通用寄存器)可用于存储源操作数的开始或最低寻址部分的地址、地址信息、指针、偏移或其他指示。类似地,第二寄存器(例如,第二通用寄存器)可用于存储目的地操作数的开始或最低寻址部分的地址、地址信息、指针、偏移或其他指示。第三寄存器(例如,第三通用寄存器)可用于存储位、字节、字、双字、四字、数据元素的数量、源操作数或目的地操作数的结尾的指示、或者要复制的数据量的另一指示。为了更进一步说明可能的
Figure BDA0001815376890000041
Figure BDA0001815376890000042
64和/或IA-32架构实现方式的一个特定示例,通用寄存器ESI(以32位模式,或以64位模式的寄存器RSI)可任选地用于存储指向源操作数的开始的指针,通用寄存器EDI(以32位模式,或以64位模式的寄存器RDI)可任选地用于存储指向目的地操作数的开始的指针,并且通用寄存器ECX(以32位模式,或以64位模式的寄存器RCX)可任选地用于存储要复制的字节数量,但是本发明的范围不限于此。下文将进一步讨论的图6-图7提供了上述/>
Figure BDA0001815376890000044
Figure BDA0001815376890000043
64和/或IA-32架构中的通用寄存器的进一步讨论。
在框102处,响应于存储器复制指令,可作出源操作数与目的地操作数是否重叠的判定,诸如例如,基于简单减法、基于预测、基于试探法等等。如下文将进一步解释,源操作数与目的地操作数是否在存储器中重叠可改变执行指令所按照的特定方式,以确保实现正确的和/或预期的结果(参见例如,图2-图4的讨论)。源操作数与目的地操作数是否重叠一般地取决于由指令指示的特定的输入参数(例如,所指示的源操作数和目的地操作数的开始点以及所指示的要复制的数据量)。在一些情况下,输入参数可以使得源操作数与目的地操作数重叠,而在其他情况下,输入参数可以使得源操作数与目的地操作数不重叠。作为示例,如果与要复制的数据量相比目的地操作数的开始更远离于源操作数的开始,那么可判定(例如,响应于正在执行的指令)源操作数与目的地操作数不重叠。替代地,如果与要复制的数据量相比目的地操作数的开始更接近于源操作数的开始,那么可判定(例如,响应于正在执行的指令)源操作数与目的地操作数重叠。
为了进一步说明,基于以上所提到的
Figure BDA0001815376890000051
64和/或IA-32架构实现方式的特定示例(例如,其中ESI具有指向源操作数的开始的指针,EDI具有指向目的地操作数的开始的指针,并且ECX具有要复制的字节的数量),则可通过评估存储在EDI中的指针或值减去存储在ESI中的指针或值之间的差是否大于存储在ECX中的要复制的字节的数量或值来作出此类判定(例如,是否(EDI-ESI)>ECX)。或者,在64位模式中,可通过评估存储在RDI中的指针或值减去存储在RSI中的指针或值之间的差是否大于存储在RCX中的要复制的字节的数量或值来作出此类判定(例如,是否(RDI-RSI)>RCX)。不一定要求这些特定寄存器。在一个方面中,可使用无符号比较来执行大于的比较。此类简单减法或差是用于进行对适当的复制方向的确定的相对简单和直接的方式,但是如果需要,则可任选地使用更复杂的方法。例如,构想用于确定用于复制操作的复制方向的替代方法可基于试探法、过去的历史和/或预测。作为示例,如果两个复制方向都将实现正确的结果(例如,在不存在重叠的情况下),处理器可基于附加因素在升序或者降序复制方向之间选择,该附加因素诸如例如,通用机器状态、指令的操作数、对指令作出的先前决策(例如,使用历史以用于预测)等等。此外,本领域技术人员和受益于本公开的人员将会领会,存在至少部分基于由存储器复制指令指示的特定输入参数来作出此类确定的各种其他方式。
再次参考图1,如果源操作数与目的地操作数不重叠(即,在框102处的判定为“否”),那么可确定利用升序复制来执行存储器复制指令和/或其存储器复制、移动或其他存储操作。方法可行进至框103,在框103处,处理器或其他集成电路可开始执行升序或向前的复制、移动或其他存储,以将来自源操作数的数据复制或存储到目的地操作数。该升序或向前的复制可表示以从操作数的开始向操作数的结尾(例如,从头部到尾部)和/或从较低寻址数据到较高寻址数据的方向复制。术语“较高”和“较低”在本文中用作相对术语(即,相对于彼此)而不是绝对术语。另外,本文中所描述的操作通常被称为“复制”,但是它们也可以实现为从一个存储器位置到另一个存储器位置的“移动”或其他存储。
为了进一步说明,基于以上所提到的
Figure BDA0001815376890000061
64和/或IA-32架构实现方式的特定示例(例如,其中ESI具有指向源操作数的开始的指针,EDI具有指向目的地操作数的开始的指针,并且ECX具有要作为字符串或其他连续字节序列复制的字节的数量),可以如由下列伪代码所示地执行升序或向前的复制:
While(ECX>0){
[EDI]←[ESI]//从起始开始从源操作数复制到目的地操作数
ESI++,EDI++//递增开始点,因为按升序顺序执行复制
ECX--//递减有待复制的字节的数量
}
在该伪代码中,符号"←"指示复制或者以其他方式存储(例如,从ESI复制到EDI)。符号"++"指示递增前面的通用寄存器中的值。符号"--"指示递减前面的通用寄存器中的值。符号"//"指示之后是注释。还设想了使用三个不同的32位或64位通用寄存器(例如,EDI可由寄存器R1代替,ECX可由寄存器R2代替,并且ECX可由寄存器R3代替)的类似类型的复制操作,并且其中输入参数以各种不同的方式表达(例如,复制四字节双字但是要复制的数据量以字节表达因此对于每一个复制的数据元素要复制的数据量递减4,等等)。
再次参考图1。替代地,如果源操作数与目的地操作数重叠(即,在框102处的判定为"是"),那么可确定利用降序复制来执行存储器复制指令和/或其存储器复制操作。方法可行进至框104,在框104处,处理器或其他集成电路可开始执行降序或向后的复制,以将来自源操作数的数据复制到目的地操作数。该降序或向后的复制可表示以从操作数的结尾向操作数中的每一个的开始(例如,从尾部到头部)和/或从较高寻址数据到较低寻址数据的方向复制。
为了进一步说明,基于以上所提到的
Figure BDA0001815376890000071
64和/或IA-32架构实现方式的特定示例(例如,其中ESI具有指向源操作数的开始的指针,EDI具有指向目的地操作数的开始的指针,并且ECX具有要复制的字节的数量),可以如由下列伪代码所示地执行升序或向前的复制:
While(ECX>0){
[EDI+(ECX-1)]←[ESI+(ECX-1)]//从结尾开始从源复制到目的地
ECX--//递减有待复制的字节的数量
}
在该伪代码中,符号"←"指示按箭头的方向复制或以其他方式存储。符号"--"指示递减前面的通用寄存器中的值。符号"//"指示之后是注释。还设想了使用三个不同的32位或64位通用寄存器(例如,R1、R2和R3)的类似类型的复制操作,并且其中输入参数以各种不同的方式表达(例如,寄存器R1、R2和R3中的一个或多个以不同于一个或多个其他寄存器的粒度表达)。
如由框102-104所示,可利用升序或者降序复制来执行存储器复制指令。此外,响应于该存储器复制指令(例如,响应于该指令被解码,响应于由于解码该指令而产生的控制信号等),处理器或其他集成电路可确定(例如,基于是否存在重叠)要使用升序复制和降序复制中的哪一个。在一些实施例中,处理器或其他集成电路可操作以响应于存储器复制指令、主要或完全基于由该存储器复制指令指示的输入参数(例如,以上所提到的输入参数中的任何一个)来确定此类复制方向。在一些实施例中,可以在不使用或至少不要求来自软件和/或以其他方式来自存储器复制指令的执行范围之外的复制方向提示的情况下确定复制方向。
另一可能方法是针对软件提供复制方向的提示或指示并且针对指令使用、依赖于或者在一些情况下被控制以根据来自软件的复制方向的该提示或指示来选择复制方向。作为示例,软件可通过设置方向标志、标志寄存器中的位、状态寄存器中的位等等,来提供该提示或指示,并且指令的执行可检查该方向标志、标志寄存器中的位、状态寄存器中的位等等并且使用所指示的复制方向,而不是通过其本身的实行/执行来自发地确定复制方向。然而,来自软件的复制方向的此类提示或指示一般将需要由存储器复制指令的执行范围之外的软件执行(例如,在执行存储器复制指令以检查提示或指示之前)。此外,来自软件的复制方向的此类提示或指示一般将涉及执行一个或多个附加指令(例如,用于查看是否存在重叠、改变位的值等)。因此,使用来自软件的复制方向的此类提示或指示的可能缺陷在于其可能涉及执行附加指令和/或花费额外的时间和/或增加软件需要完成的工作量(例如,对编程者产生更多的工作等)。
然而,在一些实施例中,来自软件的此类提示或指示可以不用于确定复制方向或者至少不被要求。相反,如以上所讨论,存储器复制指令在被执行时可操作以基于指令的输入参数来确定复制方向(例如,通过使用源操作数的开始、目的地操作数的开始以及要复制的数据量来评估是否存在重叠)。在一些实施例中,当确定要使用的复制方向时,存储器复制指令在被执行时可任选地不检查并且可以不使用此类软件提供的复制方向的提示或指示。在一些实施例中,可能不存在来自软件的复制方向的此类提示或指示。在一些实施例中,存储器复制指令在被执行时可操作以完全基于存储器复制指令的输入操作数或源操作数来自发地(例如,没有来自软件的帮助)确定复制方向。
再次参考图1,在框105处,响应于存储器复制指令和/或作为存储器复制指令的结果,处理器或其他集成电路可将数据量(例如,如由存储器复制指令所指示)从存储器中的源操作数复制、移动或以其他方式存储到存储器中的目的地操作数。在一些实施例中,可分开地或以彼此分立的部分复制、移动或以其他方式存储数据的不同部分。例如,复制、移动或存储操作可重复数次,直到已经复制全部数据量。为了进一步说明,基于以上所提到的
Figure BDA0001815376890000081
64和/或IA-32架构实现方式的特定示例,在各实施例中,指令在被执行时可操作以执行下列操作中的任何一个:
(1)将(E)CX字节从地址DS:[(E)SI]存储到地址ES:[(E)DI]
(2)将RCX字节从地址[RSI]存储到地址[RDI]
(3)将(E)CX字从地址DS:[(E)SI]存储到地址ES:[(E)DI]
(4)将(E)CX双字从地址DS:[(E)SI]存储到地址ES:[(E)DI]
(5)将RCX四字从地址[RSI]存储到地址[RDI]
在以上表达中,DS表示数据段寄存器,并且ES表示用于进一步指定存储器地址的额外的段寄存器。寄存器周围的括号(例如,[RSI])指示存储器引用,其中,寄存器中的值指向存储器地址。在此情况下,在64位模式下,段寄存器ES和DS是平坦的(例如,段基为零),因此存储器引用就是没有段寄存器的情况下的寄存器中的值。(E)指示任选的/替代的寻址形式。例如,在64位模式下,64位通用寄存器(例如,RDI)具有64位的指针,而在32位模式下,可以以不同的寻址形式引用存储器,即在32位通用寄存器(例如,EDI)中使用32位的指针,或者在16位通用寄存器(例如,DI)中使用16位的指针。
已经以相对基本的形式示出和描述了方法100,但可任选地向该方法添加操作和/或从该方法移除操作。例如,可任选地添加如下文针对图8进一步所讨论的与处置中断相关联的操作(例如,框857)。另外,尽管流程图示出根据实施例的操作的特定顺序,但该顺序是示例性的。替代的实施例可按不同的顺序执行这些操作、组合某些操作、使某些操作重叠,等等。
所图示的方法涉及架构操作(例如,那些从软件角度可见的操作)。在其他实施例中,该方法可以任选地包括一个或多个微架构操作。作为示例,可乱序地取出、解码、调度指令,可访问源操作数,可生成存储器地址,执行单元可执行多个微架构操作以实现该指令等。在一些实施例中,用于实现该指令的微架构操作可任选地包括使用指令的输入参数来判定源操作数与目的地操作数是否重叠。
图2是图示出在具有无操作数重叠217的情况下以升序复制方向213的复制操作208的图。从源存储器操作数209到目的地存储器操作数214执行该复制操作。如在该示例中所示,在源存储器操作数与目的地存储器操作数之间存在无重叠217。例如,该示例的源存储器操作数占据存储器地址212[0100]-[0104],而目的地存储器操作数占据存储器地址[0105]-[0109]。在所图示的示例中,源存储器操作数存储拼写单词"HORSE"的值或字符。以升序复制方向213执行复制。在该升序复制方向上,数据初始地从源存储器操作数的开始210复制到目的地存储器操作数的开始215,并且朝向将数据从源存储器操作数的结尾211复制到目的地存储器操作数的结尾211进行。各个箭头用于示出将数据元素中的每一个从哪个源操作数位置或存储器地址复制到哪个目的地操作数位置或存储器地址。如所示,源操作数中的拼写单词"HORSE"的值或字符被复制,以在目的地操作数中拼写单词"HORSE"。在此情况下,当存在无重叠时,没有源操作数初始字符由于复制而被覆写。在此类无重叠的情况下,以所示出的升序方向或者以降序方向复制两者都是合适的。在此类情况下通常使用升序方向,因为其通常可倾向于具有更好的性能。
图3是图示出在具有操作数重叠321的情况下以升序复制方向313的复制操作320并且图示出重叠区域中的初始源数据可能由复制操作覆写的图。从源存储器操作数309到目的地存储器操作数314执行该复制操作。如在该示例中所示,在源存储器操作数与目的地存储器操作数之间存在操作数重叠321。例如,该示例的源存储器操作数占据存储器地址312[0100]-[0108],并且目的地存储器操作数占据存储器地址[0104]-[010C]。位置或存储器地址[0104]-[0108]形成源操作数与目的地操作数之间的操作数重叠321的区域。在所图示的示例中,源存储器操作数存储拼写单词"ELEPHANTS"的值或字符。以升序复制方向313执行复制。在该升序复制方向上,数据初始地从源存储器操作数的开始310复制到目的地存储器操作数的开始315,并且朝向将数据从源存储器操作数的结尾311复制到目的地存储器操作数的结尾316进行。各个箭头用于示出将数据元素中的一些从哪个源操作数位置或存储器地址复制到哪个目的地操作数位置或存储器地址。如所示,可将源操作数的地址[0100]-0103]中拼写单词"ELEP"的值或字符复制到源操作数的地址[0104]-0107]。这些数据元素在操作数重叠321的区域之前。然而,注意,当在操作数重叠的区域中以升序方向复制时,发生不同的情形。具体地,注意,当从源操作数的地址[0104]到目的地操作数的对应地址[0108]执行复制时,字母"E"而不是字母"H"被复制到目的地操作数。这是因为来自源操作数的地址[0100]的字母"E"已经在复制操作中更早地覆写了存储器中的地址[0104](例如,如由图示中最左侧的箭头所示)。换言之,源操作数中的开始或初始数据中的一些在其可以被复制到目的地操作数之前由复制操作覆写并且丢失。对于操作数重叠的区域中的其他数据元素存在类似的情形。作为结果,复制操作将来自源的单词"ELEPHANTS"复制为目的地操作数中的"ELEPELEPE"。在此类重叠的情况下,以升序方向复制会导致数据的丢失和错误的结果。如下文将进一步所讨论,如果标准存储器复制函数memcpy(例如,在glibc、Visual Studio 6.0等中可用)用于存储器中的重叠的操作数,则可能遭遇此类数据丢失,因为其没有办法保留重叠区域中的源数据。相反,标准存储器复制函数memmove可在存在操作数重叠时使用,尽管其倾向于具有较慢的性能。
图4是图示出在具有操作数重叠421的情况下以降序复制方向426的复制操作425的图。从源存储器操作数409到目的地存储器操作数414执行该复制操作。如在该示例中所示,在源存储器操作数与目的地存储器操作数之间存在操作数重叠421。例如,该示例的源存储器操作数占据存储器地址412[0100]-[0108],并且目的地存储器操作数占据存储器地址[0104]-[010C]。位置或存储器地址[0104]-[0108]形成源操作数与目的地操作数之间的操作数重叠421的区域。在所图示的示例中,源存储器操作数存储拼写单词"ELEPHANTS"的值或字符。以降序复制方向426执行复制。在该降序复制方向上,数据初始地从源存储器操作数的结尾411复制到目的地存储器操作数的结尾416,并且朝向将数据从源存储器操作数的开始410复制到目的地存储器操作数的开始415进行。例如,首先复制字母"S",然后复制字母"T",然后复制字母"N",以此类推。各个箭头用于示出将数据元素中的一些从哪个源操作数位置或存储器地址复制到哪个目的地操作数位置或存储器地址。如所示,可忠实地复制源操作数中的拼写单词"ELEPHANTS"的值或字符,以在目的地操作数中拼写单词"ELEPHANTS"。即使在操作数重叠的区域中,当以降序方向复制时,不覆写源操作数的数据,并且不因为复制导致数据丢失。相应地,在操作数重叠的情况下,可使用以降序方向复制,以避免在复制操作期间覆写以及丢失初始或起始源操作数数据中的一些。
图5是可操作以执行存储器复制指令531的实施例的处理器530的实施例的框图。在图示中,存储器545与处理器耦合,但其他实施例涉及单独的处理器而没有存储器(例如,部署在具有存储器的系统中之前的处理器)。在一些实施例中,处理器530可操作以执行图1的方法100。本文中针对方法100所描述的特征和具体的任选细节也任选地应用于处理器530,该处理器530可任选地执行该方法。替代地,可由类似或不同的处理器或装置和/或在类似或不同的处理器或装置内执行方法100。此外,处理器530可执行与方法100类似或不同的方法。
在一些实施例中,处理器530可以是通用处理器(例如,台式计算机、膝上型计算机或其他计算机中所使用类型的例如在半导体管芯或集成电路上的通用微处理器或中央处理单元(CPU))。替代地,该处理器可以是专用处理器。合适的专用处理器的示例包括但不限于,网络处理器、通信处理器、密码处理器、图形处理器、协处理器、嵌入式处理器、数字信号处理器(DSP)以及控制器(例如,微控制器)。处理器可具有各种复杂指令集计算(CISC)架构、精简指令集计算(RISC)架构、超长指令字(VLIW)架构、混合架构、其他类型的架构中的任一种,或者具有不同架构的组合(例如,不同的核可具有不同的架构)。
在操作期间,处理器530可接收存储器复制指令531。在各方面中,可从处理器外和/或管芯外的源(例如,从管芯外存储器或总线或其他互连)或从处理器上和/或管芯上的源(例如,从指令高速缓存、指令队列或管芯上存储器)接收该指令。存储器复制指令可表示宏指令、机器代码指令或处理器的指令集中的其他指令或控制信号。
在一些实施例中,存储器复制指令可显式地指定(例如,通过一个或多个字段或者一组位)或以其他方式指示(例如,隐式地指示)存储器545中的源存储器操作数546的开始535、存储器中的目的地存储器操作数547的开始536以及要从源存储器操作数546复制到目的地存储器操作数547的数据量537中的每一个。可使用以上针对图1所描述的各种不同方法中的任何一种由指令指定或以其他方式指示这些输入或输入参数。此外,可通过以上针对图1所描述的各种不同种类的信息中的任何一种来表示这些输入或输入参数。
如所示,在一些实施例中,源存储器操作数的开始535、目的地存储器操作数的开始536以及要复制的数据量537可各自任选地存储在处理器的一组通用寄存器534中的不同寄存器中,但本发明的范围不限于此。通用寄存器中的每一个可表示可操作以存储数据的管芯上存储位置。通用寄存器可表示架构上可见或对软件和/或编程者可见的架构寄存器,并且/或者是由处理器的指令集中的指令指示以标识操作数的寄存器。可在不同的微架构中、以不同方式实现这些通用寄存器,并且它们不限于任何特定类型的设计。合适类型的寄存器的示例包括但不限于,专用物理寄存器、使用寄存器重命名的动态分配的物理寄存器以及它们的组合。在一些实施例中,这些通用寄存器可以任选地是针对图6-图7所示出和所描述的通用寄存器中的任何一个,但本发明的范围不限于此。在其他实施例中,存储器位置或其他存储位置可任选地用于存储存储器复制指令的输入和/或输入参数中的一个或多个。
再次参考图1,该处理器包括解码单元或解码器532。解码单元可接收并解码存储器复制指令。解码单元可输出反映、表示相对较高级的存储器复制指令和/或从相对较高级的存储器复制指令导出的一个或多个相对较低级的指令或控制信号(例如,一个或多个微指令、微操作、微代码进入点、经解码的指令或控制信号等)。在一些实施例中,解码单元可包括用于接收存储器复制指令的一个或多个输入结构(例如,(多个)端口、(多个)互连、接口)、与输入结构耦合用于识别并解码存储器复制指令的指令识别和解码逻辑、以及与指令识别和解码逻辑耦合用于输出(多个)较低级指令或(多个)控制信号的一个或多个输出结构(例如,(多个)端口、(多个)互连、接口)。可使用各种不同的机制来实现解码单元,各种不同的机制包括但不限于,微代码只读存储器(ROM)、查找表、硬件实现方式、可编程逻辑阵列(PLA)和适用于实现解码单元的其他机制。
在一些实施例中,作为将存储器复制指令直接提供给解码单元532的替代方案,可任选地使用指令仿真器、变换器、变形器、解释器或其他指令转换模块。各种类型的指令转换模块可以以软件、硬件、固件、或其组合实现。在一些实施例中,指令转换模块可位于处理器外部,诸如例如,在分开的管芯上和/或在存储器中(例如,作为静态的、动态的或运行时仿真模块)。作为示例,指令转换模块可接收存储器复制指令,该存储器复制指令可以是第一指令集中的指令,并且指令转换模块可将存储器复制指令仿真、变换、变形、解释或以其他方式转换为可以是第二不同指令集中的一个或多个对应的中间指令或控制信号。可将第二指令集中的这一个或多个中间指令或控制信号提供给解码单元(例如,解码单元532),该解码单元可将它们解码为可由处理器的原生硬件(例如,一个或多个执行单元)执行的一个或多个较低级的指令或控制信号。
在一些实施例中,处理器还可包括一个或多个存储器地址寄存器,该存储器地址寄存器可操作以存储将与源操作数和目的地操作数中的每一个的开始组合使用以寻址源存储器操作数和目的地存储器操作数的存储器地址信息。合适的(多个)存储器地址寄存器的示例包括但不限于,(多个)数据段选择器寄存器、(多个)扩展段选择器寄存器等等,或者本领域中已知的用于不同架构的其他此类存储器地址寄存器。作为示例,处理器可使用字节寻址,其中存储器被组织为字节序列并且作为字节序列被访问。字节地址可用于寻址和访问地址空间内的存储器中的一个或多个字节,该地址空间表示可以被寻址的存储器的范围。利用分段寻址,程序可具有多个被称为段的独立地址空间。可将字节地址指定为来自段寄存器的地址信息和来自通用寄存器的进一步的地址信息(例如,字节地址)的组合(例如,段寄存器:字节-地址)。例如,地址DS:FF79H可用于寻址在由DS段寄存器指向的段中的地址FF79H处的字节。
再次参考图5,执行单元533与解码单元532耦合、与源或输入参数(例如,源存储器操作数的开始535、目的地存储器操作数的开始536、以及数据量537)耦合、与存储器545耦合、并且与通用寄存器534耦合。执行单元可接收表示存储器复制指令和/或从存储器复制指令导出的一个或多个经解码的或以其他方式转换的指令或控制信号。执行单元还可接收由指令指示的源或输入参数。在一些实施例中,响应于存储器复制指令和/或作为存储器复制指令的结果(例如,响应于从指令解码的一个或多个指令或控制信号和/或响应于正在被解码的指令和/或响应于正在被提供给解码器的指令),执行单元可操作以确定复制方向,至少第一复制操作(例如,由于故障、中断或异常导致的任何潜在中断或暂停之前的另外的其他操作)将以该方向执行。
在一些实施例中,执行单元可操作以至少部分基于源存储器操作数与目的地存储器操作数之间是否存在重叠来作出复制方向的此类确定。如所示,在一些实施例中,执行单元可包括复制方向确定逻辑538,该复制方向确定逻辑538包括源与目的地存储器操作数重叠判定逻辑539。这些逻辑可以以硬件(例如,集成电路、晶体管或其他电路元件等)、固件(例如,ROM、EPROM、闪存、或者其他持久或非易失性存储器、以及存储在其中的微代码、微指令或其他较低级指令)、软件(例如,存储在存储器中的较高级指令)或其组合(例如,潜在地与固件和/或软件中的一个或多个组合的硬件)来实现。源存储器操作数与目的地存储器操作数重叠判定逻辑可操作以判定源存储器操作数与目的地存储器操作数是否重叠。该逻辑可操作以使用以上先前针对图1所描述的方法中的任何一个来作出此判定。例如,这可包括:如果与要复制的数据量(例如,按字节)相比目的地操作数的开始更远离(例如,按字节)于源操作数的开始则判定不存在重叠,或者如果与要复制的数据量相比目的地操作数的开始更接近于源操作数的开始则判定存在重叠。
在一些实施例中,该逻辑可操作以使用由存储器复制指令指示的输入参数和/或可从其导出的一个或多个参数来作出此判定。在一些实施例中,至少部分基于是否存在重叠的此类判定,执行单元可操作以为在可能的中断之前的至少第一或初始复制操作确定复制方向。在一些实施例中,至少在存在重叠时,执行单元可确定降序复制方向。如果不存在重叠,则可使用升序或降序复制方向,但是在一些实施例中可使用升序复制方向,因为其可倾向于是更高效的。在一些实施例中,执行单元可操作以主要基于或在一些情况下完全基于由存储器复制指令指示的输入参数和/或可从其导出的参数来自发地确定复制方向,而不要求并且典型地不使用从软件提供的对使用什么复制方向的复制方向提示或指示。如所示,不要求执行访问或者检查并且可以不访问或者不检查由软件提供的复制方向提示543(例如,在状态寄存器542中),并且实际上,甚至不要求或不需要此类复制方向提示543存在。替代地,此类复制方向提示或指示(例如,用于提供提示或指示的标志或状态位)可任选地/潜在地在处理器中存在,例如,如果其将由不能够自发地确定复制方向的不同的指令使用。
再次参考图5,响应于存储器复制指令和/或作为存储器复制指令的结果,执行单元可操作以从源存储器操作数546的顺序的/连续的数据存储位置顺序地加载、读取或以其他方式接收数据的离散部分,并且可操作以将数据的这些部分分开地或顺序地复制、移动、写入或以其他方式存储到在存储器中的不同位置的目的地存储器操作数547的顺序的/连续的数据存储位置。如所提到,这些部分可以从操作数中的每一个的开始按升序顺序进行或从操作数的结尾按降序顺序进行。典型地,可以在不修改的情况下存储回数据,但是对于该指令,对数据的修改是可能的并且是包含的。在不同实施例中,这些部分可具有不同的数据尺寸粒度,诸如例如,字节、字、双字或四字尺寸。这些分开的顺序复制操作可重复多次,直到全部的数据量(例如,如由要复制的数据量537所指示)已被传输。在一个方面中,指令可任选地具有重复前缀,但本发明的范围不限于此。以上结合图1针对特定的
Figure BDA0001815376890000161
64和/或IA-32架构通用寄存器所描述的按升序或降序顺序复制的特定示例表示这可如何执行的一个合适的示例实施例。还设想了使用三个不同的通用寄存器(例如,R1、R2和R3)的类似类型的复制操作,并且其中输入参数以各种不同的方式表达(例如,寄存器R1、R2和R3中的一个或多个以不同于一个或多个其他寄存器的粒度表达)。
执行单元和/或处理器可包括可操作以执行存储器复制指令的具体的或特定的逻辑(例如,晶体管、集成电路或潜在地与固件(例如,存储在非易失性存储器中的指令)和/或软件组合的其他硬件)。如本文中所使用,术语“执行单元”不暗示并且不限于执行所有上述可能操作的单个分立单元。相反,此类操作可潜在地由遍及存储器子系统内的两个或更多个单元或组件(例如,存储器单元、存储器访问单元)而分布的分开的或分布式逻辑执行。作为一个示例,执行单元可包括用于从源加载数据并将其存储到目的地的组合加载/存储执行单元。作为另一示例,执行单元可包括用于从源加载数据的加载单元和用于将该数据存储到目的地的分开的存储单元,以及可能的其他组件/单元。为简单起见,并且为了符合指代实际实行或执行指令的组件的术语执行单元的通用用法,此类逻辑在本文中称为执行单元。本文中还可说明,存储器子系统和/或存储器单元和/或存储器访问单元和/或处理器的存储器访问逻辑和/或处理器的存储器接口单元或逻辑可操作以执行本文中所公开的存储器复制指令。
为了避免使描述模糊,已示出和描述了相对简单的处理器530。然而,处理器可任选地包括其他处理器组件。例如,各种不同的实施例可包括针对图10A/图10B、图11A/图11B、图12中的任一图所示出和所描述的组件的各种不同的组合和配置。处理器的所有组件可耦合在一起以允许它们按预期的操作。
如先前所提到,在一个或多个实施例中,存储器复制指令可指示一个或多个通用寄存器中的一个或多个输入参数或操作数。为了进一步说明某些概念,将讨论在各种
Figure BDA0001815376890000171
64和/或IA-32架构处理器中可用的合适的通用寄存器的示例实施例,但是不一定要求这些特定的寄存器。
图6图示出合适的32位通用寄存器组634的一个特定的示例实施例。该32位寄存器组包括8个32位或双字通用寄存器。这些寄存器被称为EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP。这些32位寄存器在16位和8位模式下也是可寻址的。EAX、EBX、ECX和EDX寄存器的较低的16位分别称为AX、BX、CX和DX。作为示例,具有16位的字无符号整数可以分别存储在寄存器BX、CX和DX中。
图7图示出合适的64位通用寄存器组734的另一特定的示例实施例。该64位寄存器组包括16个64位或四字通用寄存器。这些寄存器被称为RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP、R8、R9、R10、R11、R12、R13、R14和R15。这些寄存器在32位操作数上可在32位模式下操作,并且在64位操作数上可在64位模式下操作。RAX、RBX、RCX、RDX、RSI、RDI、RBP、RSP寄存器的较低的32位分别对应于EAX、EBX、ECX、EDX、ESI、EDI、EBP和ESP寄存器。寄存器R8-R15的较低的32位也可在32位模式下寻址,并且由R8D-R15D引用。尽管以上已经在详细示例中描述了某些寄存器-到-参数的映射,但是可任选替代地使用不同的寄存器-到-参数的映射。此外,前述
Figure BDA0001815376890000172
64和/或IA-32架构处理器中的每一个可更一般地由另一寄存器代替,该另一寄存器一般表示为R1、R2和R3,它们可各自表示一组通用寄存器中的任何寄存器。
图8是利用降序复制方向对重叠的源和目的地存储器操作数处理或执行存储器复制指令的实施例的方法850的实施例的流程框图,其允许中断该存储器复制指令。在一些实施例中,方法850可作为可任选地被添加到图1的方法100的中断相关操作的部分或中断相关操作的附加集合来执行。先前所描述的方法100的特定的任选特性和细节和在方法100期间所执行的存储器复制指令的那些特定的任选特性和细节也任选地应用到图8的方法850。为了避免使该描述模糊,将主要描述图8的方法850的不同的和/或附加特性以及在该方法期间所执行的存储器复制指令,而不重复可任选地是相同或相似的特性和细节。在其他实施例中,图8的方法850可任选地作为与图1的方法100的方法类似或不同的方法的部分来执行,但其可使用具有先前所描述的特定任选的特性和细节中的任何特性和细节的存储器复制指令。
方法850包括,在框851处接收存储器复制指令。在一些实施例中,存储器复制指令可显式地指定或以其他方式指示存储器中的源存储器操作数的开始、存储器中的目的地存储器操作数的开始以及将要从源存储器操作数复制到目的地存储器操作数的数据量中的每一个。对于该方法,假定源存储器操作数与目的地存储器操作数重叠。先前针对图1所描述的相同的选项和变型可任选地用于这些输入参数和它们可由指令指示所按照的方式。
在框852处,数据的部分(例如,字节、字、双字或四字)可从源存储器操作数的当前结尾复制到目的地存储器操作数的当前结尾。在该实施例中,由于源存储器操作数与目的地存储器操作数重叠,使用降序复制方向,其中,从操作数的结尾开始顺序地复制数据元素并且以朝向操作数的开始点的方向(例如,以减小存储器地址的方向)进行。
在框853处,可将要复制的数据量的运行指示递减、减少或以其他方式降低实际复制的数据量。作为示例,如果一次复制一个单个8位的字节,并且要复制的数据量以字节数量来表达,则要复制的数据量可递减1,而如果一次复制一个16位的字(即,每一个字具有两个字节),则要复制的数据量可递减2,以此类推。或者,如果要复制的数据量以位来表达,则针对所复制的每一个8位的字节,要复制的数据量可减少8,以此类推。注意,运行指示不是最初由指令所指示的实际的数据量(例如,如存储在架构上可见的存储位置中),而是可表示处理器内的随着附加数据被复制而更新的临时或运行变量。例如,处理器可具有临时寄存器或其他存储,在该临时寄存器或其他存储中初始地存储如由原始指令指示的数据量(例如,将值从通用寄存器复制到该临时寄存器或存储位置中),以及用于随着附加数据被复制而减少该临时寄存器或存储位置中的值的减法、递减或其他逻辑。
在一些实施例中,可能期望能够在整个复制操作完成之前在中间点或中间进度水平处中断或暂停存储器复制指令(例如,用以处置需要注意的事件),并且然后从中间点或中间进度水平处开始恢复执行该存储器复制指令(例如,在已处置该事件之后),而不是从头开始。例如,这可倾向于是当要复制相对较大的数据量时(例如,如在长的或非常长的字符串指令的情况下)和/或其中执行相对较长的持续时间的复制操作的情况,由于它们可倾向于相对更可能被中断。另外,在短存储器复制操作的情况下也可能发生中断。例如,这可能是当源和/或目的地存储器操作数位于页边界上并且后续页面被指示为不存在时(例如,可将页面错误递送到操作系统)的情况。允许此类从中间点或中间进度水平重新开始而不是从头开始可有助于使用已经完成的工作和/或有助于取得进一步的进展。相反,如果操作总是从头开始,则可能无法保证操作将在任何合理的时间内完成。
再次参考图8,在框854处,可作出是否中断存储器复制指令和/或它的操作的执行的判定。在一些实施例中,如果错误(例如,页面错误)、中断、异常或需要注意的某些其他此种类型的事件发生,则可判定中断存储器复制指令和/或它的操作的执行。否则,可判定不中断该指令和/或操作。
如果判定不中断存储器复制指令和/或操作(例如,框854处的判定为“否”),则方法可前进至框855。在框855处,可作出是否存在要复制的附加数据的判定。如果存在要复制的附加数据(例如,框855处的判定为“是”),则方法可重新访问框852,在框852处可复制更多数据。否则,如果不存在要复制的附加数据(例如,框855处的判定为“否”),则该方法可在框856处结束(例如,可引退或以其他方式提交存储器复制指令)。
替代地,如果判定中断存储器复制指令和/或操作(例如,框854处的判定为“是”),则方法可前进至框857。当指令和/或操作将要中断或暂停时,可能重要的是保留或存储关于已经执行的当前的复制量的信息(例如,用于指示已经进行的当前进度水平)。当随后从中间点重新开始而不是从头开始(即,不使用已经完成的任何工作)指令和/或操作时,可以使用此类信息。在一些实施例中,取决于正在使用升序复制方向还是降序复制方向,所存储或保留的信息的类型可以是不同的。
如框857处所示,在一些实施例中,在以降序复制方向执行复制的情况下,可保留或存储仍然要复制的当前的/经更新的数据量(例如,如最近在框853处更新/减少)。在一些实施例中,可将仍然要复制的当前的/经更新的数据量存储在架构上可见的存储位置(例如,通用寄存器)中。例如,可将仍然要复制的当前的/经更新的数据量存储到用于存储如最初由存储器复制指令所指示的要复制的原始/初始数据量的同一寄存器。为了进一步说明,再次参考可能的
Figure BDA0001815376890000201
64和/或IA-32架构实现方式的特定示例,其中32位模式下的ECX寄存器(或64位模式下的RCX寄存器)用于存储要复制的数据量,这可包括将表示还未被复制的数据量的不同的减少的/经更新的值写入到32位模式下的ECX寄存器(或64位模式下的RCX寄存器)。当存在此类中断时,响应于存储器复制指令,这可由处理器或集成电路执行。
如框857处进一步所示,在一些实施例中,在以降序复制方向执行复制的情况下,可以不存储不同于由最初所接收的存储器复制指令所指示的源操作数和目的地操作数中的每一个的开始的那些开始的指示。换言之,在降序复制方向的情况下,可以不改变源操作数和目的地操作数的开始点。在一个方面中,如果需要,源操作数和目的地操作数的相同开始点可以任选地通过它们的相同的原始值而恢复到寄存器。在另一方面中,如果需要,源和目的地操作数的开始点的原始值可能不会被触及,并且可能在其最初的存储位置中保持不变。
方法还包括存储或保留指向存储器复制指令的指令指针值。在一些实施例中,当中断存储器复制指令的操作(例如,由于异常或外部中断)时,如果剩余的要复制的数据量还不是零,则不更新指令指针可以是处理器的职责。然后,可将控制传递到处理程序(例如,页面错误处理程序、异常处理程序、中断处理程序)、操作系统、监督系统软件,等等。
在已处置需要注意的事件之后,可将控制返回到存储器复制指令。例如,可执行返回指令,以将控制流返回到存储器复制指令的所存储的或所保留的指令指针值。然后,可重新开始该存储器复制指令,并且所存储或所保留的仍要复制的当前的/经更新的数据量(例如,如在框857处所存储)可被检取并用于在中间点或中间进度水平处恢复复制操作。然后,可复制剩余的要复制的数据量,并且指令可完成。
为了进一步说明,再次参考可能的
Figure BDA0001815376890000202
64和/或IA-32架构实现方式的特定示例,将描述在中断之后更新ECX寄存器的特定的详细示例。初始地,指令可指示下列开始参数或输入:
ESI=100//源存储器操作数开始于100
EDI=164//目的地存储器操作数开始于164
ECX=256//256个字节是要复制的数据量
这些值指示源存储器操作数字节[355:100]将被复制到目的地存储器操作数字节[419:164]。注意,该源存储器操作数与目的地存储器操作数重叠,所以初始地可执行降序复制操作。假设在整个降序复制操作完成之前,发生错误、异常、中断或其他中断事件。例如,假定这在仅已经将256个字节中的192个字节从源存储器操作数的字节[355:164]复制到目的地存储器操作数的字节[419:228]之后发生。注意,由于正在执行降序复制操作,因此从操作数的结尾或尾部到开始或头部执行复制。
在一些实施例中,响应于该指令,并且由于这是降序复制操作,处理器可仅减少或改变ECX寄存器中的要复制的数据量,而可以不改变源存储器操作数和目的地存储器操作数的开始点(例如,可以不改变ESI和EDI寄存器中的原始值)。作为示例,如果要复制的数据量由存储在隐含的通用寄存器ECX中的要复制的字节数量来表示,则可将寄存器ECX中的值递减在中断时已经复制的字节数量。对于该示例,最初在该存储器中的要复制的字节的开始数量256可减少已经复制的192个字节,使得经更新的值64(即,64=256-192)可被存储在寄存器ECX中,以指示当恢复指令时64个字节有待被复制。
当恢复存储器复制指令时,所恢复的存储器复制指令的输入参数可如下:
ESI=100//源存储器操作数开始于100
EDI=164//目的地存储器操作数开始于164
ECX=64//64个字节是要复制的剩余数据量
这些输入参数可指示剩余的要复制的字节的范围。具体地,它们可指示源存储器操作数字节[163:100]将被复制到目的地存储器操作数字节[227:164]。注意,现在在源存储器操作数与目的地存储器操作数之间不存在重叠。相应地,如果需要,在一些实施例中,可执行升序复制操作,而没有先前所描述的在重叠区域中的源操作数数据中的一些被传输到目的地操作数之前覆写这些数据的风险。例如,如果执行图1的方法100,则框102可确定对于这些经修改的操作数不再存在重叠,并且可选择在框103处开始执行升序复制。一旦已经复制这些64个剩余的字节,则在中断之前复制的字节(例如,192个字节)与在中断之后复制的字节(例如,64个字节)结合,可共同表示由原始存储器复制指令初始地指示要复制的所有字节(例如,256)。在存储器复制指令完成时,在ESI和EDI寄存器中存储什么最终值并不是特别重要。在一些情况下,如以上所讨论,可以不修改这些寄存器中的值,除非对于操作的部分使用了升序复制方向。主要地,在存储器复制指令完成时,ECX中的要复制的数据量应当是零。可以不完全更新ESI和EDI寄存器或者ESI和EDI寄存器可以不关心存储器复制指令完成时的值是可能的。
已经以相对基本的形式示出和描述了方法850,但可任选地向该方法添加操作和/或从该方法移除操作。例如,可任选地添加用于判定操作数是否重叠的操作(例如,类似于框102)。另外,其他实施例示出了操作的子集(例如,仅框854和框857等)。另外,尽管流程图示出根据实施例的操作的特定顺序,但该顺序是示例性的。替代实施例可按不同的顺序执行这些操作、组合某些操作、使某些操作重叠,等等。
还构想了类似于图8的方法的方法,但是该方法针对非重叠的操作数并且针对升序复制方向。在此类方法中,代替从操作数的结尾复制数据的部分,从操作数的头部或开始点开始复制数据,并且以朝向结尾的升序顺序进行。另外,在复制进行的同时,可保持源操作数和目的地操作数的开始点的临时或运行的经更新的值。在一些实施例中,响应于针对此类升序复制方向的中断,可存储或以其他方式保存源操作数的经更新的/当前的开始、目的地操作数的经更新的/当前的开始以及经更新的/当前的要复制的数据量中的所有的三者。例如,可更新或改变所有的三个寄存器ESI、EDI和ECX,以反映在中断发生时的当前的进度水平。
为了进一步说明,重新考虑以上特定的详细示例,在重新开始以升序复制方向复制来复制剩余的64个字节所在的点处。假定执行了升序复制来复制附加的5个字节,并且随后发生第二中断。在一些实施例中,响应于针对此类升序复制方向的第二中断,可更新或改变所有的三个寄存器ESI、EDI和ECX,以反映在第二中断发生时的当前的进度水平,如下:
ESI=105//源存储器操作数开始于105
EDI=169//目的地存储器操作数开始于169
ECX=59//59个字节是要复制的剩余数据量
这些值指示源存储器操作数字节[164:105]将被复制到目的地存储器操作数字节[228:169]。当恢复时,源存储器操作数与目的地存储器操作数不再重叠,所以可执行升序复制操作来完成复制操作,以将剩余的59个字节从源存储器操作数字节[164:105]复制到目的地存储器操作数字节[228:169]。
两个常用的标准存储器复制函数为memcpy()和memmove()。例如,这些存储器复制函数在glibc、Visual Studio 6.0等中是可用的。memcpy函数将存储器中的源缓冲区的计数数量的字节复制到存储器中的目的地缓冲区。如果源缓冲区与目的地缓冲区重叠,则该函数不确保在覆写重叠区域中的原始源字节之前复制这些原始源字节。相反,无论区域是否重叠,memmove函数能够执行正确的复制操作而没有源数据的丢失。memmove函数将存储器中的源缓冲区的计数数量的字节复制到存储器中的目的地缓冲区。如果源缓冲区与目的地缓冲区的部分重叠,则memmove函数确保在覆写重叠部分中的原始源字节之前复制或保留这些原始源字节,所以它们不丢失。例如,memmove函数可复制,如同重叠部分中的源字节首先从源缓冲区复制到不与目的地重叠的临时阵列,并且然后将字节从该临时阵列复制到目的地缓冲区。
按照惯例,当编译具有存储器复制操作(例如,memmove、memcpy等)的软件时,对标准函数的引用可由对库的标准调用机制或者通过内联代码自身之内的函数来处置,该标准函数例如,如GNU C库glibc中的那些函数。然而,当随着引入新的处理器和/或新的处理器世代而对用于实现memmove和memcpy函数的机器级指令的架构的和/或微架构的实现方式作出改变时,更新、调谐或以其他方式改变使用memmove和memcpy函数的软件可倾向于是昂贵的和/或耗时的。此外,在编译时针对一个架构的和/或微架构的实现方式已经优化的软件实现方式可能不能在具有不同的架构和/或微架构的其他处理器上最佳地工作。
在一些实施例中,如本文中所公开的存储器复制指令可用于代替软件中的memmove函数和/或memcpy函数。在一些实施例中,该存储器复制指令可代替memmove函数。一些实施例的方法包括将memmove和/或memcpy函数编译或以其他方式变换或转换为本文中所公开的存储器复制指令的对应的单独的实例。任选地/潜在地,每个memmove和/或memcpy函数(或它们中的至少一些)可在编译、变换等等期间替代地由单个存储器复制指令一对一地代替,而不是内联该memmove和/或memcpy函数。
图9是编译器或其他变换器模块963的实施例的框图。可将较高级代码960输入到变换器模块,该较高级代码960诸如例如,源代码。较高级代码可包括memmove函数961,并且任选地包括memcpy函数962。该变换器模块可操作以将较高级代码编译或以其他方式变换为较低级代码966,该较低级代码诸如例如,机器代码、汇编代码等等。在一些实施例中,变换器模块可包括用于利用较低级代码的一个或多个对应的存储器复制指令931A来替代较高级代码的memmove函数961中的一个或多个的逻辑964。在一些实施例中,变换器模块可任选地包括用于利用较低级代码的一个或多个对应的存储器复制指令931B来替代较高级代码的memcpy函数962中的一个或多个的逻辑965,但这不是必须的。替代地,其他指令可任选地用于memcpy函数,诸如例如,
Figure BDA0001815376890000241
64和IA-32架构中的REP MOVSB指令。然而,在源存储器操作数与目的地存储器操作数重叠的情况下,或者甚至在编译器或其他变换器将不知道或不确切地知道源存储器操作数与目的地存储器操作数是否重叠的情况下,该REPMOVSB指令当前不能用于替代memmove函数。包括逻辑964和逻辑965的变换器模块可各自以硬件、固件、软件或其各种组合来实现。
有利地,如本文中所公开的利用存储器复制指令来替代此类memmove和/或memcpy函数可有助于减少当存在对处理器的、对用于执行memmove和/或memcpy函数的指令的实现方式的架构的和/或微架构的改变时、甚至当引入新的处理器和新的处理器世代时需要对软件作出的改变的数量。例如,如果将处理器扩展为使用更宽的寄存器,则处理器的指令集中的存储器复制指令以及它们的实现方式可原生地考虑这一点,而不需要改变memmove和/或memcpy函数。
在其他实施例中,在memmove指令和/或memcpy指令与本文中所公开的存储器复制指令之间转换的类似的互换方法可任选地替代地以其他类型的变换器模块实现,该其他类型的变换器模块诸如例如,解释器、反编译器、汇编器和反汇编器,此处仅是列举数例。
示例性核架构、处理器和计算机架构
处理器核能以不同方式、出于不同的目的、在不同的处理器中实现。例如,此类核的实现可以包括:1)旨在用于通用计算的通用有序核;2)旨在用于通用计算的高性能通用乱序核;3)旨在主要用于图形和/或科学(吞吐量)计算的专用核。不同处理器的实现可包括:1)CPU,其包括旨在用于通用计算的一个或多个通用有序核和/或旨在用于通用计算的一个或多个通用乱序核;以及2)协处理器,其包括旨在主要用于图形和/或科学(吞吐量)的一个或多个专用核。此类不同的处理器导致不同的计算机系统架构,这些计算机系统架构可包括:1)在与CPU分开的芯片上的协处理器;2)在与CPU相同的封装中但在分开的管芯上的协处理器;3)与CPU在相同管芯上的协处理器(在该情况下,此类协处理器有时被称为专用逻辑或被称为专用核,该专用逻辑诸如,集成图形和/或科学(吞吐量)逻辑);以及4)芯片上系统,其可以将所描述的CPU(有时被称为(多个)应用核或(多个)应用处理器)、以上描述的协处理器和附加功能包括在同一管芯上。接着描述示例性核架构,随后描述示例性处理器和计算机架构。
示例性核架构
有序和乱序核框图
图10A是图示根据本发明的各实施例的示例性有序流水线和示例性的寄存器重命名的乱序发布/执行流水线的框图。图10B是示出根据本发明的各实施例的要包括在处理器中的有序架构核的示例性实施例和示例性的寄存器重命名的乱序发布/执行架构核的框图。图10A-图10B中的实线框图示有序流水线和有序核,而虚线框的任选增加图示寄存器重命名的、乱序发布/执行流水线和核。考虑到有序方面是乱序方面的子集,将描述乱序方面。
在图10A中,处理器流水线1000包括取出级1002、长度解码级1004、解码级1006、分配级1008、重命名级1010、调度(也被称为分派或发布)级1012、寄存器读取/存储器读取级1014、执行级1016、写回/存储器写入级1018、异常处置级1022和提交级1024。
图10B示出处理器核1090,该处理器核1090包括前端单元1030,该前端单元1030耦合到执行引擎单元1050,并且前端单元1030和执行引擎单元1050两者都耦合到存储器单元1070。核1090可以是精简指令集计算(RISC)核、复杂指令集计算(CISC)核、超长指令字(VLIW)核、或混合或替代的核类型。作为又一选项,核1090可以是专用核,诸如例如,网络或通信核、压缩引擎、协处理器核、通用计算图形处理单元(GPGPU)核、图形核,等等。
前端单元1030包括分支预测单元1032,该分支预测单元1032耦合到指令高速缓存单元1034,该指令高速缓存单元1034耦合到指令转换后备缓冲器(TLB)1036,该指令转换后备缓冲器1036耦合到指令取出单元1038,该指令取出单元1038耦合到解码单元1040。解码单元1040(或解码器)可对指令解码,并且生成从原始指令解码出的、或以其他方式反映原始指令的、或从原始指令导出的一个或多个微操作、微代码进入点、微指令、其他指令、或其他控制信号作为输出。解码单元1040可使用各种不同的机制来实现。合适机制的示例包括但不限于,查找表、硬件实现、可编程逻辑阵列(PLA)、微代码只读存储器(ROM)等。在一个实施例中,核1090包括存储用于某些宏指令的微代码的微代码ROM或其他介质(例如,在解码单元1040中,或以其他方式在前端单元1030内)。解码单元1040耦合到执行引擎单元1050中的重命名/分配器单元1052。
执行引擎单元1050包括重命名/分配器单元1052,该重命名/分配器单元1052耦合到引退单元1054和一个或多个调度器单元的集合1056。(多个)调度器单元1056表示任何数量的不同调度器,包括预留站、中央指令窗等。(多个)调度器单元1056耦合到(多个)物理寄存器堆单元1058。物理寄存器堆单元1058中的每一个物理寄存器堆单元表示一个或多个物理寄存器堆,其中不同的物理寄存器堆存储一种或多种不同的数据类型,诸如,标量整数、标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点,状态(例如,作为要执行的下一条指令的地址的指令指针)等等。在一个实施例中,物理寄存器堆单元1058包括向量寄存器单元、写掩码寄存器单元和标量寄存器单元。这些寄存器单元可以提供架构向量寄存器、向量掩码寄存器和通用寄存器。(多个)物理寄存器堆单元1058由引退单元1054重叠,以图示可实现寄存器重命名和乱序执行的各种方式(例如,使用(多个)重排序缓冲器和(多个)引退寄存器堆;使用(多个)未来文件、(多个)历史缓冲器、(多个)引退寄存器堆;使用寄存器映射和寄存器池,等等)。引退单元1054和(多个)物理寄存器堆单元1058耦合到(多个)执行集群1060。(多个)执行集群1060包括一个或多个执行单元的集合1062以及一个或多个存储器访问单元的集合1064。执行单元1062可执行各种操作(例如,移位、加法、减法、乘法)并可对各种数据类型(例如,标量浮点、紧缩整数、紧缩浮点、向量整数、向量浮点)执行。尽管一些实施例可以包括专用于特定功能或功能集合的多个执行单元,但是其他实施例可包括仅一个执行单元或全都执行所有功能的多个执行单元。(多个)调度器单元1056、(多个)物理寄存器堆单元1058和(多个)执行集群1060示出为可能有多个,因为某些实施例为某些类型的数据/操作创建分开的流水线(例如,标量整数流水线、标量浮点/紧缩整数/紧缩浮点/向量整数/向量浮点流水线,和/或各自具有其自身的调度器单元、(多个)物理寄存器堆单元和/或执行集群的存储器访问流水线——并且在分开的存储器访问流水线的情况下,实现其中仅该流水线的执行集群具有(多个)存储器访问单元1064的某些实施例)。还应当理解,在使用分开的流水线的情况下,这些流水线中的一个或多个可以是乱序发布/执行,并且其余流水线可以是有序的。
存储器访问单元的集合1064耦合到存储器单元1070,该存储器单元1070包括数据TLB单元1072,该数据TLB单元1072耦合到数据高速缓存单元1074,该数据高速缓存单元1074耦合到第二级(L2)高速缓存单元1076。在一个示例性实施例中,存储器访问单元1064可包括加载单元、存储地址单元和存储数据单元,其中的每一个均耦合到存储器单元1070中的数据TLB单元1072。指令高速缓存单元1034还耦合到存储器单元1070中的第二级(L2)高速缓存单元1076。L2高速缓存单元1076耦合到一个或多个其他级别的高速缓存,并最终耦合到主存储器。
作为示例,示例性寄存器重命名的乱序发布/执行核架构可如下所述地实现流水线1000:1)指令取出1038执行取出级1002和长度解码级1004;2)解码单元1040执行解码级1006;3)重命名/分配器单元1052执行分配级1008和重命名级1010;4)(多个)调度器单元1056执行调度级1012;5)(多个)物理寄存器堆单元1058和存储器单元1070执行寄存器读取/存储器读取级1014;执行集群1060执行执行级1016;6)存储器单元1070和(多个)物理寄存器堆单元1058执行写回/存储器写入级1018;7)各单元可牵涉到异常处置级1022;以及8)引退单元1054和(多个)物理寄存器堆单元1058执行提交级1024。
核1090可支持一个或多个指令集(例如,x86指令集(具有已与较新版本一起添加的一些扩展);加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集;加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集(具有诸如NEON的任选的附加扩展)),其中包括本文中描述的(多条)指令。在一个实施例中,核1090包括用于支持紧缩数据指令集扩展(例如,AVX1、AVX2)的逻辑,由此允许使用紧缩数据来执行由许多多媒体应用使用的操作。
应当理解,核可支持多线程化(执行两个或更多个并行的操作或线程的集合),并且可以按各种方式来完成该多线程化,各种方式包括时分多线程化、同时多线程化(其中单个物理核为物理核正在同时多线程化的线程中的每一个线程提供逻辑核)、或其组合(例如,时分取出和解码以及此后的诸如
Figure BDA0001815376890000281
Figure BDA0001815376890000282
超线程化技术中的同时多线程化)。
尽管在乱序执行的上下文中描述了寄存器重命名,但应当理解,可以在有序架构中使用寄存器重命名。尽管所图示的处理器的实施例还包括分开的指令和数据高速缓存单元1034/1074以及共享的L2高速缓存单元1076,但是替代实施例可以具有用于指令和数据两者的单个内部高速缓存,诸如例如,第一级(L1)内部高速缓存或多个级别的内部高速缓存。在一些实施例中,该系统可包括内部高速缓存和在核和/或处理器外部的外部高速缓存的组合。或者,所有高速缓存都可以在核和/或处理器的外部。
具体的示例性有序核架构
图11A-图11B图示更具体的示例性有序核架构的框图,该核将是芯片中的若干逻辑块(包括相同类型和/或不同类型的其他核)中的一个逻辑块。取决于应用,逻辑块通过高带宽互连网络(例如,环形网络)与一些固定的功能逻辑、存储器I/O接口和其他必要的I/O逻辑进行通信。
图11A是根据本发明的实施例的单个处理器核以及它至管芯上互连网络1102的连接及其第二级(L2)高速缓存的本地子集1104的框图。在一个实施例中,指令解码器1100支持具有紧缩数据指令集扩展的x86指令集。L1高速缓存1106允许对进入标量和向量单元中的、对高速缓存存储器的低等待时间访问。尽管在一个实施例中(为了简化设计),标量单元1108和向量单元1110使用分开的寄存器集合(分别为标量寄存器1112和向量寄存器1114),并且在这些寄存器之间传输的数据被写入到存储器,并随后从第一级(L1)高速缓存1106读回,但是本发明的替代实施例可以使用不同的方法(例如,使用单个寄存器集合或包括允许数据在这两个寄存器堆之间传输而无需被写入和读回的通信路径)。
L2高速缓存的本地子集1104是全局L2高速缓存的一部分,该全局L2高速缓存被划分成多个分开的本地子集,每个处理器核一个本地子集。每个处理器核具有到其自身的L2高速缓存的本地子集1104的直接访问路径。由处理器核读取的数据被存储在其L2高速缓存子集1104中,并且可以与其他处理器核访问其自身的本地L2高速缓存子集并行地被快速访问。由处理器核写入的数据被存储在其自身的L2高速缓存子集1104中,并在必要的情况下从其他子集转储清除。环形网络确保共享数据的一致性。环形网络是双向的,以允许诸如处理器核、L2高速缓存和其他逻辑块之类的代理在芯片内彼此通信。每个环形数据路径为每个方向1012位宽。
图11B是根据本发明的实施例的图11A中的处理器核的一部分的展开图。图11B包括L1高速缓存1104的L1数据高速缓存1106A部分,以及关于向量单元1110和向量寄存器1114的更多细节。具体地,向量单元1110是16宽向量处理单元(VPU)(见16宽ALU 1128),该单元执行整数、单精度浮点以及双精度浮点指令中的一个或多个。该VPU通过混合单元1120支持对寄存器输入的混合,通过数值转换单元1122A-B支持数值转换,并且通过复制单元1124支持对存储器输入的复制。写掩码寄存器1126允许预测所得的向量写入。
具有集成存储器控制器和图形器件的处理器
图12是根据本发明的实施例的可具有多于一个的核、可具有集成存储器控制器、以及可具有集成图形器件的处理器1200的框图。图12中的实线框图示具有单个核1202A、系统代理1210、一个或多个总线控制器单元的集合1216的处理器1200,而虚线框的任选增加图示具有多个核1202A-N、系统代理单元1210中的一个或多个集成存储器控制器单元的集合1214以及专用逻辑1208的替代处理器1200。
因此,处理器1200的不同实现可包括:1)CPU,其中专用逻辑1208是集成图形和/或科学(吞吐量)逻辑(其可包括一个或多个核),并且核1202A-N是一个或多个通用核(例如,通用有序核、通用乱序核、这两者的组合);2)协处理器,其中核1202A-N是旨在主要用于图形和/或科学(吞吐量)的大量专用核;以及3)协处理器,其中核1202A-N是大量通用有序核。因此,处理器1200可以是通用处理器、协处理器或专用处理器,诸如例如,网络或通信处理器、压缩引擎、图形处理器、GPGPU(通用图形处理单元)、高吞吐量的集成众核(MIC)协处理器(包括30个或更多核)、嵌入式处理器,等等。该处理器可以被实现在一个或多个芯片上。处理器1200可以是一个或多个基板的一部分,和/或可使用多种工艺技术(诸如例如,BiCMOS、CMOS、或NMOS)中的任何技术被实现在一个或多个基板上。
存储器层次结构包括核内的一个或多个高速缓存级别、一个或多个共享高速缓存单元的集合1206、以及耦合到集成存储器控制器单元的集合1214的外部存储器(未示出)。共享高速缓存单元的集合1206可包括一个或多个中间级别的高速缓存,诸如,第二级(L2)、第三级(L3)、第四级(L4)或其他级别的高速缓存、末级高速缓存(LLC)和/或以上各项的组合。虽然在一个实施例中,基于环的互连单元1212将集成图形逻辑1208、共享高速缓存单元的集合1206以及系统代理单元1210/(多个)集成存储器控制器单元1214互连,但是替代实施例可使用任何数量的公知技术来互连此类单元。在一个实施例中,在一个或多个高速缓存单元1206与核1202A-N之间维持一致性。
在一些实施例中,一个或多个核1202A-N能够实现多线程化。系统代理1210包括协调和操作核1202A-N的那些部件。系统代理单元1210可包括例如功率控制单元(PCU)和显示单元。PCU可以是对核1202A-N以及集成图形逻辑1208的功率状态进行调节所需的逻辑和部件,或可包括这些逻辑和部件。显示单元用于驱动一个或多个外部连接的显示器。
核1202A-N在架构指令集方面可以是同构的或异构的;即,核1202A-N中的两个或更多个核可能能够执行相同的指令集,而其他核可能能够执行该指令集的仅仅子集或不同的指令集。
示例性计算机架构
图13-21是示例性计算机架构的框图。本领域中已知的对膝上型设备、台式机、手持PC、个人数字助理、工程工作站、服务器、网络设备、网络集线器、交换机、嵌入式处理器、数字信号处理器(DSP)、图形设备、视频游戏设备、机顶盒、微控制器、蜂窝电话、便携式媒体播放器、手持设备以及各种其他电子设备的其他系统设计和配置也是合适的。一般地,能够包含如本文中所公开的处理器和/或其他执行逻辑的各种各样的系统或电子设备一般都是合适的。
现在参考图13,所示出的是根据本发明一个实施例的系统1300的框图。系统1300可以包括一个或多个处理器1310、1315,这些处理器耦合到控制器中枢1320。在一个实施例中,控制器中枢1320包括图形存储器控制器中枢(GMCH)1390和输入/输出中枢(IOH)1350(其可以在分开的芯片上);GMCH 1390包括存储器和图形控制器,存储器1340和协处理器1345耦合到该存储器和图形控制器;IOH 1350将输入/输出(I/O)设备1360耦合到GMCH1390。或者,存储器和图形控制器中的一个或这两者被集成在(如本文中所描述的)处理器内,存储器1340和协处理器1345直接耦合到处理器1310,并且控制器中枢1320与IOH 1350处于单个芯片中。
附加的处理器1315的任选性在图13中通过虚线来表示。每一处理器1310、1315可包括本文中描述的处理核中的一个或多个,并且可以是处理器1200的某一版本。
存储器1340可以是例如动态随机存取存储器(DRAM)、相变存储器(PCM)或这两者的组合。对于至少一个实施例,控制器中枢1320经由诸如前端总线(FSB)之类的多分支总线、诸如快速路径互连(QPI)之类的点对点接口、或者类似的连接1395来与(多个)处理器1310、1315进行通信。
在一个实施例中,协处理器1345是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。在一个实施例中,控制器中枢1320可以包括集成图形加速器。
在物理资源1310、1315之间可以存在包括架构、微架构、热、功耗特性等一系列品质度量方面的各种差异。
在一个实施例中,处理器1310执行控制一般类型的数据处理操作的指令。嵌入在这些指令内的可以是协处理器指令。处理器1310将这些协处理器指令识别为具有应当由附连的协处理器1345执行的类型。因此,处理器1310在协处理器总线或者其他互连上将这些协处理器指令(或者表示协处理器指令的控制信号)发布到协处理器1345。(多个)协处理器1345接受并执行所接收的协处理器指令。
现在参见图14,所示出的是根据本发明的实施例的第一更具体的示例性系统1400的框图。如图14中所示,多处理器系统1400是点对点互连系统,并且包括经由点对点互连1450耦合的第一处理器1470和第二处理器1480。处理器1470和1480中的每一个都可以是处理器1200的某一版本。在本发明的一个实施例中,处理器1470和1480分别是处理器1310和1315,而协处理器1438是协处理器1345。在另一实施例中,处理器1470和1480分别是处理器1310和协处理器1345。
处理器1470和1480示出为分别包括集成存储器控制器(IMC)单元1472和1482。处理器1470还包括作为其总线控制器单元的一部分的点对点(P-P)接口1476和1478;类似地,第二处理器1480包括P-P接口1486和1488。处理器1470、1480可以经由使用点对点(P-P)接口电路1478、1488的P-P接口1450来交换信息。如图14中所示,IMC 1472和1482将处理器耦合到相应的存储器,即存储器1432和存储器1434,这些存储器可以是本地附连到相应处理器的主存储器的部分。
处理器1470、1480可各自经由使用点对点接口电路1476、1494、1486、1498的各个P-P接口1452、1454来与芯片组1490交换信息。芯片组1490可以任选地经由高性能接口1439来与协处理器1438交换信息。在一个实施例中,协处理器1438是专用处理器,诸如例如,高吞吐量MIC处理器、网络或通信处理器、压缩引擎、图形处理器、GPGPU、嵌入式处理器,等等。
共享高速缓存(未示出)可被包括在任一处理器中,或在这两个处理器的外部但经由P-P互连与这些处理器连接,使得如果处理器被置于低功率模式,则任一个或这两个处理器的本地高速缓存信息可被存储在共享高速缓存中。
芯片组1490可以经由接口1496耦合到第一总线1416。在一个实施例中,第一总线1416可以是外围部件互连(PCI)总线或诸如PCI快速总线或另一第三代I/O互连总线之类的总线,但是本发明的范围不限于此。
如图14中所示,各种I/O设备1414可连同总线桥1418一起耦合到第一总线1416,该总线桥1418将第一总线1416耦合到第二总线1420。在一个实施例中,诸如协处理器、高吞吐量MIC处理器、GPGPU、加速器(诸如例如,图形加速器或数字信号处理(DSP)单元)、现场可编程门阵列或任何其他处理器的一个或多个附加处理器1415耦合到第一总线1416。在一个实施例中,第二总线1420可以是低引脚数(LPC)总线。在一个实施例中,各种设备可耦合到第二总线1420,这些设备包括例如键盘和/或鼠标1422、通信设备1427以及存储单元1428,该存储单元1428诸如可包括指令/代码和数据1430的盘驱动器或者其他大容量存储设备。此外,音频I/O 1424可以被耦合到第二总线1420。注意,其他架构是可能的。例如,代替图14的点对点架构,系统可以实现多分支总线或其他此类架构。
现在参考图15,示出的是根据本发明的实施例的第二更具体的示例性系统1500的框图。图14和15中的类似元件使用类似的附图标记,并且从图15中省略了图14的某些方面以避免混淆图15的其他方面。
图15图示处理器1470、1480可分别包括集成存储器和I/O控制逻辑(“CL”)1472和1482。因此,CL 1472、1482包括集成存储器控制器单元,并包括I/O控制逻辑。图15图示不仅存储器1432、1434耦合到CL 1472、1482,而且I/O设备1514也耦合到控制逻辑1472、1482。传统I/O设备1515被耦合到芯片组1490。
现在参考图16,示出的是根据本发明的实施例的SoC 1600的框图。图12中的类似要素使用类似的附图标记。另外,虚线框是更先进的SoC上的任选的特征。在图16中,(多个)互连单元1602被耦合到:应用处理器1610,其包括一个或多个核的集合152A-N的集合以及(多个)共享高速缓存单元1206;系统代理单元1210;(多个)总线控制器单元1216;(多个)集成存储器控制器单元1214;一个或多个协处理器的集合1620,其可包括集成图形逻辑、图像处理器、音频处理器和视频处理器;静态随机存取存储器(SRAM)单元1630;直接存储器访问(DMA)单元1632;以及用于耦合到一个或多个外部显示器的显示单元1640。在一个实施例中,(多个)协处理器1620包括专用处理器,诸如例如,网络或通信处理器、压缩引擎、GPGPU、高吞吐量MIC处理器、或嵌入式处理器,等等。
本文公开的机制的各实施例可以被实现在硬件、软件、固件或此类实现方式的组合中。本发明的实施例可实现为在可编程系统上执行的计算机程序或程序代码,该可编程系统包括至少一个处理器、存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入设备以及至少一个输出设备。
可将程序代码(诸如,图14中图示的代码1430)应用于输入指令,以执行本文中描述的功能并生成输出信息。可以按已知方式将输出信息应用于一个或多个输出设备。为了本申请的目的,处理系统包括具有处理器的任何系统,该处理器诸如例如,数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序代码可以用高级的面向过程的编程语言或面向对象的编程语言来实现,以便与处理系统通信。如果需要,也可用汇编语言或机器语言来实现程序代码。事实上,本文中描述的机制不限于任何特定的编程语言的范围。在任何情况下,该语言可以是编译语言或解释语言。
至少一个实施例的一个或多个方面可以由存储在机器可读介质上的表示性指令来实现,该指令表示处理器中的各种逻辑,该指令在被机器读取时使得该机器制造用于执行本文中所述的技术的逻辑。被称为“IP核”的此类表示可以被存储在有形的机器可读介质上,并可被供应给各个客户或生产设施以加载到实际制造该逻辑或处理器的制造机器中。
此类机器可读存储介质可以包括但不限于通过机器或设备制造或形成的制品的非暂态、有形布置,其包括存储介质,诸如硬盘;任何其他类型的盘,包括软盘、光盘、紧致盘只读存储器(CD-ROM)、可重写紧致盘(CD-RW)以及磁光盘;半导体器件,诸如,只读存储器(ROM)、诸如动态随机存取存储器(DRAM)和静态随机存取存储器(SRAM)的随机存取存储器(RAM)、可擦除可编程只读存储器(EPROM)、闪存、电可擦除可编程只读存储器(EEPROM);相变存储器(PCM);磁卡或光卡;或适于存储电子指令的任何其他类型的介质。
因此,本发明的实施例还包括非暂态的有形机器可读介质,该介质包含指令或包含设计数据,诸如硬件描述语言(HDL),它定义本文中描述的结构、电路、装置、处理器和/或系统特征。这些实施例也被称为程序产品。
仿真(包括二进制变换、代码变形等)
在一些情况下,指令转换器可用于将指令从源指令集转换至目标指令集。例如,指令转换器可以将指令变换(例如,使用静态二进制变换、包括动态编译的动态二进制变换)、变形、仿真或以其他方式转换成要由核处理的一条或多条其他指令。指令转换器可以用软件、硬件、固件、或其组合来实现。指令转换器可以在处理器上、在处理器外、或者部分在处理器上且部分在处理器外。
图17是根据本发明的实施例的对照使用软件指令转换器将源指令集中的二进制指令转换成目标指令集中的二进制指令的框图。在所图示的实施例中,指令转换器是软件指令转换器,但替代地,该指令转换器可以用软件、固件、硬件或其各种组合来实现。图17示出可使用x86编译器1704来编译高级语言1702形式的程序,以生成可由具有至少一个x86指令集核的处理器1716原生执行的x86二进制代码1706。具有至少一个x86指令集核的处理器1716表示通过兼容地执行或以其他方式执行以下各项来执行与具有至少一个x86指令集核英特尔处理器基本相同的功能的任何处理器:1)英特尔x86指令集核的指令集的本质部分,或2)目标为在具有至少一个x86指令集核的英特尔处理器上运行以便取得与具有至少一个x86指令集核的英特尔处理器基本相同的结果的应用或其他软件的目标代码版本。x86编译器1704表示可操作用于生成x86二进制代码1706(例如,目标代码)的编译器,该二进制代码可通过或不通过附加的链接处理在具有至少一个x86指令集核的处理器1716上执行。类似地,图17示出可以使用替代的指令集编译器1708来编译高级语言1702形式的程序,以生成可以由不具有至少一个x86指令集核的处理器1714(例如,具有执行加利福尼亚州桑尼维尔市的MIPS技术公司的MIPS指令集、和/或执行加利福尼亚州桑尼维尔市的ARM控股公司的ARM指令集的核的处理器)原生执行的替代的指令集二进制代码1710。指令转换器1712用于将x86二进制代码1706转换成可以由不具有x86指令集核的处理器1714原生执行的代码。该转换后的代码不大可能与替代的指令集二进制代码1710相同,因为能够这样做的指令转换器难以制造;然而,转换后的代码将完成一般操作,并且由来自替代指令集的指令构成。因此,指令转换器1712通过仿真、模拟或任何其他过程来表示允许不具有x86指令集处理器或核的处理器或其他电子设备执行x86二进制代码1706的软件、固件、硬件或其组合。
针对装置中的任何一者所描述的组件、特征和细节还可任选地应用于方法中的任何一者,该方法在实施例中可由和/或利用此类装置执行。本文中所描述的处理器中的任何一者可包括在本文中所公开的计算机系统(例如,图13-16)中的任何一者中。本文中所公开的指令可利用具有本文中所示出的微架构中的任何一者、在本文中所示出的系统中的任何一者上的本文中所示出的处理器中的任何一者来执行。
在说明书和权利要求书中,可能已经使用了术语“耦合的”和/或“连接的”及其衍生词。这些术语不旨在互为同义词。相反,在多个实施例中,“连接的”可用于指示两个或更多元件彼此直接物理和/或电接触。“耦合的”可意指两个或更多个元件彼此直接物理和/或电接触。然而,“耦合的”也可意指两个或更多个元件彼此并不直接接触,但是仍然彼此协作或相互作用。例如,执行单元可通过一个或多个中间组件与寄存器和/或解码单元耦合。在附图中,箭头用于示出连接和耦合。
在说明书和/或权利要求书中,可能已经使用了术语“逻辑”、“单元”、“模块”或“组件”。可将这些术语中的每一个用于指代硬件、固件、软件或它们的各种组合。在示例实施例中,这些术语中的每一个可以指代集成电路、专用集成电路、模拟电路、数字电路、经编程逻辑器件、包括指令的存储器设备等等,以及它们的各种组合。在一些实施例中,这些可包括至少一些硬件(例如,晶体管、门电路、其他电路组件等)。
可能已经使用了术语“和/或”。如本文中所使用的,术语“和/或”意思是一个或另一个或两者(例如,A和/或B意思是:A或B,或者A和B两者)。
在以上描述中,为了提供对实施例的透彻理解,已阐述了特定的细节。然而,可以在没有这些特定细节中的一些的情况下来实践其他实施例。本发明的范围不是由以上所提供的具体示例来确定的,而仅由所附权利要求确定。在其他实例中,已经以框图形式和/或没有细节的形式示出了公知的电路、结构、设备和操作,以避免使对说明书的理解变得模糊。在认为合适的地方,已在附图之间重复了附图标记或附图标记的结尾部分以指示可能任选地具有类似或相同特性的对应或类似的元件,除非另外指定或是显而易见的。
某些操作可由硬件组件执行,或者能以机器可执行或电路可执行指令来具体化,这些机器可执行指令或电路可执行指令可用于使得和/或者导致机器、电路、或硬件组件(例如,处理器、处理器的部分、电路等)利用执行这些操作的指令来编程。这些操作还可任选地由硬件和软件的组合执行。处理器、机器、电路或硬件可包括专用或特定电路或其他逻辑(例如,可能与固件和/或软件组合的硬件),该专用或特定电路或其他逻辑用于执行和/或处理指令,并且响应于该指令而存储结果。
一些实施例包括制品(例如,计算机程序产品),该制品包括机器可读介质。该介质可包括以机器可读形式提供(例如,存储)信息的机制。机器可读介质可提供或在其上存储有指令或指令序列,如果和/或当由机器执行所述指令或指令序列时,该指令或指令序列可用于使该机器执行和/或导致所述机器执行本文中所公开的一种或多种操作、方法或技术。
在一些实施例中,机器可读介质可包括非暂态的机器可读存储介质。例如,非暂态机器可读存储介质可包括,软盘、光存储介质、光盘、光学数据存储设备、CD-ROM、磁盘、磁光盘、只读存储器(ROM)、可编程ROM(PROM)、可擦除可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)、随机存取存储器(RAM)、静态RAM(SRAM)、动态RAM(DRAM)、闪存、相变存储器、相变数据存储材料、非易失性存储器、非易失性数据存储设备、非暂态存储器、或非暂态数据存储设备等。非暂态机器可读存储介质不由暂态传播的信号组成。在一些实施例中,存储介质可包括有形介质,该有形介质包括固态物质。
合适机器的示例包括但不限于,通用处理器、专用处理器、数字逻辑电路、集成电路等。合适的机器的另一些示例包括,包含处理器、数字逻辑电路或集成电路的计算机系统或其他电子设备。此类计算机系统或电子设备的示例包括但不限于,台式计算机、膝上型计算机、笔记本计算机、平板计算机、上网本、智能电话、蜂窝电话、服务器、网络设备(例如,路由器和交换机)、移动互联网设备(MID)、媒体播放器、智能电视、上网机、机顶盒和视频游戏控制器。
贯穿本说明书对例如“一个实施例”、“实施例”、“一个或多个实施例”、“一些实施例”的引用例如指示可将特定的特征包括在本发明的实施中,但是不一定要求这么做。类似地,在该描述中,为了使本公开流畅并辅助对各创造性方面的理解,有时将各种特征一起归组在单个实施例、附图或对它们的描述中。然而,不应当将公开的该方法解释为反映本发明需要比每项权利要求中所明确记载的更多特征的意图。相反,如所附权利要求所反映,创造性方面在于少于单个的公开实施例的所有特征。因此,将遵循具体实施方式的权利要求明确地结合到该具体实施方式中,并且每一项权利要求独立地作为本发明的单独的实施例而存在。
示例实施例
下列示例涉及进一步的实施例。可在一个或多个实施例中的任何地方使用示例中的细节。
示例1是一种处理器,该处理器包括解码单元,该解码单元用于解码存储器复制指令。该指令用于指示源存储器操作数的开始、用于指示目的地存储器操作数的开始、并且用于指示架构上可见的存储位置,该架构上可见的存储位置用于存储要从源存储器操作数复制到目的地存储器操作数的初始数据量。该处理器还包括执行单元,该执行单元与解码单元耦合。执行单元用于响应于存储器复制指令在中断之前将数据的第一部分从源存储器操作数复制到目的地存储器操作数。数据的第一部分将以降序复制方向来复制。响应于中断,并且当数据的第一部分将以降序复制方向复制时,该执行单元用于将要复制的剩余数据量存储在架构上可见的存储位置中,但不用于指示源存储器操作数的不同的开始,并且不用于指示目的地存储器操作数的不同的开始。该剩余数据量用于表示初始数据量减去数据的第一部分。
示例2包括示例1所述的处理器,进一步包括:多个寄存器,该多个寄存器与执行单元耦合。另外,任选地,其中,架构上可见的存储位置包括多个寄存器中的第一寄存器。
示例3包括示例2所述的处理器,其中,该第一寄存器包括通用寄存器ECX和通用寄存器RCX中的一者。
示例4包括示例2至3中任一项所述的处理器,其中,解码单元用于对用于指示多个寄存器中的用于存储源存储器操作数的开始的第二寄存器、并且用于指示多个寄存器中的用于存储目的地存储器操作数的开始的第三寄存器的存储器复制指令进行解码。另外,任选地,其中,执行单元用于响应于中断并且当数据的第一部分以降序复制方向来复制时改变第一寄存器中的值,但不用于改变第二寄存器和第三寄存器中的值。
示例5包括示例1至4中任一项所述的处理器,其中,执行单元用于响应于存储器复制指令:基于源存储器操作数的开始、目的地存储器操作数的开始以及要复制的初始数据量来判定源存储器操作数与目的地存储器操作数是否重叠,并且至少在源存储器操作数与目的地存储器操作数重叠时以降序复制方向来复制数据的第一部分。
示例6包括示例1至4中任一项所述的处理器,其中,执行单元用于响应于存储器复制指令在不使用在存储器复制指令的执行之外所生成的复制方向的指示的情况下确定用于将数据的第一部分从源存储器操作数复制到目的地存储器操作数的复制方向。
示例7包括示例6所述的处理器,其中,执行单元用于响应于存储器复制指令:(1)当源存储器操作数与目的地存储器操作数不重叠时,将复制方向确定为升序复制方向;或者(2)当源存储器操作数与目的地存储器操作数重叠时,将复制方向确定为降序复制方向。
示例8包括示例1至7中任一项所述的处理器,其中,要复制的初始数据量包括要复制的数据的多位部分的初始数量,数据的多位部分是数据的8位部分、16位部分、32位部分以及64位部分中的一者。
示例9是一种处理器,该处理器包括解码单元,该解码单元用于解码存储器复制指令。该指令用于指示源存储器操作数、用于指示目的地存储器操作数、并且用于指示要从源存储器操作数复制到目的地存储器操作数的数据量。该处理器还包括执行单元,该执行单元与解码单元耦合。该执行单元用于响应于存储器复制指令在不使用在存储器复制指令的执行之外所生成的复制方向的指示的情况下确定用于开始将数据从源存储器操作数复制到目的地存储器操作数的复制方向。
示例10包括示例9所述的处理器,其中,执行单元用于响应于存储器复制指令:(1)判定源存储器操作数与目的地存储器操作数是否重叠;以及(2)至少部分基于源存储器操作数与目的地存储器操作数是否重叠的判定来确定复制方向。
示例11包括示例10所述的处理器,其中,执行单元用于响应于存储器复制指令基于从由该指令指示的源存储器操作数的开始、由该指令指示的目的地存储器操作数的开始、所指示的要复制的数据量以及可从其导出的参数中选择的信息的组合来判定源存储器操作数与目的地存储器操作数是否重叠。
示例12包括示例10至11中任一项所述的处理器,其中,执行单元用于响应于存储器复制指令:(1)当源存储器操作数与目的地存储器操作数不重叠时,将复制方向确定为升序复制方向;或者(2)当源存储器操作数与目的地存储器操作数重叠时,将复制方向确定为降序复制方向。
示例13包括示例9至12中任一项所述的处理器,其中,执行单元用于响应于存储器复制指令:当源存储器操作数与目的地存储器操作数重叠时,将复制方向确定为降序复制方向。该执行单元还用于在中断之前将数据的第一部分从源存储器操作数复制到目的地存储器操作数。该执行单元还用于响应于中断并且当已经将降序复制方向确定为复制方向时:将要复制的剩余数据量存储在架构上可见的存储位置中,而不指示不同于由存储器复制指令初始地指示的源存储器操作数的开始的源存储器操作数的开始,并且不指示不同于由存储器复制指令初始地指示的目的地存储器操作数的开始的目的地存储器操作数的开始。
示例14包括示例13所述的处理器,其中,执行单元用于响应于存储器复制指令将要复制的剩余数据量存储在已经初始地由存储器复制指令指示的用于存储要复制的数据量的寄存器中,但该执行单元不用于改变已经初始地由存储器复制指令指示的用于存储源存储器操作数的开始以及目的地存储器操作数的开始的寄存器中的值。
示例15包括示例9至12中任一项所述的处理器,进一步包括一组寄存器。另外,其中,解码单元用于对用于指示多个寄存器中的用于存储源存储器操作数的开始的第一寄存器、用于指示多个寄存器中的用于存储目的地存储器操作数的开始的第二寄存器、并且用于指示多个寄存器中的用于存储要复制的数据量的第三寄存器的存储器复制指令进行解码。
示例16包括示例9至15中任一项所述的处理器,其中,要复制的数据量包括数据的多位部分的数量,数据的多位部分是数据的8位部分、16位部分、32位部分以及64位部分中的一者。
示例17是一种方法,由处理器执行,该方法包括在该处理器处接收存储器复制指令。该存储器复制指令指示源存储器操作数的开始、指示目的地存储器操作数的开始、并且指示架构上可见的存储位置,该架构上可见的存储位置存储要从源存储器操作数复制到目的地存储器操作数的初始数据量。该方法还包括:响应于存储器复制指令来判定源存储器操作数与目的地存储器操作数重叠。该方法还包括:响应于存储器复制指令,在中断之前以降序复制方向将数据的第一部分从源存储器操作数复制到目的地存储器操作数。该方法还包括:响应于中断,并且由于数据的第一部分以降序复制方向复制,将要复制的剩余数据量存储在架构上可见的存储位置中,要复制的剩余数据量表示初始数据量减去数据的第一部分,而不指示源存储器操作数的不同的开始,并且不指示目的地存储器操作数的不同的开始。
示例18包括示例17所述的方法,其中,存储步骤包括将要复制的剩余数据量存储在第一通用寄存器中。
示例19包括示例18所述的方法,其中,接收步骤包括接收指示存储源存储器操作数的开始的第二通用寄存器、指示存储目的地存储器操作数的开始的第三通用寄存器的存储器复制指令。另外,其中,响应于中断,并且由于数据的第一部分以降序复制方向复制,改变存储在第一通用寄存器中的值,但不改变存储在第二通用寄存器和第三通用寄存器中的值。
示例20包括示例17至19中任一项所述的方法,其中,判定步骤包括:基于源存储器操作数的开始、目的地存储器操作数的开始以及要复制的初始数据量来判定源存储器操作数与目的地存储器操作数重叠。
示例21包括示例17至19中任一项所述的方法,进一步包括:在不使用在存储器复制指令的执行之外所生成的复制方向的指示的情况下确定以降序复制方向来复制数据的第一部分。
示例22包括示例17至19中任一项所述的方法,进一步包括:基于源存储器操作数与目的地存储器操作数重叠的判定来确定以降序复制方向来复制数据的第一部分。
示例23包括示例17至19中任一项所述的方法,进一步包括:仅基于源存储器操作数的开始、目的地存储器操作数的开始以及要复制的初始数据量,而不使用由软件提供的复制方向的指示,来确定以降序复制方向来复制数据的第一部分。
示例24是一种计算机系统,其包括互连以及与该互连耦合的处理器。该处理器用于接收存储器复制指令,该存储器复制指令用于指示源存储器操作数的开始、用于指示目的地存储器操作数的开始、并且用于指示架构上可见的存储位置,该架构上可见的存储位置用于存储要从源存储器操作数复制到目的地存储器操作数的初始数据量。该处理器用于响应于存储器复制指令在中断之前将数据的第一部分从源存储器操作数复制到目的地存储器操作数。数据的第一部分将以降序复制方向来复制。响应于中断,并且当数据的第一部分将以降序复制方向复制时,该处理器用于将要复制的剩余数据量存储在架构上可见的存储位置中,但不用于指示源存储器操作数的不同的开始,并且不用于指示目的地存储器操作数的不同的开始。该计算机系统还包括与该互连耦合的动态随机存取存储器(DRAM)。
示例25包括示例24所述的计算机系统,其中,处理器用于响应于存储器复制指令:基于源存储器操作数的开始、目的地存储器操作数的开始以及要复制的初始数据量来判定源存储器操作数与目的地存储器操作数是否重叠。该处理器还任选地用于:基于源存储器操作数与目的地存储器操作数是否重叠而不使用在存储器复制指令之外所生成的复制方向的指示,来判定使用升序复制方向还是降序复制方向。
示例26包括示例1-16中任一项所述的处理器,进一步包括:任选的分支预测单元,用于预测分支;以及任选的指令预取单元,与该分支预测单元耦合,该指令预取单元用于预取指令,这些指令包括存储器复制指令。该处理器还可任选地包括:任选的第一级(L1)指令高速缓存,与指令预取单元耦合,该L1指令高速缓存用于存储指令;任选的L1数据高速缓存,用于存储数据;以及任选的第二级(L2)高速缓存,用于存储数据和指令。该处理器还可任选地包括指令取出单元,与解码单元、L1指令高速缓存、以及L2高速缓存耦合,该指令取出单元用于:取出存储器复制指令,在一些情况下,从L1指令高速缓存和L2高速缓存中的一者取出存储器复制指令;并且用于将该存储器复制指令提供给解码单元。该处理器还可任选地包括:寄存器重命名单元,用于对寄存器重命名;任选的调度器,用于对已从存储器复制指令解码出的一个或多个操作进行调度以供执行;以及任选的提交单元,用于提交存储器复制指令的执行结果。
示例27包括一种芯片上系统,该芯片上系统包括:至少一个互连;示例1至16中任一项所述的处理器,与该至少一个互连耦合;任选的图形处理单元(GPU),与该至少一个互连耦合;任选的数字信号处理器(DSP),与该至少一个互连耦合;任选的显示控制器,与该至少一个互连耦合;任选的存储器控制器,与该至少一个互连耦合;任选的无线调制解调器,与该至少一个互连耦合;任选的图像信号处理器,与该至少一个互连耦合;任选的兼容通用串行总线(USB)3.0的控制器,与该至少一个互连耦合;任选的兼容蓝牙4.1的控制器,与该至少一个互连耦合;以及任选的无线收发机控制器,与该至少一个互连耦合。
示例28是处理器或其他装置,可操作以执行示例17至23中任一项所述的方法。
示例29是处理器或其他设备,其包括用于执行示例17至23中任一项所述的方法的装置。
示例30是处理器或其他设备,其包括可操作以执行示例17至23中任一项所述的方法的模块和/或单元和/或逻辑和/或电路和/或装置的任何组合。
示例31是一种任选地非暂态和/或有形机器可读介质,其任选地存储或以其他方式提供包括第一指令的指令,如果由处理器、计算机系统、电子设备或其他机器执行该第一指令和/或当由处理器、计算机系统、电子设备或其他机器执行该第一指令时,该第一指令可操作以使得该机器执行示例17至23中任一项所述的方法。
示例32是基本上如本文中所描述的处理器或其他装置。
示例33是可操作以执行基本上如本文中所描述的任何方法的处理器或其他装置。
示例34是可操作以执行基本上如本文中所描述的任何存储器复制指令的处理器或其他装置。

Claims (25)

1.一种处理器,包括:
解码单元,用于解码存储器复制指令,所述存储器复制指令用于指示源存储器操作数的开始、用于指示目的地存储器操作数的开始、并且用于指示架构上可见的存储位置,所述架构上可见的存储位置用于存储要从所述源存储器操作数复制到所述目的地存储器操作数的初始数据量;以及
执行单元,与所述解码单元耦合,所述执行单元用于响应于所述存储器复制指令:
在中断之前将数据的第一部分从所述源存储器操作数复制到所述目的地存储器操作数,其中,数据的所述第一部分将以降序复制方向复制,所述降序复制方向开始于较高寻址数据并结束于较低寻址数据;以及
响应于所述中断,并且当数据的所述第一部分将以降序复制方向复制时,将要复制的剩余数据量存储在所述架构上可见的存储位置中,但不用于指示所述源存储器操作数的不同的开始、并且不用于指示所述目的地存储器操作数的不同的开始,其中,所述剩余数据量用于表示所述初始数据量减去数据的所述第一部分。
2.如权利要求1所述的处理器,进一步包括多个寄存器,所述多个寄存器与所述执行单元耦合,并且其中,所述架构上可见的存储位置包括所述多个寄存器中的第一寄存器。
3.如权利要求2所述的处理器,其中,所述第一寄存器包括通用寄存器ECX和通用寄存器RCX中的一者。
4.如权利要求2所述的处理器,其中,所述解码单元用于对用于指示所述多个寄存器中的用于存储所述源存储器操作数的开始的第二寄存器、并且用于指示所述多个寄存器中的用于存储所述目的地存储器操作数的开始的第三寄存器的所述存储器复制指令进行解码,并且其中,所述执行单元用于响应于所述中断并且当数据的所述第一部分将以降序复制方向复制时,改变所述第一寄存器中的值但不用于改变所述第二寄存器和所述第三寄存器中的值。
5.如权利要求1至4中任一项所述的处理器,其中,所述执行单元用于响应于所述存储器复制指令,基于所述源存储器操作数的开始、所述目的地存储器操作数的开始以及要复制的所述初始数据量来判定所述源存储器操作数与所述目的地存储器操作数是否重叠,并且至少在所述源存储器操作数与所述目的地存储器操作数重叠时以降序复制方向来复制数据的所述第一部分。
6.如权利要求1至4中任一项所述的处理器,其中,所述执行单元用于响应于所述存储器复制指令,在不使用在所述存储器复制指令的执行之外所生成的复制方向的指示的情况下确定用于将数据的所述第一部分从所述源存储器操作数复制到所述目的地存储器操作数的复制方向。
7.如权利要求6所述的处理器,其中,所述执行单元用于响应于所述存储器复制指令:
当所述源存储器操作数与所述目的地存储器操作数不重叠时,将所述复制方向确定为升序复制方向;或者
当所述源存储器操作数与所述目的地存储器操作数重叠时,将所述复制方向确定为降序复制方向。
8.如权利要求1至4中任一项所述的处理器,其中,要复制的所述初始数据量包括要复制的数据的多位部分的初始数量,数据的所述多位部分是数据的8位部分、16位部分、32位部分以及64位部分中的一者。
9.一种由处理器执行的方法,包括:
在所述处理器处接收存储器复制指令,所述存储器复制指令指示源存储器操作数的开始、指示目的地存储器操作数的开始、并且指示架构上可见的存储位置,所述架构上可见的存储位置存储要从所述源存储器操作数复制到所述目的地存储器操作数的初始数据量;
响应于所述存储器复制指令,判定所述源存储器操作数与所述目的地存储器操作数重叠;
响应于所述存储器复制指令,在中断之前将数据的第一部分以降序复制方向从所述源存储器操作数复制到所述目的地存储器操作数,所述降序复制方向从较高寻址数据向较低寻址数据进行;以及
响应于所述中断,并且由于数据的所述第一部分以降序复制方向复制,将要复制的剩余数据量存储在所述架构上可见的存储位置中,要复制的所述剩余数据量表示所述初始数据量减去数据的所述第一部分,而不指示所述源存储器操作数的不同的开始,并且不指示所述目的地存储器操作数的不同的开始。
10.如权利要求9所述的方法,其中,存储步骤包括将要复制的所述剩余数据量存储在第一通用寄存器中。
11.如权利要求10所述的方法,其中,接收步骤包括接收指示存储所述源存储器操作数的开始的第二通用寄存器、指示存储所述目的地存储器操作数的开始的第三通用寄存器的所述存储器复制指令,并且其中,响应于所述中断,并且由于以降序复制方向复制数据的所述第一部分,改变存储在所述第一通用寄存器中的值,但不改变存储在所述第二通用寄存器和所述第三通用寄存器中的值。
12.如权利要求9至11中任一项所述的方法,其中,判定步骤包括:基于所述源存储器操作数的开始、所述目的地存储器操作数的开始以及要复制的所述初始数据量来判定所述源存储器操作数与所述目的地存储器操作数重叠。
13.如权利要求9至11中任一项所述的方法,进一步包括:在不使用在所述存储器复制指令的执行之外所生成的复制方向的指示的情况下确定以降序复制方向来复制数据的所述第一部分。
14.如权利要求9至11中任一项所述的方法,进一步包括:基于所述源存储器操作数与所述目的地存储器操作数重叠的判定来确定以降序复制方向来复制数据的所述第一部分。
15.一种处理器,包括:
解码单元,用于解码存储器复制指令,所述存储器复制指令用于指示源存储器操作数、用于指示目的地存储器操作数、并且用于指示要从所述源存储器操作数复制到所述目的地存储器操作数的数据量;以及
执行单元,与所述解码单元耦合,所述执行单元用于响应于所述存储器复制指令:
在不使用在所述存储器复制指令的执行之外所生成的复制方向的指示的情况下确定用于开始将数据从所述源存储器操作数复制到所述目的地存储器操作数的复制方向,所述复制方向是升序复制方向和降序复制方向中的一者,其中,所述降序复制方向开始于较高寻址数据并结束于较低寻址数据,并且所述升序复制方向开始于较低寻址数据并结束于较高寻址数据。
16.如权利要求15所述的处理器,其中,所述执行单元用于响应于所述存储器复制指令:
判定所述源存储器操作数与所述目的地存储器操作数是否重叠;以及
至少部分基于所述源存储器操作数与所述目的地存储器操作数是否重叠的判定来确定所述复制方向。
17.如权利要求16所述的处理器,其中,所述执行单元用于响应于所述存储器复制指令,基于从由所述指令指示的所述源存储器操作数的开始、由所述指令指示的所述目的地存储器操作数的开始、所指示的要复制的数据量、以及可从其导出的参数中选择的信息的组合来判定所述源存储器操作数与所述目的地存储器操作数是否重叠。
18.如权利要求16所述的处理器,其中,所述执行单元用于响应于所述存储器复制指令:
当所述源存储器操作数与所述目的地存储器操作数不重叠时,将所述复制方向确定为升序复制方向;或者
当所述源存储器操作数与所述目的地存储器操作数重叠时,将所述复制方向确定为降序复制方向。
19.如权利要求15至18中任一项所述的处理器,其中,所述执行单元用于响应于所述存储器复制指令:
当所述源存储器操作数与所述目的地存储器操作数重叠时,将所述复制方向确定为降序复制方向;
在中断之前将数据的第一部分从所述源存储器操作数复制到所述目的地存储器操作数;以及
响应于所述中断,并且当降序复制方向已经被确定为所述复制方向时,将要复制的剩余数据量存储在架构上可见的存储位置中,而不指示所述源存储器操作数的与所述存储器复制指令初始地指示的开始不同的开始,并且不指示所述目的地存储器操作数的与所述存储器复制指令初始地指示的开始不同的开始。
20.如权利要求19所述的处理器,其中,所述执行单元用于响应于所述存储器复制指令,将要复制的所述剩余数据量存储在已经初始地由所述存储器复制指令指示的用于存储要复制的所述数据量的寄存器中,但不用于改变已经初始地由所述存储器复制指令指示的用于存储所述源存储器操作数的开始以及所述目的地存储器操作数的开始的寄存器中的值。
21.如权利要求15至18中任一项所述的处理器,进一步包括一组寄存器,并且其中,所述解码单元用于对用于指示多个寄存器中的用于存储所述源存储器操作数的开始的第一寄存器、用于指示所述多个寄存器中的用于存储所述目的地存储器操作数的开始的第二寄存器、并且用于指示所述多个寄存器中的用于存储要复制的所述数据量的第三寄存器的所述存储器复制指令进行解码。
22.如权利要求15至18中任一项所述的处理器,其中,要复制的所述数据量包括数据的多位部分的数量,数据的所述多位部分是数据的8位部分、16位部分、32位部分以及64位部分中的一者。
23.一种设备,包括用于执行如权利要求9至11中任一项所述的方法的装置。
24.一种计算机系统,包括:
互连;
处理器,与所述互连耦合,所述处理器用于接收存储器复制指令,所述存储器复制指令用于指示源存储器操作数的开始、用于指示目的地存储器操作数的开始、并且用于指示架构上可见的存储位置,所述架构上可见的存储位置用于存储要从所述源存储器操作数复制到所述目的地存储器操作数的初始数据量,所述处理器用于响应于所述存储器复制指令:在中断之前将数据的第一部分从所述源存储器操作数复制到所述目的地存储器操作数,其中,数据的所述第一部分将以降序复制方向来复制,所述降序复制方向开始于较高寻址数据并结束于较低寻址数据;以及用于响应于所述中断并且当数据的所述第一部分将以降序复制方向复制时,将要复制的剩余数据量存储在所述架构上可见的存储位置中,但不用于指示所述源存储器操作数的不同的开始,并且不用于指示所述目的地存储器操作数的不同的开始;以及
动态随机存取存储器(DRAM),与所述互连耦合。
25.一种处理器,包括:
用于解码存储器复制指令的装置,所述存储器复制指令用于指示源存储器操作数的开始、用于指示目的地存储器操作数的开始、并且用于指示架构上可见的存储位置,所述架构上可见的存储位置用于存储要从所述源存储器操作数复制到所述目的地存储器操作数的初始数据量;以及
用于响应于所述存储器复制指令来在中断之前将数据的第一部分从所述源存储器操作数复制到所述目的地存储器操作数的装置,其中,数据的所述第一部分将以降序复制方向来复制,所述降序复制方向开始于较高寻址数据并结束于较低寻址数据;以及
用于响应于所述存储器复制指令、响应于所述中断并且在数据的所述第一部分将以降序复制方向复制时将要复制的剩余数据量存储在所述架构上可见的存储位置中但不用于指示所述源存储器操作数的不同的开始、并且不用于指示所述目的地存储器操作数的不同的开始的装置,其中,所述剩余数据量用于表示所述初始数据量减去数据的所述第一部分。
CN201780021154.0A 2016-03-31 2017-03-03 存储器复制指令、处理器、方法和系统 Active CN108885551B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202310099536.2A CN116339828A (zh) 2016-03-31 2017-03-03 存储器复制指令、处理器、方法和系统

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US15/086,686 2016-03-31
US15/086,686 US10261790B2 (en) 2016-03-31 2016-03-31 Memory copy instructions, processors, methods, and systems
PCT/US2017/020625 WO2017172259A1 (en) 2016-03-31 2017-03-03 Memory copy instructions, processors, methods, and systems

Related Child Applications (1)

Application Number Title Priority Date Filing Date
CN202310099536.2A Division CN116339828A (zh) 2016-03-31 2017-03-03 存储器复制指令、处理器、方法和系统

Publications (2)

Publication Number Publication Date
CN108885551A CN108885551A (zh) 2018-11-23
CN108885551B true CN108885551B (zh) 2023-06-06

Family

ID=59958756

Family Applications (2)

Application Number Title Priority Date Filing Date
CN202310099536.2A Pending CN116339828A (zh) 2016-03-31 2017-03-03 存储器复制指令、处理器、方法和系统
CN201780021154.0A Active CN108885551B (zh) 2016-03-31 2017-03-03 存储器复制指令、处理器、方法和系统

Family Applications Before (1)

Application Number Title Priority Date Filing Date
CN202310099536.2A Pending CN116339828A (zh) 2016-03-31 2017-03-03 存储器复制指令、处理器、方法和系统

Country Status (5)

Country Link
US (1) US10261790B2 (zh)
CN (2) CN116339828A (zh)
DE (1) DE112017001716T5 (zh)
TW (1) TWI733760B (zh)
WO (1) WO2017172259A1 (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10261790B2 (en) 2016-03-31 2019-04-16 Intel Corporation Memory copy instructions, processors, methods, and systems
US10296416B2 (en) 2016-07-02 2019-05-21 Intel Corporation Read from memory instructions, processors, methods, and systems, that do not take exception on defective data
CN107766079B (zh) * 2016-08-19 2022-03-11 北京百度网讯科技有限公司 处理器以及用于在处理器上执行指令的方法
US10831478B2 (en) 2018-11-06 2020-11-10 International Business Machines Corporation Sort and merge instruction for a general-purpose processor
US10831502B2 (en) 2018-11-06 2020-11-10 International Business Machines Corporation Migration of partially completed instructions
US10831503B2 (en) 2018-11-06 2020-11-10 International Business Machines Corporation Saving and restoring machine state between multiple executions of an instruction
CN112506591A (zh) * 2021-02-05 2021-03-16 北京鼎石纵横科技有限公司 一种字符串的复制方法、装置及可读存储介质及计算设备
US20240028241A1 (en) * 2022-07-22 2024-01-25 Arm Limited Memcpy micro-operation reduction

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103988173A (zh) * 2011-11-25 2014-08-13 英特尔公司 用于提供掩码寄存器与通用寄存器或存储器之间的转换的指令和逻辑
CN104011670A (zh) * 2011-12-22 2014-08-27 英特尔公司 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令
CN104011648A (zh) * 2011-12-23 2014-08-27 英特尔公司 用于执行向量打包压缩和重复的系统、装置以及方法
CN104049953A (zh) * 2013-03-15 2014-09-17 英特尔公司 用于合并操作掩码的未经掩码元素的处理器、方法、系统和指令

Family Cites Families (28)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
BR8406089A (pt) * 1983-11-30 1985-09-24 Fujitsu Ltd Processo para controlar memoria intermediaria em aparelho de processamento de dados
US5537620A (en) * 1994-09-16 1996-07-16 International Business Machines Corporation Redundant load elimination on optimizing compilers
US5819304A (en) * 1996-01-29 1998-10-06 Iowa State University Research Foundation, Inc. Random access memory assembly
US5835972A (en) * 1996-05-28 1998-11-10 Advanced Micro Devices, Inc. Method and apparatus for optimization of data writes
US6223258B1 (en) * 1998-03-31 2001-04-24 Intel Corporation Method and apparatus for implementing non-temporal loads
US6205520B1 (en) * 1998-03-31 2001-03-20 Intel Corporation Method and apparatus for implementing non-temporal stores
US6539471B2 (en) * 1998-12-23 2003-03-25 Intel Corporation Method and apparatus for pre-processing instructions for a processor
US6467027B1 (en) * 1999-12-30 2002-10-15 Intel Corporation Method and system for an INUSE field resource management scheme
US6880071B2 (en) 2001-04-09 2005-04-12 Sun Microsystems, Inc. Selective signalling of later reserve location memory fault in compound compare and swap
JP3763518B2 (ja) 2001-05-29 2006-04-05 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラ、そのコンパイル方法およびプログラム
US7024542B2 (en) * 2002-01-02 2006-04-04 Intel Corporation System and method of reducing the number of copies from alias registers to real registers in the commitment of instructions
US6895486B2 (en) 2002-08-29 2005-05-17 Micron Technology, Inc. Linear object management for a range of flash memory
US8572604B2 (en) * 2005-11-12 2013-10-29 Intel Corporation Method and apparatus to support virtualization with code patches
FR2927438B1 (fr) * 2008-02-08 2010-03-05 Commissariat Energie Atomique Methode de prechargement dans une hierarchie de memoires des configurations d'un systeme heterogene reconfigurable de traitement de l'information
US7802078B2 (en) 2008-09-09 2010-09-21 Via Technologies, Inc. REP MOVE string instruction execution by selecting loop microinstruction sequence or unrolled sequence based on flag state indicative of low count repeat
US8543796B2 (en) * 2008-11-05 2013-09-24 Intel Corporation Optimizing performance of instructions based on sequence detection or information associated with the instructions
US8527737B2 (en) * 2010-06-23 2013-09-03 Apple Inc. Using addresses to detect overlapping memory regions
US9311250B2 (en) * 2011-12-19 2016-04-12 Intel Corporation Techniques for memory de-duplication in a virtual system
EP2798522A4 (en) * 2011-12-30 2015-08-05 Intel Corp SELECTIVE HARDWARE ACCELERATION IN VIDEO PLAYBACK SYSTEMS
US9164690B2 (en) 2012-07-27 2015-10-20 Nvidia Corporation System, method, and computer program product for copying data between memory locations
US9563425B2 (en) 2012-11-28 2017-02-07 Intel Corporation Instruction and logic to provide pushing buffer copy and store functionality
US9256433B2 (en) * 2013-03-15 2016-02-09 Intel Corporation Systems and methods for move elimination with bypass multiple instantiation table
US9292288B2 (en) * 2013-04-11 2016-03-22 Intel Corporation Systems and methods for flag tracking in move elimination operations
DE102013212842A1 (de) * 2013-07-02 2015-01-08 Robert Bosch Gmbh Verfahren zum Betreiben eines Steuergeräts sowie Steuergerät mit einer Modellberechnungseinheit
US9396056B2 (en) * 2014-03-15 2016-07-19 Intel Corporation Conditional memory fault assist suppression
US10394556B2 (en) * 2015-12-20 2019-08-27 Intel Corporation Hardware apparatuses and methods to switch shadow stack pointers
US9996361B2 (en) * 2015-12-23 2018-06-12 Intel Corporation Byte and nibble sort instructions that produce sorted destination register and destination index mapping
US10261790B2 (en) 2016-03-31 2019-04-16 Intel Corporation Memory copy instructions, processors, methods, and systems

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103988173A (zh) * 2011-11-25 2014-08-13 英特尔公司 用于提供掩码寄存器与通用寄存器或存储器之间的转换的指令和逻辑
CN104011670A (zh) * 2011-12-22 2014-08-27 英特尔公司 用于基于向量写掩码的内容而在通用寄存器中存储两个标量常数之一的指令
CN104011648A (zh) * 2011-12-23 2014-08-27 英特尔公司 用于执行向量打包压缩和重复的系统、装置以及方法
CN104049953A (zh) * 2013-03-15 2014-09-17 英特尔公司 用于合并操作掩码的未经掩码元素的处理器、方法、系统和指令

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"Multi-platform Auto-vectorization";Dorit Nuzman et al.;《IEEE》;20061231;第1-11页 *
"SIMD指令集设计空间的形式化描述";李春江 等;《计算机科学》;20130630;第40卷(第6期);第32-36页 *

Also Published As

Publication number Publication date
WO2017172259A1 (en) 2017-10-05
TW201741867A (zh) 2017-12-01
TWI733760B (zh) 2021-07-21
CN116339828A (zh) 2023-06-27
CN108885551A (zh) 2018-11-23
DE112017001716T5 (de) 2018-12-13
US20170285959A1 (en) 2017-10-05
US10261790B2 (en) 2019-04-16

Similar Documents

Publication Publication Date Title
CN108885551B (zh) 存储器复制指令、处理器、方法和系统
CN107729048B (zh) 提供向量压缩和旋转功能的指令和逻辑
JP6849274B2 (ja) 融合された単一のサイクルのインクリメント−比較−ジャンプを実施するための命令及びロジック
JP6340097B2 (ja) リードマスク及びライトマスクにより制御されるベクトル移動命令
CN108351830B (zh) 用于存储器损坏检测的硬件装置和方法
CN108369509B (zh) 用于基于通道的跨步分散操作的指令和逻辑
KR101679111B1 (ko) 연산 마스크들의 마스킹되지 않는 요소들을 통합하기 위한 프로세서들, 방법들, 시스템들, 및 명령어들
US9262327B2 (en) Signature based hit-predicting cache
CN109508206B (zh) 向较宽的寄存器进行依赖于模式的部分宽度加载的处理器、方法和系统
US10338920B2 (en) Instructions and logic for get-multiple-vector-elements operations
US9652234B2 (en) Instruction and logic to control transfer in a partial binary translation system
KR101806279B1 (ko) 명령어 순서 강제 명령어들의 쌍들, 프로세서들, 방법들, 및 시스템들
CN110659129A (zh) 用于数据表示之间的一致、加速的转换的装置和方法
US10152321B2 (en) Instructions and logic for blend and permute operation sequences
WO2017105709A1 (en) Instruction and logic for permute with out of order loading
US9424042B2 (en) System, apparatus and method for translating vector instructions
US9336156B2 (en) Method and apparatus for cache line state update in sectored cache with line state tracker
CN108475242B (zh) 冲突掩码生成
EP3109754A1 (en) Systems, methods, and apparatuses for improving performance of status dependent computations
WO2017105712A1 (en) Instruction and logic for permute sequence
CN109416635B (zh) 针对使用多个架构寄存器的指令的架构寄存器替换
TWI751990B (zh) 衝突罩生成

Legal Events

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