循环缓冲器学习的制作方法

文档序号:6504191阅读:75来源:国知局
循环缓冲器学习的制作方法
【专利摘要】本发明涉及循环缓冲器学习,具体公开了跟踪指令流内的候选循环的方法、设备和处理器。循环缓冲器控制单元检测向后跳转分支,并开始跟踪候选循环。该控制单元跟踪候选循环的跳转分支,并跟踪从循环的起点到每个跳转分支的距离。如果在循环的多次迭代期间,到每个跳转分支的距离保持不变,那么该循环被保存在循环缓冲器中。随后从循环缓冲器分派该循环,处理器的前端被关闭直到所述循环终止为止。
【专利说明】循环缓冲器学习
【技术领域】
[0001]本发明一般涉及处理器,尤其涉及识别和学习指令流内的循环的特性的方法和机构。
【背景技术】
[0002]现代的处理器通常是以流水线方式多级地构成的。典型的流水线通常包括用于提取指令、解码指令、映射指令、执行指令、随后把结果写入另一个单元(比如寄存器)的独立单元。微处理器的取指令单元负责向处理器流水线的下一级提供持续的指令流。典型地,取指令单元利用指令高速缓存使流水线的剩余部分被连续供给指令。在完成其所需功能的时候,取指令单元和指令高速缓存趋于消耗相当大量的功率。现代微处理器的目标是尽可能多地减少功率消耗,尤其是对用在电池供电设备中的微处理器来说更是如此。
[0003]在许多软件应用中,为了进行特定功能或任务,相同的软件步骤可能被重复多次。在这些情况下,即使相同的指令循环正在继续执行,取指令单元也会提取指令从而消耗功率。如果可以检测所述循环并将其高速缓存在循环缓冲器中,那么在执行循环的同时,取指令单元可被关闭从而减少功率消耗。然而,当循环包括多个分支时,难以检测和学习程序代码内的指令循环。在把循环高速缓存在循环缓冲器中之前,准确地判定循环是否无变化也是富有挑战性的。

【发明内容】

[0004]公开检测和跟踪指令流内的循环的设备、处理器和方法。处理器流水线可包括循环缓冲器和循环缓冲器控制单元。循环缓冲器控制单元可检测指令流中的循环终止分支。在一个实施例中,当循环缓冲器控制单元检测到循环终止分支时,控制单元可锁存循环终止分支的指令地址,可设置循环检测标记,并可启动循环迭代计数器和微操作计数器。
[0005]下次检测到相同的循环终止分支时,控制单元可比较微操作计数器的值和循环缓冲器的大小。如果微操作计数器的值大于循环缓冲器的大小,那么该候选循环不能被保存在循环缓冲器中,从而将终止循环跟踪。如果微操作计数器小于循环缓冲器的大小,那么可在该循环的多次迭代期间跟踪该循环的内容。对循环的每次迭代来说,如果在迭代期间循环的内容保持不变,那么循环迭代计数器可递增并可继续循环跟踪。
[0006]在一个实施例中,可在循环的每次迭代期间跟踪循环的跳转分支。在循环的第一次迭代期间,从循环的起点到各个跳转分支的距离可被保存在分支跟踪表中,在循环的后续迭代期间,可以比较当检测到分支时微操作计数器的值和保存在分支跟踪表中的对应值。如果从循环的起点到循环的各个分支的距离无变化,那么可继续循环跟踪。当循环迭代计数器的值超过预定阈值时,那么该循环可被高速缓存在循环缓冲器中。可从循环缓冲器读取循环并关闭取指令单元,直到该循环终止为止。
[0007]鉴于这里介绍的方法的以下详细说明,对本领域的普通技术人员来说,这些和其它特征和优点将变得明显。【专利附图】

