CN104239001A - 至少一个处理流水线中的操作数生成 - Google Patents

至少一个处理流水线中的操作数生成 Download PDF

Info

Publication number
CN104239001A
CN104239001A CN201410256267.7A CN201410256267A CN104239001A CN 104239001 A CN104239001 A CN 104239001A CN 201410256267 A CN201410256267 A CN 201410256267A CN 104239001 A CN104239001 A CN 104239001A
Authority
CN
China
Prior art keywords
instruction
operand
generating run
pipeline stage
stream
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.)
Pending
Application number
CN201410256267.7A
Other languages
English (en)
Inventor
伊恩·米歇尔·考尔菲尔德
皮特·理查德·格林哈尔格
马克斯·巴特利
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.)
ARM Ltd
Original Assignee
Advanced Risc Machines Ltd
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 Advanced Risc Machines Ltd filed Critical Advanced Risc Machines Ltd
Publication of CN104239001A publication Critical patent/CN104239001A/zh
Pending legal-status Critical Current

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/3004Arrangements for executing specific machine instructions to perform operations on memory
    • G06F9/30043LOAD or STORE instructions; Clear instruction
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3812Instruction prefetching with instruction modification, e.g. store into instruction stream
    • 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/3017Runtime instruction translation, e.g. macros
    • 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/30181Instruction operation extension or modification
    • 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/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • G06F9/3557Indexed addressing using program counter as base address
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3824Operand accessing
    • G06F9/3826Bypassing or forwarding of data results, e.g. locally between pipeline stages or within a pipeline stage
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3838Dependency mechanisms, e.g. register scoreboarding

Landscapes

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

Abstract

本发明公开了一种至少一个处理流水线中的操作数生成。一种数据处理设备2具有至少一个处理流水线4,所述至少一个处理流水线4具有第一流水线级6、8,第二流水线级10以及第三流水线级12。所述第一流水线级6、8检测要被处理的指令流是否包括预定指令序列,所述预定指令序列包括用于执行第一和第二操作数生成操作的第一指令和第二指令30、32,其中所述第二操作数生成操作依赖于所述第一操作数生成操作的结果。响应于检测到这个指令序列,所述第一流水线级6、8生成经修改的指令流,其中至少所述第二指令32被用第三指令70代替以用于执行具有与所述第一和第二操作数生成操作相同的效果的组合操作数生成操作。因为所述第三指令70能够独立于所述第一指令30被调度,所以能够改进所述流水线4的处理性能。

Description

至少一个处理流水线中的操作数生成
技术领域
本发明涉及数据处理领域。更特别地,本发明涉及在处理器的至少一个处理流水线中的操作数(operand)的生成。
背景技术
处理器可以有具有用于处理指令的若干流水线级的处理流水线。用于执行特定操作的指令可能需要特定流水线级来处理该操作。如果需要的操作数不可及时用于使用该操作数的流水线级,则指令可能需要被延迟并且在后一处理周期中发出,这降低了处理性能。本技术寻求解决这个问题,并且通过处理流水线来提高指令的吞吐量。
发明内容
从一个方面来看,本发明提供了一种处理器,其包括:
被配置为处理指令流的至少一个处理流水线,所述至少一个处理流水线包括第一流水线级、第二流水线级和第三流水线级;其中:
第一流水线级被配置为检测指令流是否包括预定指令序列,所述预定指令序列包括用于在第三流水线级执行第一操作数生成操作的第一指令和用于在第二流水线级执行第二操作数生成操作的第二指令,其中第二操作数生成操作依赖于第一操作数生成操作的结果;以及
响应于检测到指令流包括所述预定指令序列,第一流水线级被配置为生成经修改的指令流以供由至少一个处理流水线处理,其中至少第二指令被用于执行组合操作数生成操作的第三指令代替以便生成一操作数,其相当于如果第二操作数生成操作在第一操作数生成操作之后被执行则将会被生成的操作数。
处理流水线可以处理预定指令系列,其中第一指令执行第一操作数生成操作并且第二指令执行依赖于第一操作数生成操作的结果的第二操作数生成操作。这种依赖性限制这些指令能够被处理时的时序,因为第二指令在其能够继续进行第二操作数生成操作之前必须等待第一指令的结果。可能不得不延迟第二指令持续一个或多个周期,从而放慢这些指令的总体处理。
为了解决这个问题,流水线的第一流水线级检测要被处理的指令流是否包括预定指令序列。如果预定指令序列被检测到,则经修改的指令流被生成以供由流水线处理,其中至少第二指令被用第三指令代替以用于执行组合操作数生成操作。组合操作数生成操作具有与如果第二操作数生成操作在第一操作数生成操作之后被执行则将发生的效果相同的效果。因为两个操作数生成操作的组合现能够使用一条指令来执行,所以这消除了依赖性问题并且释放流水线以独立于第一指令对第三指令进行调度。在许多情况下,这允许第三指令比如果第一和第二指令被流水线以它们原始的形式处理早至少一个周期来被处理。
如果第一、第二和第三流水线级为使得即在第一流水线级处的指令需要一定数量的处理周期到达第二流水线级并且需要至少该数目的周期到达第三流水线级,则这种技术是特别有用的。因为用于执行第一操作数生成操作的第三流水线级与用于执行第二操作数生成操作的第二流水线级相比是在相同的级处或进一步在流水线下方,所以这使得第一和第二指令难以在背对背处理周期内被调度,因为在第三流水线级中的第一操作数生成操作的结果能够被及时转发回到第二流水线级以用于第二操作数生成操作是不太可能的。因此,可能的是,以它们原始的形式处理第一和第二指令将在流水线中引起气泡(在没有指令正被流水线级处理时的处理周期),因此通过用经修改的第三指令代替至少第二指令以用于执行组合操作数生成操作来打破依赖性对于避免气泡并且加速处理是有用的。
由组合操作数生成操作所生成的或者由第一和第二操作数生成操作所生成的操作数可以是由被流水线处理的指令所使用的任何值。例如,操作数可以是地址。
在一个示例中,第一操作数生成操作可以用于生成操作数的第一部分并且第二操作数生成操作可以用于生成包括第一部分和第二部分两者的全操作数。组合操作数生成操作还可以生成包括第一和第二部分两者的全操作数。当要被生成的操作数大于可用于在单指令的编码中表示操作数的位的数目时,操作数的这种两级生成是特别有用的。第三指令能够在一条指令中生成较大的操作数,因为它是由第一级所生成的内部生成指令,而不是已被程序设计员或编译器编码的存储在存储器中的指令,因此第三指令不需要遵循针对正被使用的指令集的正常编码规则。能够使用控制至少一个流水线执行组合操作数生成操作所必需的任何信息在经修改的指令流中表示第三指令。
第一操作数生成操作可以包括通过将偏移值加到存储在诸如寄存器的存储位置中的基值的至少一部分来生成操作数的第一部分。例如,基值可以是指示要被处理的指令(例如,当前处理的指令或要被处理的下一条指令)的地址的程序计数器,在这种情况下第一操作数生成操作将生成相对于程序计数器已被偏移的地址。
当表示第二指令应该被用第三指令代替所针对的预定指令序列时第一流水线级不需要检测第一和第二指令的所有发生。有时,即使存在如上面所提到的第一和第二指令也可能不期望用第三指令代替第二指令。例如,在操作数基于程序计数器的一部分被生成的情况下,如果第一和第二指令对于用于操作数生成的程序计数器的部分具有相同的值则第一流水线级可以检测预定指令序列。否则,第三指令(其将典型地具有同第二指令相同的地址)能够将不同的结果给予给第一和第二指令的组合,因为用于第三指令的程序计数器的部分可以不同于第一指令的部分。通过只是在第一和第二指令对于程序计数器的有关部分共享相同的值的时候执行用第三指令代替第二指令,能够保证正确的结果。
第一操作数生成操作可以将偏移值加到基值的最高有效部分。在执行这个加法之前可能需要转移偏移值以便将它与基值的最高有效部分对齐。在程序计数器的情况下,最高有效部分可以表示地址的页面部分,指示包括正被处理的指令的存储器的页面。通过将偏移加到程序计数器的页面部分,第一操作数生成操作能够确定地址空间的不同页面的地址,例如包括要被访问的文字值的页面。第一操作数生成操作可以掩蔽基值的最低有效部分,以便在存储器的页面内的页面偏移不由这个操作来确定。第二操作数生成操作然后可以将立即值加到第一操作数生成操作的结果的最低有效部分,以便提供要被访问的数据值的全存储器地址。在一些架构中,存储器地址可以具有比可用于对操作数进行编码的指令中的编码空间更大数目的位(例如,32位地址可以用仅具有可用于对操作数进行编码的21个位的指令来生成)。在这种情况下,使用序列中的第一和第二指令的两部分地址生成可能是有用的,并且为了提高性能,能够用使用单指令来生成全存储器地址的第三指令代替至少第二指令。
预定序列的第二指令可以使用由第二操作数生成操作所生成的操作数来执行进一步的处理操作。类似地,代替第二指令的第三指令可以执行相同的处理操作。这种处理操作可以包括用于从存储器加载具有由所生成的操作数所标识的地址的数据值的加载操作、用于将具有由所生成的操作数所标识的地址的数据值存储到存储器的存储操作、诸如使用所生成的操作数的加、减或乘操作的算术操作、以及诸如使用所生成的操作数的与、或、与非或异或操作的逻辑操作中的至少一个。
替换地,第二指令及其代替第三指令可以简单地将所生成的操作数存储到它能够被另一指令访问所在的存储位置(例如寄存器)。因此,第二和第三指令没有必要执行其它操作以及操作数生成。能够在流水线的特定实施方式中视需要而定在第二流水线级或第三流水线级中处理在经修改的序列中代替第二指令的第三指令。
因为第三指令具有与第一和第二指令的第一和第二操作数生成操作的组合相同的效果,所以可以省略来自经修改的流的第一指令以及第二指令,以便第三指令代替预定指令序列的第一和第二指令两者。
然而,第二指令可能不是使用第一指令的结果的唯一指令。例如,相同的第一指令可以被其中每个都使用相同部分操作数生成的若干后续指令共享。例如,第一指令可以像上面所讨论的那样生成存储器中的特定页面的地址,并且然后与第二指令类似的若干指令可以访问相同页面内的不同地址。在这种情况下,即使不需要这个用于执行第三指令,也可能仍然需要完成第一指令。因此,经修改的指令流可以包括第一指令和第三指令两者,以便在经修改的流中仅第二指令被第三指令代替。流水线可以独立于第一指令的处理对第三指令的处理进行调度。能够在相同的周期内或者在连续处理周期内发出第一和第三指令,并且第一指令的结果是否将及时为第三指令做好准备是无关紧要的。
经修改的指令流为什么可以仍然包括第一指令的另一原因是在一些情况下第一指令可能已经被发出以供在遇到第二指令的时候执行。即使其结果对于代替第二指令的第三指令不是需要的,让第一指令完成执行也可能是更高效的。
为了确定第一指令是否应被保持在经修改的流内,第一流水线级可以确定指令流是否包括依赖于第一指令的第一操作数生成操作的结果的第四指令。如果存在使用第一指令的结果的第四指令,则能够保持第一指令,否则能够省略第一指令。
然而,第一流水线级无法访问整个指令流,或者也许不能肯定地确定是否存在使用第一指令的结果的后续指令。总是将第一指令包括在经修改的指令流中而不管是否存在将使用这个结果的后续指令可能是较简单的。这在硬件方面可能是更高效的。
替换地,虽然第一流水线级无法总是能够确定是否将存在使用第一指令的结果的后续指令,但是可能存在其中保证了不可能存在使用第一操作数生成操作的结果的后续指令的特定情形。例如,在指令流中紧跟第二指令之后的指令能够重写第一指令向其写入第一操作数生成操作的结果的寄存器。在这种情况下,不可能存在取决于第一操作数生成操作的结果的任何另外的指令将是已知的,并且在这种情况下第一指令能够被用第三指令代替。因此,第一流水线级可以确定后续指令是否可能依赖于第一操作数生成操作的结果,并且如果知道了不可能存在后续依赖指令,则第一指令和第二指令可以被用第三指令代替,然而如果后续指令可能是依赖的,则仅第二指令被代替。
第一和第二指令在原始的指令流中不需要与彼此相邻。第一流水线级可以检测在第一和第二指令之间包括一个或多个中间指令的指令序列作为预定指令序列。为了降低第一流水线级中用于检测这样的序列的硬件的复杂度,定义可以在第一和第二指令之间出现的中间指令的最大数目N以便这样的序列被检测到是有用的。在实践中,一旦已发生若干中间指令,则在第一和第二指令之间的依赖性(dependency)就变得不太可能,因为更可能的是,第一指令将在第二指令到达第二流水线级之前已完成。通过减少针对第一指令和第二指令的存在而被检查的序列中的连续指令的数目,能够降低这种检测的硬件开销。
一些流水线级可以将最大数目N设置为零,以便仅具有彼此相邻的第一和第二指令的预定指令序列被检测到。其它系统可以定义非零数目的中间指令。例如,如果N=2,则第一流水线级可以检查每一组四条连续指令以检测它们是否包含如上面所讨论的一对第一和第二指令。
执行预定指令序列的检测的第一流水线级可以是流水线的任何级。例如,第一流水线级可以是对指令进行解码的解码级并且经修改的指令流可以是解码的指令流,以便当第二指令被解码时,检查了它是否跟随最近的第一指令,并且如果是这样的话,则第二指令被用解码的第三指令代替。替换地,第一流水线级可以是发出级,该发出级控制指令被发出以由流水线处理的时序。第一流水线级可是与第二流水线级和第三流水线级中的一个相同的级。
分别执行第二和第一操作数生成操作的第二和第三流水线级可以位于相同的处理流水线内或不同的流水线内。并且第二和第三流水线级事实上可以是在特定流水线内的相同流水线级。
虽然能够在乱序处理器中使用本技术,但是它在有序处理器中是特别有用的。即使发生数据依赖性危害,乱序处理器也能够通过改变指令按照其被发出以供执行的顺序来确保转发进度。然而,这在有序处理器中是不可能的,在所述有序处理器中指令被按照它们原始的程序顺序发出。在有序处理流水线中,如果第一和第二指令被流水线以它们原始的形式处理并且在连续周期内发出,以及第一指令的结果将不可及时用于供在第二流水线级处的第二指令使用,则第二指令将不得不被延迟一个处理周期。由于处理器的有序性质,同时处理另一指令将不是可能的。因此,在流水线中将存在气泡,这降低处理性能。相比之下,采用本技术,数据依赖性通过用第三指令代替第二指令而被避免,因此对第三指令能够在其中被发出的周期没有约束。即使第一指令留在经修改的流中,第三指令也不依赖于第一指令,因此能够在相同的处理周期内或者在连续周期内发出这些指令。
从另一方面来看,本发明提供了一种处理器,其包括:
用于处理指令流的至少一个处理流水线装置,所述至少一个处理流水线装置包括用于处理指令的第一、第二和第三流水线级装置;其中:
第一流水线级装置被配置为检测指令流是否包括预定指令序列,所述预定指令序列包括用于在第三流水线级装置处执行第一操作数生成操作的第一指令和用于在第二流水线级装置处执行第二操作数生成操作的第二指令,其中第二操作数生成操作依赖于第一操作数生成操作的结果;以及
响应于检测到指令流包括所述预定指令序列,第一流水线级装置被配置为生成经修改的指令流以供由至少一个处理流水线装置处理,其中至少第二指令被用用于执行组合操作数生成操作的第三指令代替以便生成一操作数,其相当于如果第二操作数生成操作在第一操作数生成操作之后被执行则将被生成的操作数。
从另一个方面来看,本发明提供了一种用于包括被配置为处理指令流的至少一个处理流水线的处理器的数据处理方法,所述至少一个处理流水线包括第一流水线级、第二流水线级以及第三流水线级;所述方法包括:
在第一流水线级处检测指令流是否包括预定指令序列,所述预定指令序列包括用于在第三流水线级处执行第一操作数生成操作的第一指令和用于在第二流水线级处执行第二操作数生成操作的第二指令,其中第二操作数生成操作依赖于第一操作数生成操作的结果;以及
响应于检测到指令流包括所述预定指令序列,第一流水线级生成经修改的指令流以供由至少一个处理流水线处理,其中至少第二指令被用用于执行组合操作数生成操作的第三指令代替以便生成一操作数,其相当于如果第二操作数生成操作在第一操作数生成操作之后被执行则将被生成的操作数。
从另一方面来看,本发明提供了存储至少一个计算机程序的计算机可读存储媒体,所述至少一个计算机程序当在计算机上被执行时,控制计算机提供与上面所描述的处理器相对应的虚拟机环境。
从另一方面来看,本发明提供了存储至少一个计算机程序的计算机可读存储媒体,所述至少一个计算机程序当在计算机上被执行时,控制计算机提供用于执行上面所描述的方法的虚拟机环境。
这些计算机可读存储媒体可以是非暂时性的。虚拟机可以由至少一个计算机程序来实现,所述至少一个计算机程序当在计算机上被执行时,控制计算机表现得好像它是具有如上面所讨论的一个或多个流水线的处理器,以便即使计算机不具有与处理器相同的硬件和/或架构,在计算机上执行的指令也被执行好像它们在处理器上被执行。虚拟机环境允许本机系统通过运行与非本机代码被设计所针对的非本机系统相对应的虚拟机来执行非本机代码。因此,在虚拟机环境中虚拟机程序可以用如上面所讨论的第三指令代替至少第二指令。
附图说明
本发明的上述和其它目的、特征以及优点从将被连同附图一起阅读的说明性实施例的以下具体实施方式将是显而易见的,在附图中:
图1示出了处理流水线的示例;
图2A和2B分别示出了原始的指令流和经修改的指令流;
图3示出了第一地址生成操作;
图4示出了第二地址生成操作;
图5示出了具有与第一和第二地址生成操作的组合相同的结果的组合地址生成操作;
图6是示出了图2A的指令能够被执行的时序的时序图;
图7是示出了图2B的指令在准许指令的双重发出的系统中被执行的时序的时序图;
图8是示出了图2B的指令在每周期只能发出单个指令的系统中的被执行的时序的时序图;
图9示出了在流水线中处理指令的方法;
图10示出了其中存在两个处理流水线的示例;以及
图11示出了本技术的虚拟机实现方式。
具体实施方式
图1示出了具有处理流水线4的数据处理设备2的一部分的示例。流水线4具有:解码级6,其用于对从存储器取出的指令进行解码;发出级8,其用于发出指令以供由后续级处理;以及第一执行级10、第二执行级12和第三执行级14,其用于响应于执行的指令来执行各种操作。在这个示例中,在解码级6处的指令需要一个处理周期到达发出级8,并且分别需要两个、三个以及四个处理周期到达第一、第二以及第三执行级10、12、14。将了解的是,处理器2和流水线4可以包括未在图1中示出的其它级和元件。
在这个示例中第一执行级10具有用于从寄存器读取操作数值的寄存器读取电路16和用于生成地址的地址生成单元(AGU)18。第二执行级12包括用于执行算术操作(诸如加、减、乘以及除操作)和逻辑操作(诸如按位与、或、或异或操作)的算术逻辑单元(ALU)20。第二执行级12同样包括用于访问缓存和用于执行加载/存储操作的数据缓存存取电路22。AGU18是特殊的地址生成单元,其被提供来在流水线4的相对早期的流水线级处执行若干常见地址生成操作以便后续级能够使用该地址。例如,第二执行级12中的数据缓存存取电路22能够加载或者存储具有由第一执行级10中的AGU18所生成的地址的数据值。在流水线的早期级提供AGU18帮助降低存储器访问等待时间。其它电路可以位于第一和第二执行级10、12中以及位于第三执行级14和未在图1示出的后续流水线级中。
图2A示出了包括第一指令30和第二指令32的指令序列的示例。第一指令30是用于生成地址的第一部分的ADRP指令。图3示出了响应于ADRP指令30由第二执行级12中的ALU20执行的第一地址生成操作。ADRP指令30指定目的地寄存器x0和立即值(immediate value)#immhi。ADRP指令30同样使用存储在数据处理设备2的程序计数器寄存器中的程序计数器pc。程序计数器pc指示要被处理的指令(例如,当前指令或下一条指令)的地址。程序计数器在ADRP指令30的编码中未被显式地标识。如图3所示,响应于ADRP指令30,ALU20使用与操作将程序计数器值40与掩码42相组合以生成具有与程序计数器寄存器的对应部分相同的上部46和具有比特位值0的下部48的掩蔽的程序计数器值44。掩码42被预先确定,从而使得:程序计数器的上部46对应于存储器页面的页面地址,而下部48对应于该页面内的偏移,该存储器页面包括要被处理的指令的地址。ALU20然后将经掩蔽的程序计数器值44加到立即值#immhi,其通过执行移位操作而与程序计数器的上部46对齐。经掩蔽的程序计数器值44和经移位的立即值50的和被存储到寄存器x0,并且表示存储器地址空间的另一页面的页面地址52。视需要第一操作数生成操作在另一实施例中能够由AGU18代替ALU20来执行。
图2A的第二指令32是用于将当前存储在寄存器中的数据值存储到存储器内的位置的存储指令STR。存储指令32指定存储要被存储到存储器的数据值的源寄存器w1、存储操作数的第二寄存器x0以及要被加到存储在寄存器x0中的操作数的立即值#immlo以获得数据值的全地址。寄存器x0与ADRP指令30的目的地寄存器x0相同,因此存储指令32依赖于ADRP指令30。图4示出了由AGU18响应于存储指令32所执行的第二地址生成操作。紧跟ADRP30指令的执行之后,源寄存器x0包含由第一地址生成操作所生成的页面地址52。响应于存储指令32,AGU18将立即值#immlo54加到页面地址52以产生包括页面地址52和由立即值#immlo所表示的页面偏移54两者的全地址56。全地址56被数据缓存存取电路22用于后续存储操作。
因为存储指令32的第二地址生成操作需要ADRP指令30的结果,所以处理这些指令对它们能够被调度时的时序构成约束。图3的第一地址生成操作在ALU20处被执行,因此这个结果直到ADRP指令到达第二执行级12为止才可用。虽然在图1的流水线中存在可用的潜在转发路径60,但是这些能够将第一地址生成的结果返回给AGU18直到下一个周期为止是不可能的,因此存储指令32直到紧跟在ALU20中完成第一地址生成之后的周期为止才能够被AGU18处理。如图6所示,这意味着将需要在ADRP指令30之后两个周期发出存储指令32以给予足够时间以便ADRP指令的结果被转发到第一执行级10以供在处理该存储指令时使用。因此,气泡65可能在流水线中发生(在处理周期2中没有正被第一执行级处理的指令)。在有序处理器中,这种气泡不能够通过在存储指令32之前发出另一指令来填充。因此,在给定时段内能够处理较少的指令,因此降低了性能。
为了解决这个问题,解码级6可以检查所接收到的指令流以检测图2A中所示出的类型的序列,其中用于执行第二操作数生成操作的第二指令32取决于用于执行第一操作数生成操作的第一指令30。第一和第二指令30、32不需要是连续的,并且在第一指令30与第二指令32之间可以存在多一个中间指令。当检测到这种类型的序列时,解码级6用图2B中所示出的经修改的指令序列代替它,其中至少第二指令被用执行组合地址生成操作的经修改的存储指令STR*70(“第三指令”)代替。组合地址生成操作由AGU18来执行以便存储操作能够被数据缓存存取电路22在下一个周期内执行。
如图5所示,响应于第三指令而执行的组合地址生成操作将程序计数器40与掩码42相组合并且然后将经掩蔽的程序计数器值44加到其中上部立即值#immhi和下部立即值#immlo被串级的组合立即值72。经掩蔽的程序计数器值44和组合立即值72的和产生包括页面地址52和页面偏移54两者的全地址56,其与图4中所示出的第二地址生成的结果相同。因此,组合地址生成操作具有与如果第一和第二地址生成操作已被依次执行则将会发生相同的结果。用于执行组合地址生成的经修改的存储指令70不再取决于ADRP指令30,因此能够被调度成在相同的周期内或在连续周期内被执行。如图7所示,在其中可以每周期发出多条指令的系统中,能够在相同的周期内发出ADRP指令30和经修改的存储指令70以提高处理性能。
替换地,如果流水线每周期仅能够发出一条指令,则能够像图8中所示出的那样在连续周期内发出ADRP和经修改的存储指令30、70,这将仍然允许存储指令70比在图6中早一个周期被处理。
虽然ADRP指令30对于针对经修改的存储指令70生成正确结果来说不再是必要的,但是可以存在需要由ADRP指令30放入寄存器x0的值的后续指令,因此可能仍然有必要执行ADRP指令30。如果知道了不可能存在使用x0中的值的任何另外的指令,例如如果后续指令重写x0中的值,则ADRP指令30还能够被用经修改的存储指令70代替。
使用地址生成指令30的结果的指令32不必是存储指令,并且还可能是加载指令或由ALU20使用由第一指令30所生成的值所执行的算术或逻辑指令。由这些指令所生成的操作数可以是任何操作数而不只是地址。可以在流水线的任何级中执行组合操作,所以像上面所讨论的那样使用第一执行级10中的AGU18来执行这个操作不是必要的。并且,在一些实施方式中第一执行级10可以与发出级8组合在单个流水线级中,以便能够在相同的处理周期内执行在AGU18中的指令发出、寄存器读取以及地址生成。
在上面所讨论的示例中,解码级6检测预定指令序列并且用经修改的指令流代替它,但其还能够在发出级8处执行。例如,解码级6或发出级8可以具有带特定数目N个条目的FIFO(先进先出)缓冲器,并且由该级6、8所接收到的每条指令都可以被写入FIFO缓冲器,其中来自缓冲器的最旧指令被驱逐以为新的指令让路。在每个处理周期内,如果FIFO缓冲器包括第一指令30和第二指令32两者则解码级6或发出级8可以检测预定序列,所述第二指令依赖于第一指令30并且对其来说如果这些指令被以它们原始的形式处理则预期第一指令30不会及时为第二指令32产出其结果。FIFO缓冲器中条目的数目J确定能够在作为预定序列检测到的第一和第二指令之间发生的中间指令的最大数目(N=J-2)。
图9示出了在流水线中处理指令的方法。在步骤100处,第一流水线级(例如,解码级6或发出级8)检测要被处理的指令流是否包括预定指令序列,所述预定指令序列包括用于执行第一操作数生成的第一指令和用于执行依赖于第一操作数生成的第二操作数生成的第二指令。如果操作数生成使用程序计数器的一部分,则步骤100还可以检查第一和第二指令是否对于程序计数器的有关部分具有相同的值,不然的话可以不检测预定指令序列。如果预定指令序列未被检测到,则不进行指令代替并且原始的指令被流水线处理。方法然后返回到步骤100以进行后续处理周期。
如果预定指令序列被检测到,则在步骤102处确定了第一指令是已经被发出,还是存在,或者可能存在除使用第一指令的结果的第二指令以外的后续指令。如果第一指令已经被发出,则允许指令完成将更加有效,即使其结果不是任何其它指令所需要的。因此,在步骤104处,仅第二指令被提供了相当于依次执行第一和第二操作数生成操作的组合操作数生成操作的经修改的第三指令代替。并且,如果存在或者可能存在除依赖于第一指令的结果的第二指令以外的后续指令,则第一指令应该留在经修改的流中,因此再一次在步骤104处仅第二指令被用第三指令代替。另一方面,如果第一指令仍然尚未被发出,并且不可能存在使用第一操作数生成的结果的后续指令,则在步骤106处,第一和第二指令两者都被用组合指令代替。在可以代替第一和第二指令两者的情况下,则这是有用的,因为消除第一指令释放能够被用于处理另一指令的流水线中的插槽。然而,在实践中,用于检测这种可能性的硬件是复杂的并且总是选取步骤104以便仅第二指令被第三指令代替以及第一指令留在经修改的指令流中是更有效的。方法然后返回到步骤100以进行以下的处理周期。
虽然图1示出了具有通过它的多个处理路径的单个处理流水线,但是如图10所示提供多个执行流水线120、130也是可能的。提供了被流水线120、130两者所共享的公共解码级6和公共发出级8。发出级8取决于在每个流水线中可用的功能性、指令的类型和/或每个流水线120、130的当前处理工作负荷来确定要将指令发出到哪一个流水线120、130。如图10所示,包括ALU20和AGU18的流水线级可以是在不同的流水线120、130内,但在由这些级所处理的指令之间仍然可能发生数据依赖性问题。因此,在这个实施例中用第三指令70代替第二指令32同样提供性能改进。
图11示出了可以被使用的虚拟机实施方式。虽然较早地描述的实施例在用于操作支持所涉及技术的特定处理硬件的设备和方法方面实现本发明,但是同样可以提供硬件装置的所谓的虚拟机实施方式。这些虚拟机实施方式在典型地运行支持虚拟机程序204的主机操作系统202的主机处理器200上运行。典型地,需要强大的处理器来提供以合理的速度执行的虚拟机实施方式,但这样的方法在特定情况下可能是正当的,诸如当由于兼容性或重用原因期望运行另一处理器本地的代码时。虚拟机程序204能够执行应用程序(或操作系统)206以给出与将由程序通过真实硬件装置的执行所给出的相同结果。因此,可以使用虚拟机程序204从应用程序206内执行上面所描述的程序指令以复制(一个或多个)真实流水线4或120、130的处理。
虽然已经参考附图在本文中详细地描述了本发明的说明性实施例,但是应当理解的是,本发明不限于那些精确的实施例,并且在不背离如由所附权利要求所限定的本发明的范围和精神的情况下,本领域的技术人员能够在其中实现各种改变和修改。