【附图说明】
[0008]结合附图参考以下说明,可更好地理解方法和机构的上述优点以及另外的优点, 在附图中:
[0009]图1图解说明集成电路的一部分的一个实施例。
[0010]图2是图解说明处理器核心的一个实施例的方框图。
[0011]图3是图解说明处理器流水线的前端的一个实施例的方框图。
[0012]图4图解说明取指令和解码单元内的循环缓冲器的另一个实施例的方框图。
[0013]图5是样本循环的一个实施例。
[0014]图6图解说明循环缓冲器控制单元的一个实施例。
[0015]图7是图解说明跟踪候选循环的方法的一个实施例的概括流程图。
[0016]图8是系统的一个实施例的方框图。
[0017]图9是计算机可读介质的一个实施例的方框图。
【具体实施方式】
[0018]在下面的说明中,记载了众多的具体细节以充分理解这里提供的方法和机构。然而,本领域的普通技术人员应认识到可在没有这些具体细节的情况下实践各种实施例。在一些情况下,未详细示出公知的结构、组件、信号、计算机程序指令和技术以避免模糊这里说 明的方法。应理解,为了例示的简单和清楚起见,附图中所示的元件不一定是按比例绘制的。例如,可相对于其它元件夸大一些元件的尺寸。
[0019]本说明书包括对“一个实施例”的引用。出现在不同上下文中的短语“在一个实施例中”不一定指的是相同实施例。可按照与本公开一致的任何适当方式组合特定的特征、结构或特性。此外,如在本申请内使用的,词语“可以”是允许性使用的(即,意味有可能),而不是强制性的(即,意味必须)。类似地,用语“包括”意味包含但不限于。
[0020]术语:下面的段落提供存在于本公开(包括附加的权利要求书)中的各个术语的定义和/或上下文:
[0021]“包含”:该术语是开放的。与在附加的权利要求中使用的一样,该术语不排除另外的结构或步骤。考虑记载了“一种包含循环缓冲器控制单元…的处理器”的权利要求。这样的权利要求并不排除所述处理器包括另外的组件(例如,高速缓存、取指令单元、执行单元)。
[0022]“被配置成”:各个单元、电路或其它组件可被描述或主张成“被配置成”进行一项或多项任务。在这样的上下文中,“被配置成”用于通过指出所述单元/电路/组件包括在操作期间进行所述一项或多项任务的结构(例如,电路)而意指结构。因而,即使当指定的单元/电路/组件当前未工作(例如,未开启),所述单元/电路/组件也可被写成被配置成进行所述任务。和语句“被配置成”一起使用的单元/电路/组件包括硬件,例如,电路、 保存可执行以实现所述操作的程序指令的存储器等等。记载某个单元/电路/组件“被配置成”进行一项或多项任务并不意图对于该单元/电路/组件明确地援引35U.S.C.§ 112, 第6段。另外,“被配置成”可包括利用软件和/或固件(例如,FPGA或者通用处理器执行软件)操纵、从而按照能够进行所关注的任务的方式工作的通用结构(例如,通用电路)。“被配置成”还可包括:使制造工艺(例如,半导体制备设施)适用于制备适合于实现或进行一种或多种任务的器件(例如,集成电路)。
[0023]“根据”:这里使用的该术语用于描述影响判定的一个或多个因素。该术语并不排除可能影响判定的其它因素。即,判定可以仅仅基于这些因素,或者至少部分基于这些因素。考虑短语“根据B判定A”。虽然B是影响A的判定的一个因素,不过这样的短语并不排除A的判定还基于C。在其它情况下,可以仅仅根据B判定A。
[0024]现在参见图1,图中表示了图解说明集成电路(IC)的一部分的一个实施例的方框图。在所示的实施例中,ICio包括处理器复合体12、存储控制器22和存储器物理接口电路(PHY)24和26。注意IClO还可包括图1中未示出的许多其它组件。在各个实施例中,IClO也可被称为片上系统(Soc)、专用集成电路(ASIC)或设备。
[0025]处理器复合体12可包括中央处理器(CPU) 14和16,层2(L2)高速缓存18和总线接口单元(BIU)20。在其它实施例中,处理器复合体12可包括其它数目的CPU。CPU14和16也可被称为处理器或核心(core)。注意,处理器复合体12可包括图1中未示出的其它组件。
[0026]CPU14和16可包括执行在指令集架构中定义的指令的电路。具体地,包含所述指令的一个或多个程序可由CPU14和16执行。在各个实施例中,可以实现任意指令集架构。例如,在一个实施例中,可以实现ARM?指令集架构(ISA)。ARM指令集可包括16位指令(或Thumb)和32位指令。其它示例ISA可包括PowerPC?指令集、MIPS?指令集、SPARC?指令集、x86指令集(也称为IA-32)、IA-64指令集等。
[0027]在一个实施例中,利用CPU14和16执行的每个指令可与一个PC值相关联。另外,在一些指令内可以指定一个或多个结构寄存器以便读取和写入。这些结构寄存器可被寄存器重命名单元映射到实际物理寄存器。此外,一些指令(例如,ARM Thumb指令)可被分成指令操作(或者微操作)的序列,并且可用唯一微操作(或者uop)编号引用所述序列的每个指令操作。
[0028]每个CPU14和16还可包括层I (LI)高速缓存(未示出),每个LI高速缓存可耦接到L2高速缓存18。其它实施例可包括其它层的高速缓存(例如,层3(L3)高速缓存)。在一个实施例中,L2高速缓存18可被配置成高速缓存指令和数据,以便由CPU14和16进行低延时访问。L2高速缓存18可包含任何容量和配置(例如,直接映射,组相联)。L2高速缓存18可通过BIU20耦接到存储控制器22。BIU20还可包括各种其它逻辑结构,以把CPU14和16以及L2高速缓存18耦接到各种其它装置和块。
[0029]存储控制器22可包括许多存储器端口,并且可包括配置成与存储器接口连接的电路。例如,存储控制器22可被配置成接口连接至动态随机存取存储器(DRAM),比如同步DRAM (SDRAM)、双倍数据速率(DDR) SDRAM、DDR2SDRAM、Rambus DRAM (RDRAM)等。存储控制器22还可耦接到存储器物理接口电路(PHY) 24和26。存储器PHY24和26代表可以耦接到存储控制器22的任意数目的存储器PHY。存储器PHY24和26可被配置成接口连接至存储器件(未示出)。
[0030]注意其它实施例可包括组件的其它组合,包括图1中所示的组件和/或其它组件的子集或超集。虽然图1中表示了给定组件的一个实例,不过其它实施例可包括所述给定组件的两个或者更多的实例。类似地,在本详细说明中,即使仅仅示出了一个实例,也可包括给定组件的两个或者更多的实例,和/或即使示出了多个实例,也可使用只包括一个实例的实施例。
[0031]现在参见图2,图中示出了处理器核心的一个实施例。核心30是处理器核心的一个例子,核心30可以用在处理器复合体,比如图1的处理器复合体12内。在一个实施例中,图1的CPU14和16都包括核心30的组件和功能。核心30可包括取指令和解码(FED)单元32、映射和分派单元36、存储器管理单元(MMU) 40、核心接口单元(CIF) 42、执行单元44和装载-存储单元(LSU) 46。注意,核心30可包括图2中未示出的其它组件和接口。
[0032]FED单元32可包括配置成从存储器读取指令、并把所述指令放入层I (LI)指令高速缓存34中的电路。LI指令高速缓存34可以是保存将由核心30执行的指令的高速缓冲存储器。LI指令高速缓存34可具有任意容量和构造(例如,直接映射、组相联、全相联等)。此外,LI指令高速缓存34可以具有任意的高速缓存行大小。FED单元32还可包括分支预测硬件,所述分支预测硬件被配置成预测分支指令,并沿预测路径向下取指令。FED单元32也可被重定向(例如,通过预测错误、例外、中断、冲洗等)。
[0033]FED单元32可被配置成把指令解码成指令操作。另外,FED单元32还可被配置成并行地解码多个指令。通常,指令操作可以是包含在执行单元44和LSU46中的硬件能够执行的操作。每个指令可转化成一个或多个指令操作,当被执行时,所述指令操作导致按照指令集架构为该指令定义的操作的执行。注意在本公开中,可以互换地使用术语“指令操作”和“微操作”。在其它实施例中,包含在FED单元32内的功能可被分成两个或者更多的独立单元,比如取指令单元、解码单元和/或其它单元。
[0034]在各个ISA中,一些指令可被解码成单个微操作(uop)。FED单元32可被配置成识别指令的类型、源操作数等,每个解码的指令操作可包含所述指令以及一些解码信息。在其中每条指令转换成单个微操作的其它实施例中,每个微操作可以仅仅是对应指令或其一部分(例如,所述指令的一个或多个操作码字段)。在一些实施例中,FED单元32可包括用于为指令生成微操作的电路和/或微代码的任意组合。例如,较简单的微操作生成(例如,每条指令I个或2个微操作)可用硬件处理,而更大量的微操作生成(例如,每条指令不止3个微操作)可用微代码处理。
[0035]解码的微操作可被提供给映射/分派单元36。映射/分派单元36可被配置成把微操作和架构寄存器映射到核心30的物理寄存器。映射/分派单元36可实现寄存器重命名,以把源寄存器地址从微操作映射到识别重命名的源寄存器的操作数编号。映射/分派单元36还可被配置成把微操作分派给在执行单元44和LSU46内的保留站(未示出)。
[0036]在一个实施例中,映射/分派单元36可包括重排序缓冲器(ROB) 38。在其它实施例中,R0B38可以位于别处。在被分派之前,微操作可被写入R0B38中。R0B38可被配置成保持微操作,直到它们被顺序提交为止。每个微操作可被赋予与R0B38中的特定条目对应的ROM索引(RNUM)。RNUM可用于追踪核心30中的进行中的操作。映射/分派单元36还可包括图2中未示出的其它组件(例如,映射器阵列、分派单元、分派缓冲器)。此外,在其它实施例中,包含在映射/分派单元36内的功能可被分成两个或者更多的独立单元,比如映射单元、分派单元和/或其它单元。
[0037]执行单元44可包括任意数目和类型的执行单元(例如,整数、浮点、矢量)。每个执行单元44还可包括一个或多个保留站(未示出)。CIF42可耦接到LSU46、FED单元32、MMU40和L2高速缓存(未示出)。CIF42可被配置成管理核心30和L2高速缓存之间的接 口。MMU40可被配置成完成地址转换和存储器管理功能。
[0038]LSU46可包括LI数据高速缓存48、存储队列50和装载队列52。装载和存储操作 可从映射/分派单元36被分派到LSU46内的保留站。存储队列50可保存与存储操作对应 的数据,装载队列52可保存与装载操作相关的数据。LSU46还可经CIF42耦接到L2高速缓 存。注意LSU46还可包括图2中未示出的其它组件(例如,保留站、寄存器文件、预取单元、 转译后备缓冲器)。
[0039]应理解在图2中图解所示的功能的分布并不是可用于处理器核心的唯一可能微 架构。其它处理器核心可包括其它组件,省略所示组件中的一个或多个组件,和/或包括功 能在各个组件之间的不同布置。
[0040]现在参见图3,图中示出了处理器流水线的前端的一个实施例的方框图。在一个实 施例中,图3中所示的前端逻辑可位于取指令和解码单元,比如FED单元32(图2)内。应 理解,图3中图解所示的功能的分布只是在处理器流水线内实现循环缓冲器的一种可能结 构。用于实现循环缓冲器的逻辑的其它适当分布也是可能和可构思出的。
[0041]取指令前端60可被配置成提取和预解码指令,随后把预解码的微操作提供给循 环缓冲器62和解码器70A-F(经多路复用器68)。在一个实施例中,取指令前端60可被配 置成每个周期输出6个预解码的微操作。在其它实施例中,取指令前端60可被配置成每个 周期输出其它数目的预解码的微操作。
[0042]循环缓冲器62、多路复用器68和解码器70A-F可具有用于每个周期处理和/或 存储6个微操作的6条通道(lane)。每个通道可包括指示该通道是否包含有效微操作的 有效比特。注意,循环缓冲器62、多路复用器68和解码器70A-F的“通道”也可被称为“位 (slot)”或者“入口(entry)”。在其它实施例中,循环缓冲器62、多路复用器68和解码器 70A-F可包括不止或者不到6个通道,取指令前端60可被配置成每个周期输出和流水线的 下一级可以接纳的微操作一样多的微操作。
[0043]取指令前端60可把指令扩展成微操作,并把这些微操作提供给循环缓冲器62和 多路复用器68。在一个实施例中,由取指令前端60提取并被解码成预解码的微操作的指 令可以基于ARM ISA。每个预解码的微操作可包括指令操作码(opcode)比特、指令预解码 比特和微操作编号。指令操作码比特指定将要进行的操作。预解码比特指示指令映射到的 微操作的数目。微操作编号代表应生成多微操作指令序列中的哪个微操作。在其它实施例 中,可以利用其它ISA,并且可按照各种方式解码和格式化指令。
[0044]当处理器未处于循环缓冲模式时,从取指令前端60输出的微操作可通过多路复 用器68被传送给解码器70A-70F。来自循环缓冲器控制单元64的选择信号可被耦接到多 路复用器68,以确定哪条路径通过多路复用器68被耦接到解码器70A-F的输入端。当处理 器处于循环缓冲模式时,可从循环缓冲器62读出微操作并将其传送给解码器70A-F。微操 作可从解码器70A-F的输出端被传送给处理器流水线的下一级。在一个实施例中,处理器 流水线的下一级可以是映射/分派单元,比如图2的映射/分派单元36。
[0045]循环缓冲器控制单元64可被配置成识别所提取和预先解码的指令内的循环。一 旦以一定的把握度识别出循环,那么该循环就可被高速缓存在循环缓冲器62中,取指令前 端60可被关闭,随后可从循环缓冲器62向处理器流水线的剩余部分进行馈送。在一个实施例中,可在循环缓冲器62中高速缓存循环的一次迭代,并且可反复地沿流水线向下分派该高速缓存的迭代。在另一个实施例中,在循环缓冲器62中可以高速缓存循环的多次迭代。
[0046]为了识别用于高速缓存的循环,首先,在提取的指令中检测向后跳转分支。“向后跳转分支”可被定义成分支到指令中的在先指令的跳转分支。向后跳转分支转到的指令可被视为循环的开始。在一个实施例中,只有某些类型的循环可被视为缓冲的候选对象。例如,在一个实施例中,对考虑缓冲的候选循环来说,循环的所有迭代都必须无变化。换句话说,每次迭代时,候选循环执行相同的指令序列。此外,可不考虑缓冲循环的指令序列中带有间接跳转分支(例如,BX-分支切换,BLX-带链接切换的分支)的循环。此外,可以允许每个循环仅仅一个向后跳转分支。循环中的其余分支应是向前分支。在其它实施例中,可以考虑所有类型的循环,以致所有类型的循环都可以是候选循环,而强制执行的唯一标准可以是循环的不变性。例如,在候选循环,比如嵌套循环中,可以允许不止一个向后跳转分支。
[0047]循环缓冲器控制单元64可监控指令流以寻找构成满足循环缓冲标准的循环的指令。循环缓冲器控制单元64可捕捉有关给定候选循环是什么样子的所有信息。在一段时间内,可在多次迭代期间跟踪候选循环,以确保候选循环保持不变。例如,在第一次迭代时,可以记录从循环的起点到循环内的一个或多个指令的距离,并在后续迭代时监控所述距离以判定这些距离是否保持不变。
[0048]在一些实施例中,即使候选循环不变并且满足上面列举的其它标准,候选循环的其它特性也可能使它不具备高速缓存在循环缓冲器62中的资格。例如,如果候选循环的大小太大以致不能放入循环缓冲器62中,那么可使该候选循环丧失资格。另外,可存在循环内跳转分支的最大容许数目,所述最大容许数目等于分支跟踪表66的大小。如果跳转分支的数目超过该数目,那么可不考虑该循环作为高速缓存在循环缓冲器62中的候选对象。在一个实施例中,对于循环内的跳转分支,分支跟踪表66可包括8个条目。在其它实施例中,对于循环内的跳转分支,分支跟踪表66可具有不止或者不到8个条目。一旦候选循环已无资格被高速缓存在循环缓冲器62中,就可记录该丧失资格的候选循环的向后跳转分支的指令地址。于是,如果再次检测到该向后跳转分支,那么循环跟踪逻辑可忽略该分支,并且当检测到新的向后跳转分支时才重新启动。
[0049]在一个实施例中,一旦不止一次地检测到相同的向后跳转分支,那么循环缓冲器控制单元64可以启动捕捉关于该循环的信息的状态机。例如,循环缓冲器控制单元64可利用分支跟踪表跟踪候选循环的跳转分支。分支跟踪表66可跟踪从循环的起点到每个跳转分支的距离。在一个实施例中,可以用微操作测量距离。在另一个实施例中,可以用指令测量距离。在其它实施例中,可以利用其它度量、和/或两种或者更多种度量的组合来测量距离。测量从循环的起点到各个跳转分支的距离是一种确定经过基础代码的路径一直未改变的方式。
[0050]如果循环的每次迭代执行以使得从循环的起点到每个分支存在相同数目的微操作,那么该候选循环可被认为无变化。在确定候选循环无变化从而应被高速缓存之前,可跟踪到表66中的各个分支的距离达预定的迭代次数。分配用于跟踪候选循环的不变性的时间量可以基于循环迭代的次数和/或遇到的分支的数目。
[0051]在一个实施例中,在候选循环内允许的唯一跳转分支可以是具有相同目标的条件分支。在这个实施例中,可不支持间接分支,因为间接分支在循环的不同迭代时可能具有不 同的目标。有可能间接分支会在两次不同的迭代中选择经过代码的两条不同路径,但是循 环缓冲器控制单元64仍然会认为该循环无变化。这种情况是可能发生的,因为即使循环在 两次不同的迭代中选择两条不同的路径,距离仍然也可能会相同。这会导致循环无变化的 错误判定。为了防止这些假正,可不支持间接分支。于是,在本实施例中,循环缓冲器控制 单元64可以只允许候选循环内的在每次循环迭代中都具有相同目标的分支。
[0052]在另一个实施例中,可以支持间接分支,从而在候选循环内容许间接分支。在这个 实施例中,分支跟踪表66还可包括指示每个跳转分支的目标的信息以确保循环无变化。在 候选循环的每次迭代期间,可以比较循环中的每个分支的目标和保存在表66中的值,以确 保目标没有改变。在另外的实施例中,在分支跟踪表66中还可包含另外的信息以确保循环 内容无变化。
[0053]在一个实施例中,解码器70A-F可检测分支,并用信号将其通知给循环缓冲器控 制单元64。在另一个实施例中,取指令前端60可检测分支,并把所述检测的指示传送给单 元64。另一方面,在另一个实施例中,单元64可关于各个分支监控指令流,并且独立于解码 器70A-F或取指令前端60检测分支。单元64可包括对从循环的起点起的微操作计数的微 操作计数器(未示出)。在循环的第一次迭代时,每当在循环中检测到分支时,单元64可把 微操作计数器的值写入分支跟踪表66中。每次检测到分支时,指向表66的指针也可递增, 从而移动到表66中的下一个条目。在循环的后续迭代时,每当检测到分支时,可以比较微 操作计数器的值和在表66中的对应条目中的值。表66的每个条目可包括代表相应分支距 循环的起点的微操作数的数量。每个条目还可包括指示该条目对应于循环中的跳转分支的 有效比特。在其它实施例中,表166的每个条目可包括其它信息,比如分支标识符或标签、 分支的目标、和/或其它信息。
[0054]在一个实施例中,任何时候检测到错误预测的分支,都可向循环缓冲器控制单元 64传送重置信号。另外,任何时候出现从后端用信号通知的重定向取指令前端60的事件, 循环缓冲器控制单元64都可冲洗和重启候选对象检测逻辑。这些情形一般会导致无论什 么代码流分解成的程序都可被单元64跟踪。
[0055]在一定的预定时间之后,单元64可确定候选循环应被高速缓存在循环缓冲器62 中。所述预定时间的长度可以基于各种因素中的一个或多个因素。例如,在一个实施例中, 可以利用循环的一定迭代次数来测量所述预定时间。如果循环无变化的迭代的次数在阈值 之上,那么循环可被高速缓存在循环缓冲器62中。另一方面,所述时间段可以基于检测到 的跳转分支的数目。例如,如果候选循环包括8个跳转分支,那么40个这种分支的计数可 被用于指示发生了特定次数的迭代(本例中为5次)。在一个实施例中,所述预定时间段可 以基于向分支预测器提供预测循环的结束的足够的时间。跟踪这样的迭代的众多方式也是 可能和可构思出的。
[0056]现在参见图4,图中示出了取指令和解码单元内的循环缓冲器的另一个实施例。在 一个实施例中,循环缓冲器84可在处理器流水线中位于解码器82A-F的下游,如图4中所 示。这与循环缓冲器62(图3)相反,循环缓冲器62(图3)在处理器流水线中位于解码器 70A-F之前。取指令前端80可提取指令,并把提取的指令预解码成经预解码的微操作。随 后,预解码的微操作可被传送给解码器82A-F。在一个实施例中,取指令前端80可被配置成每个周期生成6个预解码的微操作,并将其传送给解码器82A-F的6个通道。
[0057]解码器82A-F可把预解码的微操作解码成解码的微操作。随后,解码器82A-F可通过多路复用器90,把解码的微操作传送给处理器流水线的下一级。另外,当候选循环已被识别出,并且满足被高速缓存到循环缓冲器84中的标准时,解码器82A-F可把微操作传送给循环缓冲器84。多路复用器90的输出可被耦接到处理器流水线的下一级。在一个实施例中,处理器流水线的下一级是映射/分派单元。
[0058]循环缓冲器84、循环缓冲器控制单元86和分支跟踪表88可被配置成实现与关于图3所示的处理器前端说明的那些功能类似的功能。图4中的一个关键区别在于与图3中的保存预解码的微操作的循环缓冲器62相反,循环缓冲器84可以保存解码的微操作。于是,循环缓冲器84的大小可以大于循环缓冲器62的大小以容纳更大量的数据,因为解码的微操作一般比预编码的微操作具有更多的信息。注意,除了在图3和4中所示的两个位置之外,循环缓冲器84还可位于处理器流水线内的其它位置。例如,循环缓冲器84可以位于取指令前端内,或者作为另一选择,循环缓冲器84可以位于映射/分派单元内。取决于循环缓冲器位于流水线中的位置,保存在循环缓冲器中的循环的内容可根据在流水线中的该点已进行的指令处理的量而变化。
[0059]在一个实施例中,在候选循环的初次迭代,循环缓冲器控制单元86可用从循环的起点到该循环的每个跳转分支的距离,填充分支跟踪表88。在该循环的后续迭代,控制单元86可判定每个分支距循环的起点的距离是否和保存在表88中的对应距离相同。在候选循环在一定迭代次数期间一直无变化之后,候选循环可被高速缓存在循环缓冲器84中,并从循环缓冲器84被提供给流水线的剩余部分。在循环从循环缓冲器84被分派给处理器流水线的剩余部分的时候,取指令前端80和解码器82A-F可被关闭。
[0060]现在参见图5,图中示出了示例循环的一个实施例。注意图5中所示的循环100的程序代码只是用于举例说明。可以利用其它数目的指令和分支不同地构成其它循环。
[0061]循环100可始于具有指令102的指令地址0001。指令102后面是指令104,这些指令可以是在ISA中定义的任何类型的无分支指令。分支106可接着指令104,分支106可以是分支到指令地址0025的向前分支。
[0062]如表120中所示,指令102和104以及分支106都可被分解成单个微操作。这只是出于举例说明的目的,程序或循环内的指令可对应于任意数目的微操作,在表120中所示的例子只是用于举例说明。注意,表示每个指令的微操作的表120不是由处理器流水线利用或保存的表,而是为了讨论的目的而示于图5中。
[0063]分支106是在循环100中遇到的第一个向前分支,从循环100开始以来的微操作的数目可被输入分支跟踪表130中。于是,根据都只具有一个微操作的这两个指令,保存在分支跟踪表130中的第一个值为2。分支106可跳转到对应于指令108的指令地址0025。指令108可以是任意类型的无分支指令。然后在指令108之后,可执行另一个向前分支,在本情况下为分支指令110。如在表120中所示,指令108被分解成3个微操作。于是,就从循环的起点到分支110的微操作的数目来说,写入分支跟踪表130的第二个条目中的值为6。
[0064]分支110可跳转到在指令地址0077的指令112。指令112后面可以是指令114,随后是分支116。分支116是向后跳转分支,以致它向后分支到指令序列中的在先地址。指令112分解成2个微操作,而指令114分解成4个微操作,如表120中所示。于是,从循环 的起点到分支116的利用微操作表示的距离为13,该值可被保存在分支跟踪表130的第3 个条目中。
[0065]当首次检测到分支116时,这可触发循环缓冲器控制单元内的状态机开始跟踪作 为候选循环缓冲对象的循环100。循环缓冲器控制单元可确定循环100中的微操作的数目 和循环100中的分支的数目。如果这两个值都小于循环硬件支持的阈值,那么在循环100 的下次迭代时,可以填充分支跟踪表130。另一方面,可在循环100的第一次迭代时,在检测 到分支116之后填充分支跟踪表130。如果循环100不满足循环硬件对候选循环所要求的 全部标准,那么可以放弃循环跟踪。如果循环100满足全部标准,那么在循环100的后续迭 代时,每当遇到分支时,就可读出表130中的对应值,并将其与用微操作度量的距循环的起 点的距离比较。
[0066]注意,对于其它循环来说,取决于循环中的分支的数目,表130可包括其它数目的 有效条目。另外注意,在其它实施例中,可用除微操作外的其它值测量保存在分支跟踪表 130中的距离。例如,在另一个实施例中,可用指令测量保存在表130中的距离。此外,在其 它实施例中,分支跟踪表130可在各个条目中包括其它信息字段。例如,对每个条目来说可 以存在一个有效比特,以指示该条目是否对应于候选循环中的分支并且包含有效距离。在 图5中所示的对于表130和循环100的例子中,只有前三个条目应具有设为“I”的有效比 特,而其它条目中的其余有效比特可被设定“O”。此外,在其它实施例中,在每个条目中可保 存分支目标地址。
[0067]现在参见图6,图中示出了循环缓冲器控制单元140的一个实施例的方框图。单元 140可包括比较器142,比较器142可比较当前向后跳转分支(BTB)指令的BTB指令地址和 来自锁存器144的指令地址。锁存器144可保持最新遇到的BTB指令地址,并且可比较所 述最新遇到的BTB指令地址和当前BTB指令地址。锁存器144和比较器142可接收指示检 测到向后跳转分支(BTB)的信号。锁存器144和比较器142还可接收检测到的BTB的指令 地址。锁存器144可保存最新的向后跳转分支(BTB)的地址的指令。然后,下次检测到BTB 时,可以比较该BTB的指令地址和保存在锁存器144中的在先BTB的指令地址。另一方面, 在另一个实施例中,锁存器144可以是寄存器或者其它存储单元。比较器142提供在指令 流中检测到循环的指示。
[0068]在一个实施例中,比较器42可具有两个输出,即,指示相等的第一个输出和指示 不相等的第二个输出。指示相等的第一个输出可被耦接到检测已启动标记146、或门160和 迭代计数器150。来自比较器142的相等输出可以是指示已检测到BTB,并且在一行中至少 两次看到该BTB的持续一个或多个时钟周期的脉冲。来自比较器142的相等输出可递增迭 代计数器150,迭代计数器150可提供在指令流中已检测到的循环迭代次数的计数。对这个 实施例来说,如果在一行中两次遇到相同的BTB,并且其间没有任何其它的BTB,那么这指 示遇到了候选循环。于是,可以启动循环跟踪电路,以更多地了解该候选循环。
[0069]来自比较器142的指示不相等的第二个输出可被耦接到或门162。或门162的输 出可被耦接成重置检测已启动标记146。当目前检测到的BTB不同于先前检测到的BTB时, 来自比较器142的第二个输出可以是高电平。就本实施例来说,这指示先前的BTB不是候 选循环的一部分。尽管图6中未示出,不过来自比较器142的第二个输出也可被耦接到其它位置以指示循环检测已被重置。
[0070]微操作计数器148可被配置成跟踪自从候选循环开始以来检测到的微操作的数目。一个或多个信号可被耦接到微操作计数器148,指示检测到的微操作的数目。到微操作计数器148的这些输入可指示已被提取和/或解码的微操作的数目。在一个实施例中,所述信号可以来自取指令单元。在一个实施例中,如果取指令单元每个时钟输出6个解码的微操作,那么耦接到微操作计数器148的高电平输入可使微操作计数器148把其计数加6。在另一个实施例中,这些信号可从解码器单元耦接到微操作计数器148。
[0071]微操作计数器148还可包括用于确定到对应于一个分支的特定微操作的微操作数的其它逻辑。当遇到分支时,微操作计数器148还可接收指示该微操作位于的通道的输入。然后,微操作计数器148可确定最近周期的多少微操作在分支微操作之前。这样,微操作计数器148可产生从循环的起点到与检测到的分支对应的特定分支微操作的微操作数的精确计数。如果检测到BTB (意味循环的结尾),如果从处理器的后端用信号通知预测错误或冲洗,或者如果比较器152用信号通知关于分支距离检测到不相等,那么微操作计数器148可被重置。
[0072]迭代计数器150可被配置成跟踪已被提取/解码的循环的迭代次数。如果从处理器的后端用信号通知预测错误或者冲洗,或者如果到循环的分支之一的距离不同于分支跟踪表(未示出)中的保存值,那么迭代计数器150可被重置。这可用比较器152指示,如果就检测到的分支而论的当前微操作计数器值不等于保存在分支跟踪表(BTT)中的对应值,那么比较器152可产生指示不相等的信号。比较器152可接收关于循环的当前分支的分支检测信号和BTT值。比较器152可比较BTT值和当前的微操作计数器值,并输出所述比较的结果。如果比较结果为不相等,那么可以重置循环检测逻辑。
[0073]在一个实施例中,比较器154可被配置成比较迭代计数器150的输出和阈值156。当迭代计数器150匹配或超过阈值156时,比较器154可输出为处理器启动循环缓冲模式的信号。在这个实施例中,在启动循环缓冲模式之前,可在多次迭代内跟踪候选循环,并且需要跟踪的迭代次数可用阈值156指示。在各个实施例中,阈值156是可编程值。在一个实施例中,阈值的值可以基于处理器的分支预测机构为检测循环的结束而需要的时间或周期数目。在一些实施例中,在处理器处于循环缓冲模式的时候,分支预测机构可被关闭。
[0074]在另一个实施例中,可以计数分支的数目,当分支的数目达到阈值时,可以启动循环缓冲模式。例如,如果循环具有5个分支,并且分支阈值为40,那么为了达到分支阈值,候选循环应需要8次迭代。在其它实施例中,可以利用在启动循环缓冲模式之前确定要跟踪候选循环多久的其它方式。例如,在另一个实施例中,如果达到一定数目的分支或者一定次数的迭代,那么处理器可以进入循环缓冲模式。
[0075]虽然单元140被表示成接收各种信号,比如检测的BTB、检测的微操作的数目、和检测的分支,不过在另一个实施例中,通过监控正遍历处理器流水线的微操作,单元140可内部生成这些信号。另外应明白,在图6中图解所示的功能的分布不是用于在处理器流水线内实现循环缓冲器控制单元的逻辑的唯一可能分布。其它实施例可包括其它的组件和逻辑,并且可以具有这些组件和逻辑的任意适当分布。此外,每个单独的组件可以基于实施例用不同地构成的一个或多个类似组件代替。例如,在图6中所示的实施例中,在候选循环中只允许一个向后跳转分支。不过在其它实施例中,候选循环可包括不止一个向后跳转分支,从而可相应地修改循环缓冲器控制单元的逻辑。
[0076]现在参见图7,图中示出了跟踪候选循环的方法的一个实施例。为了便于讨论,顺 序地示出了本实施例中的各个步骤。应注意,在下面说明的方法的各个实施例中,可以并发 地或者按照和所示顺序不同的顺序,进行说明的元素中的一个或多个,或者可以完全省略 说明的各个元素中的一个或多个。也可酌情进行另外的其它元素。
[0077]在一个实施例中,在处理器流水线中,可检测循环终止分支(方框172)。在各个实 施例中,循环终止分支可被定义成排除子例程调用的直接向后跳转分支。在各个实施例中, 可在处理器流水线的取指令阶段、解码器阶段、或者另一个阶段中检测循环终止分支。循环 终止分支微操作可被标记,以使它可被识别成可能的候选循环缓存的结尾。
[0078]响应检测到循环终止分支,循环终止分支的指令地址可被锁存在循环缓冲器控制 单元中,可以设置检测已开始标记,可以启动迭代计数器,并且可以启动微操作计数器(方 框174)。迭代计数器可被用于跟踪循环的迭代次数。另外,在一些实施例中,可以启动分支 计数器以跟踪在候选循环的所有迭代中检测到的分支的数目。迭代计数器的值和/或分支 计数器的值可被用于确定何时启动循环缓冲模式。当启动循环缓冲模式时,候选循环可被 高速缓存在循环缓冲器中,并且取指令前端可被关闭。微操作计数器可被用于确定到在候 选循环内检测到的各个分支的距离(用微操作的数目)。
[0079]注意,在一个实施例中,微操作计数器所保存的计数值可包括作为取指令和解码 阶段的一部分生成的空位(slot)。在这个实施例中,为了便于讨论,可以假定取指令单元被 配置成每个周期输出6个微操作。对于一些时钟周期,由于各种原因,取指令单元可不产生 完整的6个微操作输出。于是,发送给解码器单元的一行微操作可能不包括完整的一行有 效微操作。微操作计数器可考虑到此,从而对每一行计数6次,即使该行不包含6个有效的 微操作。例如,循环可包括6行的微操作,循环终止分支可以是产生的微操作的第6个周期 的最后一行的最后一个位。微操作计数器可在6个周期内计数该循环具有36个微操作,即 使一行或多行包含不到6个有效的微操作。例如,中间行可能只包含2个有效的微操作,该 行的其余4个位可以是空的。于是,循环理应包括32个有效的微操作,但是循环计数器会 计数该循环包括36个微操作。一般来说,在这个实施例中,微操作计数器会跟踪在循环缓 冲器中将需要多少位来保存候选循环,即使这些位中的一些位不包含有效的微操作。
[0080]在设置计数器和任何另外的跟踪逻辑之后,可以执行并跟踪候选循环(方框 176)。在一个实施例中,跟踪候选循环可包括检测候选循环中的分支,并用从循环的起点到 每个检测到的分支的距离来填充分支跟踪表(方框178)。之后,在候选循环的结尾可检测 到循环终止分支(方框180)。如果循环终止分支是先前检测到的相同分支(条件182),那 么迭代计数器可被递增(方框186)。
[0081]如果循环终止分支不是先前检测到的相同分支(条件框182),那么可以停止候选 循环的跟踪,并且可重置计数器、锁存器、检测已开始标记和分支跟踪表(方框184)。另外, 如果在循环中检测到任何排除在外的指令,那么可以终止候选循环的跟踪。在方框184之 后,方法170可被重置,并等待检测到循环终止分支(方框172)。
[0082]在方框186之后,可比较微操作计数器和循环缓冲器的大小(条件框188)以判定 候选循环是否能够放入循环缓冲器中。另一方面,在另一个实施例中,方法170的这些步骤 可被重新排序。例如,如果在检测到循环终止分支(方框180)之前判定微操作计数器超过循环缓冲器的大小(条件框188),那么可以取消循环检测。
[0083]如果微操作计数器小于循环缓冲器的大小(条件框188),那么候选循环可放入循环缓冲器中,从而可以检查下一个条件,即候选循环中的分支的数目是否小于分支跟踪表(BTT)的大小(条件框190)。如果微操作计数器大于循环缓冲器的大小(条件框188),那么候选循环太大以致不能放入循环缓冲器中,从而可终止跟踪。方法170可返回方框184,并且可重置计数器、锁存器、检测已启动标记和分支跟踪表。
[0084]如果候选循环中的分支的数目小于BTT的大小(条件框190),那么候选循环仍然在考虑中,从而可重新启动微操作计数器(方框192)。随后,可执行和跟踪循环的另一次迭代(方框194)。跟踪循环的迭代可包括:监控跳转分支、和从循环的起点到每个跳转分支的微操作的数目。可以比较从循环的起点到每个跳转分支的距离和保存在分支跟踪表中的值。
[0085]当循环的迭代完成时,应检测到循环终止分支,并且可以判定是否是相同的循环终止分支(条件框196)。另一方面,如果未检测到循环终止分支,那么通过监控微操作计数器和分支跟踪表中的最后条目,并确定应该已检测到循环终止分支,可以终止循环跟踪。如果检测到循环终止分支,并且它是相同的循环终止分支(条件框196),那么可以判定对循环的本次迭代来说,循环内容是否无变化(条件框198)。
[0086]作为另一选择,在一些情形下可在条件框196之前检查条件框198。例如,如果循环的分支之一距循环的起点的距离与保存在分支跟踪表中的值不相同,那么可在检测到循环终止分支之前,确定循环内容已变化。在这种情况下,可在检测到相同的循环终止分支之前,终止循环的跟踪。
[0087]如果对循环的本次迭代来说,循环内容无变化(条件分支198),那么这指示正在执行相同的循环,从而迭代计数器可被递增(方框200)。随后,可以判定迭代计数器是否在阈值之上,以判定就待缓冲的循环来说是否已跟踪该循环足够长的时间(条件框202)。作为另一选择,在另一个实施例中,可以比较分支计数器和阈值,以判定处理器是否应进入循环缓冲模式。
[0088]如果迭代计数器低于阈值(条件框202),那么方法170可重新启动微操作计数器(方框192)。如果迭代计数器在阈值以上(条件框202),那么处理器可进入循环缓冲模式,并且循环可被高速缓存在循环缓冲器中(方框204)。在方框204之后,可结束方法170。此时,可以关闭处理器的前端,并且可从循环缓冲器分派微操作。当循环终止时,处理器可传送退出循环缓冲模式的信号,从而可重新开启处理器的前端。此时,可重新开始方法170,循环缓冲器控制单元可重新开始监控指令流以寻找循环终止分支(方框172)。
[0089]下面参考图8,图中示出了系统210的一个实施例的方框图。如图所示,系统210可代表桌上型计算机220、膝上型计算机230、平板计算机240、蜂窝电话机250等的芯片、电路、组件等。在图解说明的实施例中,系统210包括与外部存储器212耦接的IC10(图1)的至少一个实例。
[0090]IClO耦接到一个或多个外设214和所述外部存储器212。还设置了电源216,电源216向IClO提供供电电压,以及向存储器212和/或外设214提供一个或多个供电电压。在各个实施例中,电源216可代表电池(例如,智能电话、膝上型计算机或平板计算机中的可再充电电池)。在一些实施例中,可以包括IClO的不止一个实例(也可包括不止一个外部存储器212)。
[0091]存储器212可以是任意类型的存储器,比如动态随机存取存储器(DRAM)、同步DRAM(SDRAM)、双倍数据速率(DDR、DDR2、DDR3等)SDRAM(包括移动版的SDRAM,比如mDDR3等,和 / 或低功率版的 SDRAM,比如 LPDDR2 等)、RAMBUS DRAM (RDRAM)、静态 RAM(SRAM)等。一个或多个存储器件可以耦接到电路板,从而形成诸如单列直插存储模块(SIMM)、双列直插存储模块(DIMM)之类的存储模块。
[0092]外设214基于系统210的类型可包括任何期望的电路。例如,在一个实施例中,外设214可包括用于各种无线通信(比如wif1、蓝牙、蜂窝、全球定位系统等)的装置。外设214还可包括另外的存储器,包括RAM存储器、固态存储器或磁盘存储器。外设214可包括用户接口装置,比如显示屏(包括触摸显示屏或多点触控显示屏)、键盘或其它输入装置、麦克风、扬声器等。
[0093]现在参见图9,图中示出了包括代表包含在IClO (图1)中的电路的一个或多个数据结构的计算机可读介质260的方框图的一个实施例。一般来说,计算机可读介质260可包括任意非临时性存储介质,比如磁或光介质,例如,磁盘、CD-ROM或DVD-R0M,易失性或非易失性存储器介质,比如RAM(例如,SDRAM、RDRAM、SRAM等)、ROM等,以及可通过传输介质或通过通信介质(比如网络和/或无线链路)传送的信号(比如电、电磁或数字信号)可访问的介质。
[0094]一般地,计算机可读介质260上的电路的数据结构可被程序读取,并直接或间接地用于制备包含所述电路的硬件。例如,数据结构可包括利用诸如Verilog或VHDL之类的高级设计语言(HDL)的硬件功能的一个或多个行为级描述或寄存器传输级(RTL)描述。可以利用合成工具读取所述描述,所述合成工具可合成所述描述以根据合成库产生包含逻辑门的列表的一个或多个网表。网表包含一组逻辑门,所述一组逻辑门还代表包含电路的硬件的功能。网表随后被布局和布线以产生描述将应用于掩模的几何形状的一个或多个数据集。随后可在各种半导体制备步骤中利用掩模以产生对应于电路图的一个或多个半导体电路。另一方面,当需要时,计算机可读介质230上的数据结构可以是网表(有或没有合成库)或者数据集。在另一个备选实施例中,数据结构可包含示意程序的输出,或者源于其的网表或数据集。
[0095]尽管计算机可读介质260包括IClO的表示,不过其它实施例可包括IClO的多个部分(例如,循环缓冲器、循环缓冲器控制单元)的任意组合或者任意部分的表示。
[0096]应强调的是上述实施例只是非限制性的实施例子。一旦充分理解上面的公开内容,对本领域的技术人员来说,众多的变化和修改将变得明显。下面的权利要求应被解释成包含所有这样的变化和修改。
【权利要求】
1.一种设备,包括: 循环缓冲器,被配置成保存指令操作,其中响应于检测到所述设备处于循环缓冲模式,从循环缓冲器分派指令操作;和 与循环缓冲器耦接的循环缓冲器控制单元,其中循环缓冲器控制单元被配置成: 跟踪从包含多条指令的候选循环的起点到所述候选循环内的每个跳转分支的距离;和响应于检测到从候选循环的起点到各个跳转分支的距离在候选循环的至少给定迭代次数期间无变化,启动循环缓冲模式。
2.按照权利要求1所述的设备,还包括取指令单元和指令高速缓存,其中所述设备被配置成,响应循环缓冲模式被启动,关闭取指令单元和指令高速缓存中的至少一个。
3.按照权利要求1所述的设备,其中当所述设备处于循环缓冲模式时,从循环缓冲器向解码单元分派指令操作。
4.按照权利要求1所述的设备,其中按指令操作测量从候选循环的起点到每个跳转分支的距离。
5.按照权利要求1所述的设备,其中所述给定迭代次数对应于大于阈值的迭代次数。
6.按照权利要求5所述的设备,其中所述阈值基于分支预测器预测候选循环的结束所需的时间量。
7.按照权利要求1所述的设备,还包括分支跟踪表,其中分支跟踪表包含关于候选循环的每个跳转分支的条目,并且其中每个条目包括与从候选循环的起点到相应的跳转分支的距离对应的值。·
8.一种处理器,包括: 循环缓冲器;和 与循环缓冲器耦接的循环缓冲器控制单元; 其中循环缓冲器控制单元被配置成: 响应于检测到向后跳转分支,监控候选循环; 跟踪从候选循环的起点到所述候选循环内的一个或多个指令的一个或多个距离; 响应于检测到对第一批多个检测到的跳转分支来说所述一个或多个距离无变化,使候选循环被保存在循环缓冲器中。
9.按照权利要求8所述的处理器,其中被跟踪的一个或多个指令是一个或多个跳转分支。
10.按照权利要求8所述的处理器,其中候选循环的起点被识别为向后跳转分支之后的指令。
11.按照权利要求8所述的处理器,其中在候选循环中只允许一个向后跳转分支。
12.按照权利要求8所述的处理器,还包括映射和分派单元,其中当候选循环被保存在循环缓冲器中时,指令操作从循环缓冲器被分派给映射和分派单元。
13.按照权利要求9所述的处理器,其中循环缓冲器控制单元还被配置成响应于监测到在候选循环的任何后续迭代时从候选循环的起点到任意跳转分支的距离已改变,终止候选循环的监控和跟踪。
14.按照权利要求8所述的处理器,其中,循环缓冲器控制单元还被配置成响应于检测到候选循环不能放入循环缓冲器中而终止候选循环的监控和跟踪。
15.一种方法,包括:检测循环终止分支;启动指令操作计数器和迭代计数器;跟踪候选循环的多个指令;响应于第二次检测到所述循环终止分支,比较指令操作计数器和循环缓冲器的大小;当第二次检测到所述循环终止分支时,响应于确定指令操作计数器大于循环缓冲器的大小,终止候选循环的跟踪;响应于确定指令操作计数器不大于循环缓冲器的大小,继续跟踪候选循环并递增迭代计数器;和响应于迭代计数器超过阈值,把候选循环高速缓存在循环缓冲器中。
16.按照权利要求15所述的方法,还包括:在候选循环的第一迭代次数期间,监控从候选循环的起点到候选循环的每个跳转分支的距离;和响应于确定在候选循环的第一迭代次数中的任意一次迭代时,从候选循环的起点到候选循环的任意跳转分支的距离已变化,终止候选循环的跟踪。
17.按照权利要求15所述的方法,还包括:响应于把候选循环高速缓存在循环缓冲器中,关闭取指令单元。
18.按照权利要求15所述的方法,还包括:响应于把候选循环高速缓存在循环缓冲器中,把候选循环从循环缓冲器分派给处理器流水线的下一级。
19.按照权利要求18所述的方法,其中,处理器流水线的下一级是解码单元。
20.按照权利要求18所述的方法,其中,处理器流水线的下一级是映射和分派单元。
【文档编号】G06F9/38GK103593167SQ201310233540
【公开日】2014年2月19日 申请日期:2013年6月14日 优先权日:2012年6月15日
【发明者】C·布拉斯考-阿鲁, I·D·考恩坦尼斯 申请人:苹果公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1