Claims (35)

1.一种处理器,包括:
被配置为对指令流进行处理的至少一个处理流水线,所述至少一个处理流水线包括第一流水线级、第二流水线级以及第三流水线级;其中:
所述第一流水线级被配置为检测所述指令流是否包括预定指令序列,所述预定指令序列包括用于在所述第三流水线级处执行第一操作数生成操作的第一指令和用于在所述第二流水线级处执行第二操作数生成操作的第二指令,其中所述第二操作数生成操作依赖于所述第一操作数生成操作的结果;并且
响应于检测到所述指令流包括所述预定指令序列,所述第一流水线级被配置为生成经修改的指令流以供由所述至少一个处理流水线处理,在经修改的指令流中,至少所述第二指令被用于执行组合操作数生成操作的第三指令代替以便生成某一操作数,该操作数等于如果所述第二操作数生成操作在所述第一操作数生成操作之后被执行则将被生成的操作数。
2.根据权利要求1所述的处理器,其中所述第一流水线级处的指令需要X个处理周期来到达所述第二流水线级并且需要Y个处理周期来到达所述第三流水线级,其中Y和X是整数并且Y≥X。
3.根据权利要求1和2中任一项所述的处理器,其中所述组合操作数生成操作独立于所述第一操作数生成操作的结果。
4.根据权利要求1至3中任一项所述的处理器,其中所述操作数包括地址。
5.根据任一前述权利要求所述的处理器,其中所述第一操作数生成操作用于生成所述操作数的第一部分,所述第二操作数生成操作用于生成包括所述第一部分和第二部分的操作数,并且所述组合操作数生成操作用于生成包括所述第一部分和所述第二部分的操作数。
6.根据权利要求5所述的处理器,其中所述操作数包括比在所述指令流的单个指令的指令编码中能够被编码的比特位更多数目的比特位。
7.根据权利要求5和6中任一项所述的处理器,其中所述第一操作数生成操作包括:通过将偏移值添加到存储在存储位置中的基值的至少一部分来生成所述操作数的第一部分。
8.根据权利要求7所述的处理器,其中所述操作数包括地址,并且所述基值包括指示要被处理的指令的地址的程序计数器。
9.根据权利要求8所述的处理器,其中所述第一流水线级被配置为:将其中所述第一指令和所述第二指令对于所述程序计数器的所述至少一部分具有相同值的指令序列检测为所述预定指令序列。
10.根据权利要求8和9中任一项所述的处理器,其中所述基值的至少一部分包括所述基值的最高有效部分。
11.根据权利要求10所述的处理器,其中所述第一操作数生成操作包括掩蔽所述基值的最低有效部分。
12.根据权利要求10和11中任一项所述的处理器,其中所述第二操作数生成操作包括将立即值加到所述第一操作数生成操作的结果的最低有效部分。
13.根据任一前述权利要求所述的处理器,其中所述第二指令用于使用由所述第二操作数生成操作所生成的操作数来执行处理操作,以及
所述第三指令用于使用由所述组合操作数生成操作所生成的操作数来执行所述处理操作。
14.根据权利要求13所述的处理器,其中所述处理操作包括以下各项中的至少一项:
加载操作;
存储操作;
算术操作;以及
逻辑操作。
15.根据任一前述权利要求所述的处理器,其中所述经修改的指令流包括所述第一指令和所述第三指令。
16.根据权利要求15所述的处理器,其中所述至少一个处理流水线被配置为独立于所述第一指令的处理对所述第三指令的处理进行调度。
17.根据权利要求1至14中任一项所述的处理器,其中所述经修改的指令流包括所述第三指令并且不包括所述第一指令。
18.根据任一前述权利要求所述的处理器,其中所述第一流水线级被配置为确定所述指令流是否包括依赖于所述第一指令的第一操作数生成操作的结果的第四指令;
如果所述指令流包括所述第四指令,则所述第一处理级被配置为用所述第三指令代替所述第二指令以生成包括所述第一指令、所述第三指令以及所述第四指令的经修改的指令流;以及
如果所述指令流不包括所述第四指令,则所述第一处理级被配置为用所述第三指令代替所述第一指令和所述第二指令以生成包括所述第三指令而不包括所述第一指令的经修改的指令流。
19.根据权利要求1至17中任一项所述的处理器,其中所述第一流水线级被配置为确定所述指令流的后续指令是否可能依赖于所述第一指令的第一操作数生成操作的结果;
如果后续指令可能依赖于所述第一操作数生成操作的结果,则所述第一处理级被配置为用所述第三指令代替所述第二指令以生成包括所述第一指令和所述第三指令的经修改的指令流;以及
如果没有后续指令可能依赖于所述第一操作数生成操作的结果,则所述第一处理级被配置为用所述第三指令代替所述第一指令和所述第二指令以生成包括所述第三指令而不包括所述第一指令的经修改的指令流。
20.根据任一前述权利要求所述的处理器,其中所述第一流水线级被配置为检测在所述第一指令与所述第二指令之间包括最大N个中间指令的指令序列作为所述预定指令序列,其中N是整数并且N≥0。
21.根据权利要求20所述的处理器,其中N>0。
22.根据任一前述权利要求所述的处理器,其中所述第一流水线级包括被配置为对要被所述至少一个处理流水线处理的指令进行解码的解码级,并且所述经修改的指令流包括经解码的指令流。
23.根据权利要求1至21中任一项所述的处理器,其中所述第一流水线级包括被配置为发出指令以供由所述至少一个处理流水线处理的发出级。
24.根据任一前述权利要求所述的处理器,其中所述第二流水线级和所述第三流水线级是同一处理流水线的相应级。
25.根据任一前述权利要求所述的处理器,其中所述第二流水线级和所述第三流水线级是相同的流水线级。
26.根据权利要求1至23中任一项所述的处理器,其中所述第二流水线级和所述第三流水线级是不同处理流水线的级。
27.根据任一前述权利要求所述的处理器,其中所述处理器是有序处理器。
28.根据权利要求27所述的处理器,其中所述指令流具有预定的程序次序;并且
所述至少一个处理流水线包括被配置为发出以与所述预定的程序次序相同的次序进行处理的指令的发出级。
29.一种处理器,其包括:
用于处理指令流的至少一个处理流水线装置,所述至少一个处理流水线装置包括用于处理指令的第一流水线级装置、第二流水线级装置以及第三流水线级装置;其中:
所述第一流水线级装置被配置为检测所述指令流是否包括预定指令序列,所述预定指令序列包括用于在所述第三流水线级装置处执行第一操作数生成操作的第一指令和用于在所述第二流水线级装置处执行第二操作数生成操作的第二指令,其中所述第二操作数生成操作依赖于所述第一操作数生成操作的结果;并且
响应于检测到所述指令流包括所述预定指令序列,所述第一流水线级装置被配置为生成经修改的指令流以供由所述至少一个处理流水线装置处理,在经修改的指令流中,至少所述第二指令被用于执行组合操作数生成操作的第三指令代替以便生成某一操作数,该操作数等于如果所述第二操作数生成操作在所述第一操作数生成操作之后被执行时将被生成的操作数。
30.一种用于处理器的数据处理方法,该处理器包括被配置为对指令流进行处理的至少一个处理流水线,所述至少一个处理流水线包括第一流水线级、第二流水线级、和第三流水线级;所述方法包括:
在所述第一流水线级处,检测所述指令流是否包括预定指令序列,所述预定指令序列包括用于在所述第三流水线级处执行第一操作数生成操作的第一指令和用于在所述第二流水线级处执行第二操作数生成操作的第二指令,其中所述第二操作数生成操作依赖于所述第一操作数生成操作的结果;以及
响应于检测到所述指令流包括所述预定指令序列,所述第一流水线级生成经修改的指令流以供由所述至少一个处理流水线处理,其中至少所述第二指令被用于执行组合操作数生成操作的第三指令代替以便生成某操作数,该某操作数等于如果所述第二操作数生成操作在所述第一操作数生成操作之后被执行则将被生成的所述操作数。
31.一种存储至少一个计算机程序的计算机可读存储介质,所述至少一个计算机程序当在计算机上被执行时,控制所述计算机提供与与权利要求1至29中任一项所述的处理器相对应的虚拟机环境。
32.一种存储至少一个计算机程序的计算机可读存储介质,所述至少一个计算机程序当在计算机上被执行时,控制所述计算机提供用于执行权利要求30所述的方法的虚拟机环境。
33.一种在本文中基本参考附图所描述的处理器。
34.一种在本文中基本参考附图所描述的数据处理方法。
35.一种在本文中基本参考附图所描述的计算机可读存储介质。
CN201410256267.7A 2013-06-10 2014-06-10 至少一个处理流水线中的操作数生成 Pending CN104239001A (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1310271.0 2013-06-10
GB1310271.0A GB2515020A (en) 2013-06-10 2013-06-10 Operand generation in at least one processing pipeline

Publications (1)

Publication Number Publication Date
CN104239001A true CN104239001A (zh) 2014-12-24

Family

ID=48876000

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410256267.7A Pending CN104239001A (zh) 2013-06-10 2014-06-10 至少一个处理流水线中的操作数生成

Country Status (4)

Country Link
US (1) US20140365751A1 (zh)
JP (1) JP2014238832A (zh)
CN (1) CN104239001A (zh)
GB (1) GB2515020A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023024992A1 (en) * 2021-08-24 2023-03-02 International Business Machines Corporation Dependency skipping execution

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10061580B2 (en) * 2016-02-25 2018-08-28 International Business Machines Corporation Implementing a received add program counter immediate shift (ADDPCIS) instruction using a micro-coded or cracked sequence

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5634118A (en) * 1995-04-10 1997-05-27 Exponential Technology, Inc. Splitting a floating-point stack-exchange instruction for merging into surrounding instructions by operand translation
US6301651B1 (en) * 1998-12-29 2001-10-09 Industrial Technology Research Institute Method and apparatus for folding a plurality of instructions
US20040054874A1 (en) * 2002-09-17 2004-03-18 Takehiro Shimizu Data processing device with a spare field in the instruction
US20130086368A1 (en) * 2011-10-03 2013-04-04 International Business Machines Corporation Using Register Last Use Infomation to Perform Decode-Time Computer Instruction Optimization

Family Cites Families (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4439828A (en) * 1981-07-27 1984-03-27 International Business Machines Corp. Instruction substitution mechanism in an instruction handling unit of a data processing system
US5913047A (en) * 1997-10-29 1999-06-15 Advanced Micro Devices, Inc. Pairing floating point exchange instruction with another floating point instruction to reduce dispatch latency
US6237087B1 (en) * 1998-09-30 2001-05-22 Intel Corporation Method and apparatus for speeding sequential access of a set-associative cache
US20030046516A1 (en) * 1999-01-27 2003-03-06 Cho Kyung Youn Method and apparatus for extending instructions with extension data of an extension register
US7376817B2 (en) * 2005-08-10 2008-05-20 P.A. Semi, Inc. Partial load/store forward prediction
JP2008204249A (ja) * 2007-02-21 2008-09-04 Renesas Technology Corp データプロセッサ
US7966474B2 (en) * 2008-02-25 2011-06-21 International Business Machines Corporation System, method and computer program product for translating storage elements

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5634118A (en) * 1995-04-10 1997-05-27 Exponential Technology, Inc. Splitting a floating-point stack-exchange instruction for merging into surrounding instructions by operand translation
US6301651B1 (en) * 1998-12-29 2001-10-09 Industrial Technology Research Institute Method and apparatus for folding a plurality of instructions
US20040054874A1 (en) * 2002-09-17 2004-03-18 Takehiro Shimizu Data processing device with a spare field in the instruction
US20130086368A1 (en) * 2011-10-03 2013-04-04 International Business Machines Corporation Using Register Last Use Infomation to Perform Decode-Time Computer Instruction Optimization

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023024992A1 (en) * 2021-08-24 2023-03-02 International Business Machines Corporation Dependency skipping execution
US11663013B2 (en) 2021-08-24 2023-05-30 International Business Machines Corporation Dependency skipping execution
GB2624607A (en) * 2021-08-24 2024-05-22 Ibm Dependency skipping execution

Also Published As

Publication number Publication date
JP2014238832A (ja) 2014-12-18
GB2515020A (en) 2014-12-17
US20140365751A1 (en) 2014-12-11
GB201310271D0 (en) 2013-07-24

Similar Documents

Publication Publication Date Title
TWI681333B (zh) 可靠度提升系統、方法和電腦可讀取媒體
CN103383640B (zh) 提高向量分解循环的性能
CN108139907B (zh) 向量数据传送指令
KR102379894B1 (ko) 벡터 연산들 수행시의 어드레스 충돌 관리 장치 및 방법
US8826257B2 (en) Memory disambiguation hardware to support software binary translation
TWI740851B (zh) 用於向量負載指示之資料處理設備、方法及電腦程式
US20070226723A1 (en) Efficient generation of SIMD code in presence of multi-threading and other false sharing conditions and in machines having memory protection support
JP2011118743A (ja) ベクトル型計算機及びベクトル型計算機の命令制御方法
CN104899181A (zh) 用于处理向量操作数的数据处理装置和方法
CN103988174A (zh) 无需额外寄存器执行寄存器重命名的数据处理设备和方法
US8601242B2 (en) Adaptive optimized compare-exchange operation
US9311094B2 (en) Predicting a pattern in addresses for a memory-accessing instruction when processing vector instructions
KR101016257B1 (ko) 프로세서 및 정보 처리 장치
CN116860334A (zh) 用于计算两个区块操作数中的半字节的数量积的系统和方法
CN103336681B (zh) 针对采用变长指令集的流水线结构处理器的取指方法
US8683178B2 (en) Sharing a fault-status register when processing vector instructions
KR20150035161A (ko) 그래픽 처리 장치 및 이의 동작 방법
CN104239001A (zh) 至少一个处理流水线中的操作数生成
EP1220088B1 (en) Circuit and method for supporting misaligned accesses in the presence of speculative load instructions
US6079011A (en) Apparatus for executing a load instruction or exchange instruction in parallel with other instructions in a dual pipelined processor
CN111656319B (zh) 利用特定数检测的多流水线架构
CN111742296B (zh) 用于数据处理的装置、方法和计算机可读存储介质
CN104166633B (zh) 用于存储器访问保护的方法和系统
US8700887B2 (en) Register, processor, and method of controlling a processor using data type information
CN101216757A (zh) 一种risc处理器及其数据访存方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
WD01 Invention patent application deemed withdrawn after publication

Application publication date: 20141224

WD01 Invention patent application deemed withdrawn after publication