数据处理装置的追踪的制作方法

文档序号:11780133阅读:194来源:国知局
数据处理装置的追踪的制作方法
本发明涉及数据处理。更具体而言,本发明涉及对数据处理装置执行的处理活动的追踪。

背景技术:
已知执行对数据处理装置的活动的追踪,以验证处理器设计并确认数据处理装置在执行程序指令时的可靠操作。已知提供与数据处理装置相关联的追踪单元,该追踪单元被配置为监视数据处理装置的处理活动,且产生追踪数据项序列,追踪数据项指示那些处理活动。此追踪单元的实例为可作为单一系统芯片(System-On-Chip)的部分或独立于处理器而提供的ARM嵌入式追踪宏单元(EmbeddedTraceMacrocell;ETM)。ETM产生用于输出至诊断装置的追踪数据。对于执行复杂软件的现代数据处理装置而言,在追踪操作期间产生的追踪数据量通常非常大。因此,希望以压缩形式提供追踪数据项,从而省略预计为冗余的任何信息并包括仅对于特定分析目的严格必需的数据。美国专利第7,707,394号阐述了用于减小追踪数据流的大小的一些技术。对数据处理装置的活动的追踪在能够乱序执行程序指令及/或臆测执行的数据处理装置中可为复杂的。臆测执行为常常用于数据处理装置中的技术,这是因为臆测执行例如通过防止管线式数据处理装置的各管线级在任何重要时段保持闲置而能提高指令吞吐量。然而,指令的臆测执行可为追踪单元带来特定困难,这是因为在臆测验证之前,亦即,在已知臆测执行的给定指令实际上是否由数据处理装置指派之前,追踪单元不能提供决定性地指示数据处理装置的实际操作的追踪数据流。用于处理能够臆测执行的数据处理装置中的追踪的已知技术为缓冲与臆测执行指令相关联的所有追踪数据,直至臆测完全验证为止,或臆测地产生并输出追踪数据且若随后发现追踪数据的某些项所对应的指令被误臆测则取消这些追踪数据项。举例而言,Nexus协定(“TheNexus5001Forum-StandardforaGlobalEmbeddedProcessorDebugInterface”,IEEE-IST05001-2003,2003年12月23日)支持取消规定数目的追踪数据项。然而,即使数据处理装置向追踪单元特定地指示应取消哪些指令或指令群组,实际上识别与那些取消的指令相对应的追踪数据项也是不简单的。在能够乱序执行的数据处理装置中,当例如处理诸如加载指令或储存指令的指令执行时,在追踪数据处理活动过程中可能出现问题,这些指令执行可能花费许多周期来完成。因此,例如,即使顺序处理被执行时,若加载指被执行令且相应追踪数据项产生,则截止所请求数据值已从存储器系统撷取出之时,可能难以识别与加载指令的执行相关联的(先前产生的)相应追踪数据项。因此,在使从存储器撷取的数据值与特定执行的加载指令相关的过程中可能存在问题。将了解到,此情形当可能未按程序次序执行诸如加载指令的数据转移时加剧,此状况可使得实际上不可能识别哪些数据值属于哪些存储器地址。与乱序处理器的追踪有关的一些背景技术信息可见于文件“ThePDTraceInterfaceandTraceControlBlockSpecification”,2005年7月4日(可得自http://www.mips.com/products/product-materials/processor/mips-architecture/)及ARMETMv3架构(可得自http://infocentre.arm.com)中。特定问题可出现在追踪条件指令过程中,这是因为在条件指令的译码与附加至指令执行的特定条件的解析之间通常存在延迟。许多已知指令集仅允许分支有条件地执行。然而,ARM架构使用条件评估硬件,该条件评估硬件使各种不同指令能够含有条件字段,该条件字段决定数据处理装置是否将执行相应指令。非执行的指令通常仅消耗单一处理周期。有条件地执行若干不同指令的能力移除了对许多分支指令的需要。分支指令可使需要多个周期以再填充管线的数据处理装置的管线暂停,且条件指令允许不具有分支的密集内嵌码(densein-linecode)。不执行若干条件指令(其中附加条件未满足)的时间损失通常小于需要分支指令的额外负担。因此,条件指令在提高数据处理的效率过程中非常有用。然而,诸如条件非分支指令的条件指令由于指令的译码与附加条件的评估之间的延迟而对数据处理装置的活动的追踪提出特定问题。条件通过/失败信息可在与条件指令相同的点处被追踪,且因此可使用单一追踪分组来追踪,但是此举需要显著的缓冲来支持此追踪,尤其是在乱序处理器或能够臆测执行的处理器中。因此,需要提供一种提供条件指令的更有效追踪的技术,该技术亦适用于能够臆测执行及/或乱序执行的数据处理装置中的指令序列的追踪。

技术实现要素:
根据第一方面,本发明提供一种追踪单元,追踪单元被配置为产生追踪数据项,追踪数据项指示数据处理装置的处理活动,该追踪单元包含:追踪输入接口,追踪输入接口用于从数据处理装置接收至少一个指令观察指示符及至少一个结果输出指示符,至少一个指令观察指示符指示条件指令的观察,至少一个结果输出指示符指示数据处理装置对执行至少一个条件指令的结果的输出;以及追踪电路系统,追踪电路系统用于处理至少一个指令观察指示符及至少一个结果输出指示符,且追踪电路系统被配置为从至少一个指令观察指示符及至少一个结果输出指示符产生相应条件指令追踪数据项及条件结果追踪数据项,且独立地输出条件指令追踪数据项及条件结果追踪数据项,从而使得诊断装置能够对条件指令及相应条件结果进行分离追踪分析。本发明认识到,提供能够独立地输出条件指令追踪数据项及条件结果追踪数据项的追踪电路系统提供了相当大的灵活性及对条件指令的追踪,此举可改进与缓冲追踪数据直至与有条件地执行的指令相关联的条件完全验证的已知技术相关联的问题。将了解到,指令观察指示符及相应结果输出指示符可由数据处理装置在相同处理周期中输出。然而,在一些实施例中,指令观察指示符在第一处理周期中由数据处理装置输出且在追踪电路系统的追踪输入接口处接收,而数据处理装置被配置为能够在第二不同处理周期中输出与相同条件指令相对应的结果输出指示符。此意谓着指令观察指示符及相应结果输出指示符应亦在不同处理周期中在追踪输入接口处接收。这促进条件指令的执行与随后产生的相应条件结果的分离追踪。独立地追踪条件指令与条件指令的相应条件结果的能力是有用的,这是因为在一些数据处理核心中可能无法在处理管线中的相同点处追踪条件指令的所有细节。此外,在一些数据处理器中条件指令可能以乱序处理。根据本发明的技术将条件指令的追踪分离为两部分以直接解决此问题。这使得条件指令的追踪更有效率,尤其在能够臆测执行及/或乱序执行的数据处理装置中。条件指令的执行及条件结果的输出的追踪的时间分离意谓着,例如在乱序处理器中,可取决于特定数据处理装置的时序及能力而以不同方式追踪给定执行序列。特定而言,相对于条件指令的译码条件结果变为可用所在的时间范围(timeframe)可取决于处理器能力而显著变化,但是这可容易地通过数据处理装置在不同处理周期中输出指令观察指示符及结果输出指示符来调节。在一些实施例中,追踪单元包含结果输出指示符缓冲器,结果输出指示符缓冲器用于储存从数据处理装置接收到的多个结果输出指示符集,追踪单元被配置为周期性地选择所储存的结果集以供输出从而由追踪电路系统处理,并且响应于指令观察指示符中的一个指令观察指示符指示引用缓冲器当前为其储存有效值的结果输出指示符集的条件指令,追踪单元被配置为选择当前储存的有效结果输出指示符集以供输出,从而使得新的结果输出指示符集能被存储。追踪单元或许可在单一周期中接受许多结果输出指示符,然而,提供具有产生若干数目的条件结果追踪数据项的能力的追踪电路系统将为昂贵的。因此,缓冲这些结果且稳定地输出这些结果是有利的。以此方式,可消除接收到的结果输出指示符的峰值。因此,在条件指令的执行需要逐出当前结果输出指示符时或在没有项目接收时,输出指示符被输出,且因此一个或更多项目可被选择以供输出。因为系统被设计为在结果输出指示符之前接收指令观察指示符,所以可决定在何处执行指令(执行指令需要当前使用的储存位置来储存结果),且在结果接收时来自此位置的数据可输出,然后该储存位置被腾出。在一些实施例中,数据处理装置包含多个当前程序状态寄存器,当前程序状态寄存器被配置为储存各自的条件代码标志值集,条件代码标志值指示条件指令如何被处理,缓冲器包含用于储存与多个当前程序状态寄存器中的每一者相对应的结果输出指示符集的存储位置,每个结果输出指示符集包含所述条件代码标志值中的至少一些条件代码旗标值。结果输出指示符例如可包含从CPSR寄存器接收到的至少一些条件代码标志值。若情况如此,则对于每一CPSR寄存器,存在一储存位置,且这些储存位置可在一个周期中全部更新,且因此追踪单元必须能够接受如此数目个输入。此外,当执行条件指令时,可决定是否存在与在缓冲器中已为其存储有效值的状态寄存器相对应的条件指令。若情况如此,则此值可被输出且储存位置被用来储存新值。通过在较早周期中输出指令观察指示符,缓冲器可在新值到达之前被清空。此外,通过具有缓冲器,这些输入值可被存储起来,因此不需要所有这些输入值都同时被处理。应注意,若可在单一周期中接收M个条件指令指示符,则追踪单元必须能够在单一周期中逐出并输出M个条件结果指示符,以在需要时腾出储存位置。如先前所述,若存在N个状态寄存器,则在一些实施例中追踪单元应能够在单一周期中接收N个结果输出指示符集。M通常比N小得多,且因此在单一周期中输出以由追踪产生逻辑处理的结果输出指示符的数目相对小,但是可以若干不同方式追踪与条件指令的执行相关联的条件。在一些实施例中,数据处理装置包含至少一个当前程序状态寄存器,该至少一个当前程序状态寄存器被配置为储存各自的条件代码标志标记集,条件代码标志标记被测试以决定条件指令是否应被输出作追踪数据项,且追踪单元包含数据储存库,该数据储存库用于储存当前程序状态寄存器表,该当前程序状态寄存器表列出与至少一个当前程序状态寄存器及各自条件代码标志标记集至少子集相关联的状态。这提供了便利机制,经由该机制,追踪单元可持续追踪用于给定条件指令的给定条件代码是否已验证或正被追踪。这使得能够有效追踪多个有条件地执行的指令的当前状态。在一些实施例中,追踪单元的当前程序状态寄存器表被配置为储存关于条件代码标志子集中的每一子集的三个不同状态。然而,在替代性实施例中,根据追踪实践的特定要求需要,可针对每一条件代码标志储存不同数目的状态。在针对每一条件代码标志储存三个不同状态的实施例中,三个状态包含:已追踪;待追踪;以及不追踪。这三个状态可用于追踪条件非分支指令。在一些实施例中,三个不同状态通过维护发送中表及当前CPSR表来追踪,该发送中表针对每一CPSR的每一标志具有两个状态,指示标志在由该数据处理装置发出时哪些标志应追踪,当前CPSR表针对当前CPSR的每一标志存储两个状态,指示条件指令是否作为条件指令追踪数据项来追踪。将了解到,追踪电路系统可以若干不同方式持续追踪与特定条件指令相关联的条件代码标志,但是在一些实施例中,追踪电路系统使用追踪单元内的当前程序状态寄存器表,来决定何时需要/期望条件结果追踪数据项并持续追踪一组条件代码标志中应追踪的那些条件代码标志。将了解到,可以若干不同方式中的任一方式使由数据处理装置产生且由追踪电路系统接收的指令观察指示符与结果输出指示符发生相关,从而将已评估的条件结果链接至相应条件指令。然而,在一些实施例中,追踪输入接口从数据处理装置接收与指令观察指示符相对应的指令标签及与结果输出指示符相对应的结果标签。在一些实施例中,追踪单元将追踪单元从数据处理装置接收到的指令标签及结果标签输出至诊断装置。然而,在其他实施例中,追踪电路系统被配置为执行标签至索引码(key)转换操作,在该操作中,基于指令观察指示符,与由数据处理装置输出的指令观察指示符相关联的指令标签被转换为与追踪电路系统输出的条件指令追踪数据项相对应的指令索引码。类似地,由数据处理装置产生且与结果输出指示符相关联的结果标签被转换为与追踪单元输出至诊断装置的条件结果追踪数据项相对应的结果索引码。标签至索引码转换操作取决于储存在追踪电路系统内的当前程序状态寄存器表中的状态而执行。此标签至索引码转换可用来产生具有已知次序的索引码,例如序列索引码,此举允许改良的对追踪的压缩或减少,且因此允许减少的追踪带宽。将了解到,追踪电路系统可输出条件指令追踪数据项,使得在从数据处理装置接收到的指令观察指示符与由诊断电路系统输出的条件指令追踪数据项之间存在一一对应。类似地,在由数据处理装置输出的结果输出指示符与由追踪电路系统输出的条件结果追踪数据项之间可存在一一对应。然而,在一些实施例中,追踪电路系统包含追踪压缩电路系统,该追踪压缩电路系统被配置为缓冲与接收到的指令观察指示符相对应的条件指令追踪数据项中的至少一者的输出。在当条件指令的执行的出现(亦即,所缓冲的条件指令及追踪数据项的存在)可通过诊断装置参考正由数据处理装置执行的程序指令的程序映像(programimage)从追踪单元对条件结果追踪数据项中的相应条件结果追踪数据项的输出来推理的情况下,这可为有用的。这提供了便利机制,经由该机制,减少了由追踪电路系统输出且由诊断装置接收的追踪数据量,而不产生任何追踪信息的损失,这是因为诊断装置能够容易地(经由执行的程序指令的映像)重建其追踪数据项被缓冲的条件指令执行的出现。将了解到,追踪电路系统可缓冲与缓冲的条件指令追踪数据项相对应的结果索引码的输出,但是在一些实施例中,追踪电路系统被配置为输出针对所缓冲的条件指令追踪数据项的结果索引码中的至少一者。输出的结果索引码由诊断电路系统用来推理所缓冲的条件指令追踪数据项的输出。这提供便利且可靠的机制,除使用由诊断装置维护的程序映像与诊断装置接收到的条件结果追踪数据项之间的相关性外,亦可经由该机制来推理所缓冲的条件指令追踪数据项的存在。并非所有条件指令皆具有相应的条件指令追踪数据项。一些条件指令追踪数据项并非直接输出,而是通过条件结果追踪数据项推理出的。这是追踪协议特征,通过该特征,将条件指令追踪数据项作为与条件结果追踪数据项相对应的分组的部分被高效地输出。将了解到,追踪电路系统可以若干不同方式持续追踪条件指令执行中何者具有相关联追踪数据(相关联追踪数据在输出至诊断电路系统之前被缓冲)。然而,在一些实施例中,追踪电路系统被配置为监视并维护缓冲记录,该缓冲记录指示接收到的指令观察指示符中何者具有由追踪电路系统缓冲的相应条件指令追踪数据项的输出。与对于其他类型的有条件地执行的指令相比,条件指令追踪数据项的输出的缓冲可更适合于一些有条件地执行的指令。维护指示针对哪些指令观察指示符缓冲相应条件指令追踪数据项的输出的缓冲记录辅助追踪电路系统管理使用条件指令追踪数据项的缓冲的情形。将了解到,缓冲记录可包含关于条件追踪数据项的缓冲的各种不同类型的信息。然而,在一些实施例中,缓冲记录包含最近产生的条件指令追踪数据项及最近输出的条件指令追踪数据项的记录。这使得追踪电路系统能够针对每一条件结果追踪数据项决定若存在条件指令追踪数据项,则哪些条件指令追踪数据项可从相应条件结果追踪数据项隐含。在具有缓冲记录的一些实施例中,当索引码比较被执行以决定如果与条件指令追踪数据项相对应的索引码大于与最近输出的条件指令追踪数据项相对应的索引码且小于或等于与最近产生的条件指令追踪数据项相对应的索引码时,条件指令追踪数据项被确定为已被缓冲。在一些这样的实施例中,当索引码值达到最大值时,索引码值旋迭(wraparound),且索引码比较遵照模运算(moduloarithmetic)。在使用标签至索引码转换操作的一些实施例中,该操作被执行以使得当追踪电路系统(或追踪单元)从数据处理装置接收到指令观察指示符中的一者时,使用指令标签来查找追踪电路系统内的当前程序状态寄存器表,以识别当前程序状态寄存器中的存储相关条件代码标志子集的适当当前程序状态寄存器。对于追踪哪一组条件代码标志与决定特定条件指令实际上是否被执行而言,此举提供了当前程序状态寄存器与给定条件指令之间的直接映射。在使用指令标签查找当前程序状态寄存器表的一些此等实施例中,当前储存在当前程序状态寄存器表中的相关子集条件代码标记中没有一个指示它们要被追踪时,追踪电路系统通过将新索引码值分配给任何新产生的条件指令追踪数据项来执行标签至索引码转换操作。另一方面,当前储存在当前程序状态寄存器表中的子集条件代码标记(亦即,状态条目)中的一个或更多者指示它们要被追踪时,重复索引码值被分配至新产生的条件指令追踪数据项,该重复索引码值重复最近分配的索引码值。这提供了匹配条件追踪数据项与相应结果追踪数据项的便利且有效方式。在使用指令标签来查找当前程序状态寄存器表的一些这样的实施例中,追踪电路系统包含追踪压缩电路系统,该追踪压缩电路系统被配置为缓冲具有新索引码值的条件指令追踪数据项中的至少一者的输出,新索引码值的出现可由诊断装置从追踪单元对条件结果追踪数据项中的相应条件结果追踪数据项的的输出来推理。另一方面,与重复索引码值中的一个或更多者相对应的条件指令追踪数据项不被缓冲。这确保使用索引码来执行条件指令与相关联条件结果之间的相关保持可靠。若仅在索引码值与特定压缩条件指令追踪数据项之间可存在独特对应的情况下使用条件指令追踪数据项的输出的缓冲,则这防止接收到的条件结果与所推理的条件指令之间的不正确相关。在一些这样的实施例中,追踪电路系统被配置为将条件结果追踪数据项与是否允许一个或更多相应条件指令追踪数据项由诊断工具推理的指示一起供应至诊断工具。这确保诊断工具具有关于在何处可允许推理一个或更多条件指令的存在的清楚指导。在被配置为缓冲条件指令追踪数据项但是输出与所缓冲的条件指令追踪数据项相对应的关联结果索引码的一些实施例中,若追踪单元接收分支误预测指示,则由追踪电路系统执行的标签至索引码转换操作被修改。这允许系统适应分支误预测事件,而无需包含在独立产生的条件指令追踪数据项与条件结果追踪数据项之间执行的相关的精确度。在一些实施例中,若相应条件结果索引码与当前由追踪压缩电路系统的缓冲器所缓冲的条件指令索引码相同,则允许推理一个或更多条件指令追踪数据项。将了解到,通过使用独立输出条件指令追踪数据项与条件结果追踪数据项,条件分支指令可与条件非分支指令以相同之方式来追踪。然而,在一些实施例中,追踪电路系统被配置为从追踪单元的追踪输入接口接收与条件或非条件分支指令及加载/储存指令有关的追踪数据,且追踪电路系统被配置为产生第一类型的路标点指示符及第二类型之路标点指示符,第一类型之路标点指示符表示相应指令与已取得的条件/非条件分支或加载/储存指令相对应,第二类型之路标点指示符表示相应指令与未取得的条件分支相对应。使用「路标点」且以与追踪条件非分支指令的方式不同的方式独立地追踪条件分支及加载/储存指令的能力提供了追踪机制的额外灵活性。在一些实施例中,追踪单元进一步包含追踪结果组合电路系统,该追踪结果组合电路系统用于接收由追踪电路系统产生的条件结果追踪数据项且用于产生条件结果追踪数据项中的至少一些条件结果追踪数据项的压缩表示并储存压缩表示,且追踪结果组合电路系统组合压缩表示中的至少一些压缩表示,使得追踪数据项的多个压缩表示作为组合追踪数据项输出。由压缩表示或符记来表示条件结果追踪数据项可为有利的,其中最常用项由较短符记表示。以此方式,若存在常常发生的项,则这些项可由短符记表示,且因为追踪数据项具有特定大小,所以多个符记可被组合以作为单一组合追踪数据项被输出,进而减少输出的追踪数据而非传输的信息。在一些实施例中,追踪结果组合电路系统被配置为产生并储存压缩表示且在接收到无法由追踪结果组合电路系统压缩的条件结果追踪数据项时,将追踪数据项的储存之压缩表示输出为组合追踪数据项,然后输出无法压缩之该条件结果追踪数据项。为了能够有效地将压缩表示组合于组合追踪数据项内,若若干压缩表示在输出之前被储存该,使得可更好地选择哪些符记来组合且进行更有效率的组合,则此为便利的。然而,因为需要维持输出的次序,所以当接收无法由符记表示的项时,则需要输出储存的项,类似地,若缓冲器变满,则将需要通过输出储存的数据而清空该缓冲器。在一些实施例中,追踪电路系统被配置为从追踪输入接口接收与条件或非条件分支指令及加载/储存指令有关的追踪数据,且追踪电路系统被配置为产生第一类型的路标点指示符及第二类型的路标点指示符,第一类型之路标点指示符表示相应指令与预测为已取得的条件分支、预测为已取得的非条件分支或加载/储存指令相对应,第二类型之路标点指示符表示相应指令被预测为未取得条件分支。在使用路标点指示符来指示与条件分支指令及加载/储存指令有关的追踪数据的一些这样的实施例中,指令观察指示符由数据处理装置用来指示条件指令而非条件分支指令的执行,且追踪电路系统被配置为在相同追踪数据流中输出与第一类型的路标点指示符及第二类型的路标点指示符中的至少一者的指令观察指示符相对应的条件指令追踪数据项。在相同追踪数据流中输出条件指令追踪数据项及路标点指示符两者提供了区分条件非分支指令与其他条件指令的便利机制。此外,由于条件分支指令通常比条件非分支指令易于追踪,因此提供用于条件分支指令的追踪的特定机制及用于条件非分支指令的追踪的不同、更适当机制是有意义的。在一些实施例中,结果输出指示符由数据处理装置用来指示条件指令而非条件分支指令的执行,且追踪电路系统被配置为在相同追踪数据流中输出与结果输出指示符相对应的条件结果追踪数据项及第一类型的路标点指示符与第二类型之路标点指示符中的至少一者。在一些实施例中,指令观察指示符由数据处理装置用来指示条件分支指令的执行,且结果输出指示符由数据处理装置用来指示条件指令而非条件分支指令的执行,且其中追踪电路系统被配置为在相同追踪数据流中输出与指令观察指示符相对应的条件指令追踪数据项、与结果输出指示符相对应的条件结果追踪数据项及第一类型的路标点指示符与第二类型的路标点指示符中的至少一者。在一些此等实施例中,追踪电路系统被配置为输出其中相应指令索引码为重复索引码值的与条件指令而非条件分支相对应的第一类型的条件指令追踪数据项及其中相应指令索引码为新索引码值的与条件指令而非条件分支相对应的第二类型的条件指令追踪数据。在一些实施例中,追踪电路系统被配置为输出其中相应指令索引码为重复索引码值的与条件分支相对应的第一类型的条件指令追踪数据项及其中相应指令索引码为新索引码值的与条件分支相对应的第二类型的条件指令追踪数据。将了解到,第一类型的路标点指示符及第二类型的路标点指示符可由追踪电路系统以与分别产生该第一类型的路标点指示符及该第二类型的路标点指示符相同的方式独立地输出,或者任何类型的路标点指示符(相同或不同)可以任何次序序连于一起,以形成分组。然而,在一些实施例中,追踪电路系统被配置为序连多个路标点指示符,以形成用于输出至诊断装置的序连路标点指示符,该序连路标点指示符包含以下中的一者:多个第一类型之路标点指示符;多个第二类型之路标点指示符;以及不同类型的路标点指示符的组合,该组合包含第一类型之路标点指示符中的至少一者及第二类型之路标点指示符中的至少一者。此举可减少与路标点指示符相关联的追踪带宽,而不危及追踪数据流的信息内容。类似地,在一些实施例中,追踪电路系统被配置为序连多个条件指令追踪数据项,以形成序连的条件指令追踪数据项,且代替输出多个条件指令追踪数据项而将序连的条件指令追踪数据项输出至诊断装置。再次,此举提供了与条件指令的追踪相关联的追踪电路系统输出的追踪数据量的减少,而不危及追踪数据流的总信息内容。在一些此等实施例中,序连的条件指令追踪数据项相对于原本将必须输出的多个条件指令追踪数据项具有减少的追踪带宽。将了解到,追踪电路系统可在与序连的路标点指示符完全分离的追踪数据流中输出序连的条件指令追踪数据项。然而,在一些实施例中,追踪电路系统被配置为在相同追踪数据流中输出至少一个序连的条件指令追踪数据项及至少一个序连的路标点指示符。将了解到,对于管理与指令相关联的追踪数据的输出而言,追踪电路系统可以若干不同方式处理指令执行的取消或臆测执行或误预测指令的未完成。然而,在一些实施例中,追踪电路系统被配置为输出重新对准的追踪数据项。在一些此等实施例中,响应于从数据处理装置接收到分支误预测指示符而输出重新对准的追踪数据项。在其他实施例中,响应于从数据处理装置接收到异常中止指示符而输出重新对准的追踪数据项。在其他实施例中,响应于从数据处理装置接收到异常指示符而输出重新对准的追踪数据项。在其他实施例中,响应于从数据处理装置收到取消指示符而输出重新对准的追踪数据项。以此方式使用重新对准的追踪数据项提供了便利且快速的机制,经由该机制,诊断装置可持续追踪何时应执行对接收到的追踪数据的过滤,以考虑臆测执行及/或分支误预测及/或乱序执行。将了解到,可将本发明技术应用于任何数据处理装置中,本发明技术响应于(在与接收到条件指令观察指示符可能不同的处理周期中)从数据处理装置接收到条件结果输出指示符,而独立地输出条件指令追踪数据项与条件结果追踪数据项,而不管数据处理装置是否能够进行臆测或乱序执行。然而,在一些实施例中,追踪电路系统被配置为自数据处理装置接收取消指示符,该取消指示符指示已取消一个或更多已臆测执行且已追踪的指令,且追踪电路系统被配置为响应于取消指示而产生重新对准的追踪项。由追踪电路系统输出的重新对准的追踪项通知诊断工具哪些条件指令追踪数据项与取消的指令相对应及应废除这些条件指令追踪数据项。在追踪单元被配置为输出重新对准的追踪数据项的一些此等实施例中,追踪电路系统被配置为在输出重新对准的追踪数据项之前输出已接收但是尚末输出的任何条件指令追踪数据项。这避免由于某些条件指令追踪数据项的缓冲或在不同时间产生的条件指令追踪数据项(其产生时间横跨重新对准的追踪数据项的输出)的误导引的序连而出现错误。在一些实施例中,追踪电路系统被配置为在输出重新对准的追踪数据项之前输出已接收但尚未输出的任何路标点追踪数据项。在一些实施例中,追踪电路系统被配置为从追踪输入接口接收与条件分支指令及加载/储存指令有关的追踪数据,且其中追踪电路系统被配置为产生路标点指示符,该路标点指示符表示相应指令与条件分支或加载/储存指令相对应,且其中指令观察指示符由数据处理装置用来指示条件指令而非条件分支指令的执行,且其中追踪电路系统被配置为在相同追踪数据流中输出与指令观察指示符相关联的条件指令追踪数据项及输出路标点指示符,追踪电路系统被配置为响应于分支误预测指示符而输出重新对准的追踪数据项,使得在分支误预测指示符接收之后但是在随后发生的条件指令追踪数据项或路标点指示符输出之前,重新对准的追踪数据项被输出。然而,在分支误预测指示符之前输出重新对准的追踪数据项为有效替代方式。在其他实施例中,追踪电路系统被配置为从追踪输入接口接收与条件分支指令及加载/储存指令有关的追踪数据,且其中追踪电路系统被配置为产生路标点指示符,该路标点指示符表示相应指令对应于条件分支或加载/储存指令,且其中指令观察指示符由数据处理装置用来指示条件指令而非条件分支指令的执行,且其中追踪电路系统被配置为在相同追踪数据流中输出与指令观察指示符相关联的条件指令追踪数据项及路标点指示符,追踪电路系统被配置为响应于异常指示符而输出重新对准的追踪数据项,使得在该异常指示符接收之后但是在随后发生的条件指令追踪数据项或路标点指示符输出之前,重新对准的追踪数据项被输出。在一些实施例中,取决于当前程序状态寄存器表的内容,条件指令追踪数据项是针对至少一个指令观察指示符的子集产生的。根据第二方面,本发明提供一种数据处理装置,该数据处理装置包含:数据处理电路系统,该数据处理电路系统响应于程序指令的执行而执行数据处理操作;以及追踪输出接口,该追踪输出接口被配置为将指令观察指示符及结果输出指示符独立地输出至追踪单元,指令观察指示符指示条件指令的执行,结果输出指示符指示数据处理电路系统响应于条件指令的执行而对结果的输出。提供能够输出与条件指令相关联的指令观察指示符且独立地输出相应结果输出指示符的数据处理电路系统促进分离对条件指令的执行的追踪及对相应条件结果的输出的追踪。这提供了追踪诸如条件非分支指令的条件指令的执行的便利机制,且通过使得条件指令执行与相应条件结果独立地追踪而减少了缓冲要求。在数据处理装置的一些实施例中,在第一处理周期中由数据处理装置输出指令观察指示符,且在第二处理周期中由数据处理装置输出结果输出指示符,第二处理周期不同于该第一处理周期。在一些这样的实施例中,数据处理电路系统被配置为执行程序指令序列的臆测执行及乱序执行中的至少一者。分离对条件指令执行的追踪及对条件结果的输出的追踪在由于在这样的系统中使条件指令与相应条件结果发生相关的复杂性而使臆测执行及乱序执行成为可能的情况下尤其有用。根据第三方面,本发明提供一种诊断装置,该诊断装置被配置为接收追踪数据流,该追踪数据串流包含条件指令追踪数据项及条件结果追踪数据项,其中在接收到的追踪数据流中条件结果追踪数据项不同于条件指令追踪数据项,该诊断装置包含:诊断电路系统,该诊断电路系统被配置为参考由数据处理装置执行的程序指令的映像来处理条件指令追踪数据项及该等条件结果追踪数据项,以产生追踪数据流,该诊断电路系统被配置为使用程序指令的映像来决定由数据处理装置执行的程序指令。提供能够接收在接收到的追踪数据流中不同于条件指令追踪数据项的条件结果追踪数据项的诊断装置提供了条件指令的更有效追踪。此外,即使在条件指令追踪数据项与条件结果追踪数据项之间不存在一一对应的状况下,亦提供诊断电路系统使用由数据处理装置执行的程序指令的映像且决定由数据处理装置执行的程序指令的能力。通过向诊断装置提供经由参考程序指令的映像分析条件结果追踪数据项来演绎条件指令追踪数据项的存在的能力,改良了诊断装置处理压缩的追踪数据流的能力。在根据本发明的诊断装置的一些实施例中,诊断装置被配置为从追踪单元接收追踪数据流中的路标点追踪项,路标点追踪项各自指示分支指令、加载指令及储存指令中的一者已由数据处理装置执行。诊断装置接收到的追踪数据流另外包含条件指令追踪数据项及条件结果追踪数据项,且路标点追踪项及条件指令追踪数据项的接收次序不同于相应路标点指令及条件指令的执行次序。在一些这样的实施例中,诊断装置包含用于缓冲接收到的路标点追踪项的路标点缓冲器及用于缓冲接收到的条件指令追踪项的条件指令缓冲器。这使得诊断装置更简单地验证路标点追踪项及条件指令追踪数据项的适当次序,且使接收次序与诊断电路系统所分析的程序指令的映像所隐含的次序相符。在一些这样的实施例中,诊断电路系统被配置为通过参考程序指令映像独立地分析路标点缓冲器中的条目及条件指令缓冲器中的条目,来排列接收次序,以获得执行次序。在根据本发明技术的诊断装置的一些实施例中,若诊断电路系统遭遇程序映像中的条件指令,但是条件指令追踪项当前未出现于条件指令缓冲器中,则诊断电路系统被配置为延迟程序映像的相应执行线程的进一步处理,直至条件追踪项出现于条件指令缓冲器中为止。这确保程序映像中的指令序列与诊断电路系统接收到的信息之间的有效相关。这为诊断电路系统提供灵活性来处理压缩追踪数据流的接收及分析,压缩追踪数据流的一些追踪信息必须参考程序映像来重建。根据第四方面,本发明提供一种基于从数据处理装置接收到的信息产生追踪数据项的方法,追踪数据项指示数据处理装置的处理活动,该方法包含:从数据处理装置接收至少一个指令观察指示符及至少一个结果输出指示符,至少一个指令观察指示符指示条件指令的执行,至少一个结果输出指示符指示数据处理装置执行至少一个条件指令的结果的输出;处理至少一个指令观察指示符及至少一个结果输出指示符,且被配置为从至少一个指令观察指示符及至少一个结果输出指示符产生相应的条件指令追踪数据项及条件结果追踪数据项,且独立地输出条件指令追踪数据项及条件结果追踪数据项,从而使得诊断装置能够对条件指令及相应条件结果进行分离追踪分析。根据第五方面,本发明提供一种在数据处理装置内产生追踪数据项的方法,追踪数据项指示数据处理装置的处理活动,该方法包含:响应于程序指令的执行而执行数据处理操作;以及独立地将指令观察指示符及结果输出指示符输出至追踪单元,指令观察指示符指示条件指令的执行,结果输出指示符指示数据处理电路系统响应于条件指令的执行而对结果的输出。根据第六方面,本发明提供一种用于处理由数据处理装置产生的追踪数据的诊断方法,该方法包含:接收追踪数据流,该追踪数据流包含条件指令追踪数据项及条件结果追踪数据项,其中在该接收到的追踪数据流中条件结果追踪数据项不同于条件指令追踪数据项;参考由数据处理装置执行的程序指令的映像来处理条件指令追踪数据项及条件结果追踪数据项,以产生追踪数据流;以及使用程序指令的映像来执行条件指令追踪数据项与条件结果追踪数据项之间的相关,以决定数据处理装置执行的处理步骤。在随附权利要求书中定义本发明的至少实施例的进一步方面及特征。从属权利要求的特征在适当时可与独立权利要求的特征组合,且从属权利要求的该等特征可处于除权利要求书中明确阐述的那些组合之外的组合中。将参考附图中所图示出的优选实施例来仅仅通过示例进一步描述本发明。附图说明图1示意性地说明根据本发明的实施例的数据处理系统;图2更详细地示意性说明图1的追踪单元的当前程序状态寄存器表;图3A为表,该表示意性地说明与四个程序指令的序列的执行相关联的追踪及标记;图3B、图3C及图3D为表,这些表展示当与图3A的表中完全相同的四个指令的序列被乱序而非顺序执行时,哪些当前程序状态寄存器(CurrentProgramStatusRegister;CPSR)值被追踪及哪些c结果索引码被产生;图4为状态机,该状态机示意性地说明用于图1的CPSR150的三个状态CPSR标志;图5为表,该表示意性地说明三个条件指令(ADDEQ、ADDNE、ADDVS)的执行,其中在译码第三个条件指令之后评估条件结果,且该表展示条件结果有效载荷及与每一指令译码阶段相对应的CPSR表动作;图6A为表,该表示意性地说明用于条件指令标签B的更新必须不会导致在指令取消事件之后立即针对ADDNE指令产生新c原子索引码的情况;图6B为表,该表示意性地说明,与图6A中的情形相反,在取消条件指令之后使用相同c原子索引码并非始终正确;图6C、图6D及图6E描述参阅图3A至图3D所述的技术的替代性技术,在这些替代性技术中,二态CPSR表被维护;图7A至图7D为表,这些表示意性地说明在相同追踪数据流内如何处理路标点及c原子;图8为流程图,该流程图示意性地说明在接收到追踪数据流之后由图1的诊断电路系统采取的动作,追踪数据流含有条件原子分组分组及路标点分组分组两者;图9A至图9C为表,这些表示意性地说明路标点及条件指令追踪数据项的序连;图10为流程图,该流程图示意性地说明由图1的诊断电路系统采取以分析进入追踪数据的动作;图11A至图11C示意性地说明重新对准(relignment)追踪数据项在追踪数据流中的相对定位;图12A及图12B为表,这些表示意性地说明如何基于条件结果追踪数据来隐含条件指令执行;图13为表,该表示意性地说明类似于图12B的序列的追踪数据序列,但是在该追踪数据序列中,展示储存在“最后c原子产生索引码”寄存器及“最后c原子输出索引码”寄存器中的值;图14a为流程图,该流程图示意性地说明在输出追踪流及实施产生某些c原子但是缓冲这些c原子的追踪压缩方案过程中图1的ETM的动作;图14b示意性地说明根据本发明的实施例的追踪单元;图15示意性地说明处理装置、追踪电路及诊断装置;图16说明用于由英国剑桥(Cambridge,UK)的ARMLimited设计的处理器中的条件标志及条件状态的实例;图17说明用于识别条件标志值之特定设定的识别符的实例;图18说明在执行条件更新指令之后即追踪条件标志的值的方法;图19说明分析在图18的方法中产生的追踪数据的相应方法;图20说明在图18的方法中产生的追踪流的实例及根据图19的方法分析该追踪流的实例;图21说明程序指令序列的实例,其中多个条件更新指令顺序地发生而无任何介入条件指令;图22说明在执行条件指令之后即追踪条件标志的值的方法;图23说明分析在图22的方法中产生的追踪数据的相应方法;图24说明在图19的方法中产生的追踪流的实例及根据图20的方法分析该追踪流的实例;图25说明在执行条件指令之后即追踪条件标志的至少一个所需子集的值的方法;图26说明分析在图25的方法中产生的追踪数据的相应方法;以及图27说明使用图25的方法产生追踪流的实例及使用图26的方法分析该追踪流的实例。具体实施方式图1示意性地图示根据本发明的实施例的数据处理系统。数据处理系统包含:指令存储器90;中央处理单元(centralprocessingunit;CPU)100;嵌入式追踪宏单元(ETM)180,该嵌入式追踪宏单元180含有追踪电路系统;以及诊断电路系统196,该诊断电路系统196用于分析嵌入式追踪宏单元180的输出。中央处理单元100包含:指令获取单元110;管线120,该管线120包括解码阶段122;一组寄存器器130;算术逻辑单元(arithmeticlogicunit;ALU)140;一组当前程序状态寄存器(CPSR)150;存储器接口160;指令输出接口172;以及结果输出接口174。指令获取单元110自储存于指令存储器90中的计算机程序92提取指令且将所提取的指令供应至管线120的解码阶段122。图1中所示的CPU中央处理单元100为ARM管线式数据处理器。管线120允许与程序指令的执行相关联的若干操作得以实质上同时而非以串行方式进行,且因此增加了指令的吞吐量。由指令获取单元110执行的指令提取阶段可视为管线120的组成部分。管线120的解码阶段122涉及来自寄存器库130的寄存器的解码,所述寄存器待用于最近提取的特定指令的执行。CPU100被配置为执行程序指令的臆测执行及乱序执行。继解码阶段之后,指令进行至管线的运行时间(未图示),其中读取来自寄存器库130的寄存器且使用算术逻辑单元140来执行指令。管线120的最后阶段涉及将指令执行的一个或更多结果写回寄存器库。CPU100包含寄存器库130,该寄存器库130具有多个寄存器,每一寄存器皆具有固定长度。寄存器库130并入一组通用寄存器供程序指令的执行期间使用。应注意,诸如算术运算、比较、逻辑运算及数据移动操作的ARM数据处理指令仅在寄存器上而不在存储器中工作,这是因为ARM架构为加载/储存架构。专用程序计数器(未图标)亦包含于寄存器库130中,该专用程序计数器索引当前正提取的程序指令。包括在CPU内的另外的寄存器为一组专用当前程序状态寄存器(currentprogramstatusregister;CPSR)150及一组专用保存程序状态寄存器(savedprogramstatusregisters;SPSR)(未图示)。在图1的实施例中,寄存器库130的寄存器R14为链接(link)寄存器,而寄存器R15为程序计数器。特定指令允许对当前程序状态寄存器(CPSR)150的存取。当前程序状态寄存器150各自包含一组四个条件代码标志,亦即Z、V、C及M。下文将参阅图2更详细地描绘这些条件代码标志。除四个条件代码标志之外,CPSR150进一步包含“模式位”,这些模式位定义当前处理器模式;及中断禁止位。寄存器库130的链接寄存器R14储存用于执行所谓的“具有链接的分支(BranchwithLink)”程序指令时的返回地址。返回地址由R15中的程序计数器计算。为使程序的执行流能够从链接分支返回,链接寄存器R14的内容被复制至程序计数器寄存器R15中。储存在CPSR中的标志Z、V、C及M的当前值与用来决定是否应执行有条件地执行的指令的某些条件相对应。虽然大多数指令集仅允许分支指令得以有条件地执行,但是ARM架构允许许多指令得以有条件地执行,这是因为许多ARM指令含有条件字段,该条件字段决定CPU100是否将执行该指令。CPSR150的内容用来评价由指令的条件字段规定的条件是否已满足。有条件地执行任何种类的指令的能力允许不具有分支的非常密集的内嵌码。消除对程序代码中包括许多分支指令的需要使得指令执行更有效率,这是因为分支事实上通常简单地使管线120暂停。不执行若干条件指令(其中规定条件未满足)的时间损失通常小于否则将需要的分支指令或子例程呼叫的额外负担。为有条件地执行指令,简单地以适当条件后固定指令。举例而言,在ARM指令集中,非条件相加(ADD)指令采取形式“ADDr0、r1、r2”,但是为了在零标志Z被设定的条件上有条件地执行此非条件相加指令,可将此指令改变为“ADDEQr0、r1、r2”。存储器接口160用来从存储器加载数据和将数据储存至存储器。如图1中所示,自管线120的解码阶段122至CPU100的指令输出接口172且至ETM180的指令输入接口182提供第一路径123。通常,自处理器的解码阶段122追踪条件指令,而自ALU140追踪相应条件结果。第二路径152将CPU100的CPSR150连接至CPU100的结果输出接口174且接着连接至ETM180的结果输入接口184。亦存在将CPSR150连接至管线120的路径。因此,可看出,CPU100具有用于条件指令的一个输出接口172及用于相应条件结果的另一不同输出接口174。将了解到,并非所有指令都为条件指令,但是图1的实施例尤其关注于说明条件指令的执行及追踪。嵌入式追踪宏单元180为追踪单元,该追踪单元为CPU100提供实时指令追踪及数据追踪。ETM180产生追踪信息,该追踪信息由诊断电路系统196用来重建储存在指令存储器90中的计算机程序92的所有或部分计算机程序的执行。ETM180包含指令接口182及结果接口184两者,该指令接口182用于从CPU100接收条件指令观察指示符,该结果接口184用于从CPU100接收相应条件结果指示符。指令的指示通常并不指示该指令确实将执行,这是因为指示可从管线的早期阶段获得,且若指令将完全执行,则该指示在许多稍后的处理周期之前将并非已知。CPU100独立地经由指令接口172输出条件指令观察指示符且经由追踪结果接口174输出条件结果输出指示符。在CPU100的第一处理周期中输出给定条件指令观察指示符,而在CPU的第二不同处理周期中输出相应条件结果输出指示符。因此,在追踪电路系统180的指令接口182接处收到条件指令观察指示符的定时不同于在结果接口184处接收到相应条件结果输出指示符的定时。CPU100输出条件指令观察指示符及条件结果输出指示符两者以及关联“标签”,这些关联“标签”与所论述的条件指令相关联的CPSR150内的特定寄存器。对于每一条件指令,相应条件结果输出指示符含有有效载荷,该有效载荷允许诊断电路系统196决定条件指令的通过/失败状态。此有效载荷为以下中的一者:1.通过/失败结果;2.局部CPSR值;3.全CPSR值(应注意,一些实施例将永远不会输出局部CPSR值);以及4.一些其他输出。应注意,并非所有条件指令皆具有相应追踪输出,实情为,仅条件指令的子集具有相应追踪输出(条件结果输出指示符)。若由CPU指令接口172输出与给定条件指令相对应的指令观察指示符,则ETM180产生与该条件指令有关的所谓的“c原子”,且c原子该条件指令的追踪输出(由CPU100输出的指令观察指示符)相对应。当相应条件结果输出指示符经由CPU的结果输出接口174输出至结果接口184时,这表示为“c结果”。因此,ETM指令接口182接收条件指令观察指示符及与之相应的标签(通常但并非始终标识关联的CPSR150寄存器),而ETM结果接口184接收条件结果输出指示符及与之相应的标签。ETM180包含指令索引码翻译电路系统186,该指令索引码翻译电路系统186从ETM指令接口182接收输入且被配置为将条件指令观察指示符及相应标签转换为c原子。类似地,ETM180包含结果索引码翻译电路系统188,该结果索引码翻译电路系统188连接至ETM结果接口184且被配置为将从结果接口184接收到的条件结果输出指示符及相应标签转换为c结果及相应索引码。由ETM指令接口182接收到的条件指令观察指示符包含标签及条件类型两者,标签表示CPU的关联CPSR寄存器,条件类型诸如等于(equalto;EQ)、负号(minus;MI)或小于(lessthan;LT)。经由ETM结果接口184接收到的条件结果输出指示符包含关联标签(亦通常表示CPU100的关联CPSR寄存器)及结果有效载荷。标签系统系由CPU100用来追踪哪一个指令观察指示符(c原子)与哪一个结果输出指示符(c结果)相对应。指令索引码翻译电路系统186及结果索引码翻译电路系统188通过使用由核心标签索引的追踪索引码表将核心标签转换为追踪索引码,这遵循预定序列。由于当条件结果输出指示符被评估得太迟时追踪索引码可能发生冲突,因此使用特殊索引码来解决此问题。当将索引码更名为顺次索引码时,有可能下一顺次索引码与结果输出指示符(c结果)尚未输出之较早指令执行指示符(c原子)相同的值。在此状况下,不使用顺次索引码,这是因为如此做将产生两个结果输出指示符,该两个结果输出指示符对于不同指令执行指示符具有相同索引码。替代地,使用特殊索引码,该特殊索引码具有从不用作顺次索引码的值。特殊索引码与标签之间存在1:1映射。举例而言,若存在8个标签,则可存在16个顺次索引码及8个特殊索引码。指令索引码翻译电路系统186的输出被供应至第一追踪产生电路系统190,该第一追踪产生电路系统190将进入的c原子及相应索引码转换为指令追踪数据的分组。类似地,结果索引码翻译电路系统188将c结果及相应索引码供应至第二组追踪产生电路系统192,该第二组追踪产生电路系统192产生条件结果追踪分组作为输出。条件指令追踪分组(包含分组化c原子及关联索引码)及条件结果追踪分组(包含分组化c结果及相应索引码)两者输出至先进先出(First-in-first-out;FIFO)194供储存。储存在FIFO194中的数据供应至诊断电路系统196。两组索引码翻译电路系统186、188有效地将核心标签(标识用于条件指令及结果的关联CPSR寄存器)翻译为更名操作类型的追踪电路系统索引码。下文将参阅一些特定实例更详细地描绘此状况。诊断电路系统196使用接收到的追踪数据来重建CPU100中的执行事件。为如此做,诊断电路系统196访问与计算机程序92的复本相对应的计算机程序映像199,计算机程序92的指令正由CPU100执行。使用此程序映像199允许诊断电路系统分析程序代码,以决定例如分支指令发生在指令执行序列中的何处。在接收到追踪数据之后,诊断电路系统196将条件指令追踪数据(与由CPU100输出的指令观察指示符相对应)储存于c原子FIFO197中且将尤其与条件分支指令及条件加载/储存指令有关的追踪数据储存于路标点FIFO198中。如下文将论述的,“c原子”用来追踪除条件分支之外的所有条件指令,且“路标点”用来追踪条件分支或非条件加载/储存指令。然而,在一些状况下,例如对于条件加载/储存而言,单一指令为路标点及c原子两者。如图1中所示,ETM180包含相应CPSR表193,且诊断电路系统196亦包含CPSR表200。这两个CPSR表,亦即CPSR表193、CPSR表200用来在指令乱序执行时追踪应追踪哪些CPSR结果。在一些情况下,将追踪多个CPSR值,以便遵循单一标志设定指令。在图2中更详细地说明了示例性CPSR表193。应注意,CPSR表193(参见图2)包含CPSR状态条目(或CPSR标志标记),而非如由处理器使用之条件代码标志。如图2中所示,CPSR表193被配置为储存与每一CPSR条件代码标志有关的二位(三状态)值。四个CPSR条件标志为Z标志、V标志、C标志及N标志。Z标志指示来自ALU标志的零结果;V标志指示发生在指令执行期间的ALU操作溢出;C标志指示ALU操作产生进位,例如,结果包含超过寄存器宽度的若干位;且N标志指示存在来自ALU标志的负结果(负号)。在图2的CPSR表193中,存在与三个不同状态相对应的标志。状态如下:1.未追踪且未标记的位值00;2.待追踪且已标记的位值01;以及3.已追踪且已标记的位值11。储存在ETM的CPSR表193中的状态由指令索引码翻译电路系统186及结果索引码翻译电路系统188用来决定在标签至索引码转换过程中何时应产生并应用序列中的下一追踪索引码。如前所述,与条件指令及条件结果两者一起输出的核心标签通常标识正由所述特定指令使用的特定CPSR,在此状况下为以下六个可能CPSR寄存器中的一者:CPSRA、CPSRB、CPSRC、CPSRD、CPSRE或CPSRF。此外,规定用于六个CPSR缓存器中之每一者之四个可能的标志状态(Z、V、C或N)中之一者。此外,还规定了针对对这六个CPSR寄存器中的每一个的四个可能的状态(Z,V,C或N)。该表中亦储存有在产生指令追踪数据时使用的索引码值。当产生结果追踪数据时,在表中进行查找以决定待使用的索引码。图3A为表,该表示意性地说明四个程序指令的序列的顺序执行,该四个程序指令包括三个不同条件相加指令:ADDEQ;ADDNE及ADDVS。图3A至图3D的实例展示在CPSR表中追踪两个不同CPSR条件代码标志(亦即,标志标记),该CPSR表针对每一CPSR值仅储存单个状态。在图3A的表中,执行的第一指令为比较指令CMP,该比较指令CMP导致所有标志位清除为零,这是因为比较为一运算,后续条件指令取决于该运算的结果。亦即,后续三个条件指令的执行或其他方面取决于CMP的执行结果。第一条件指令为ADDEQ指令,该ADDEQ指令为取决于比较是否产生精确等式的加法运算。此条件指令使用CPSR的Z标志,且因此在执行相加ADDEQ指令之后将CPSR表中的Z标志设定为1。因此,包括Z标志的CPSR被追踪。接下来,执行ADDNE指令,该ADDNE指令亦使用Z标志,这是由于该ADDNE指令对应于仅在比较的结果为不等式时才执行的加法运算。因此,在由CPU100(参见图1)执行ADDNE指令之后,标记位未改变。最后,执行ADDVS指令,该ADDVS指令使用与溢出相对应的CPSR的V标志,,以便在执行此指令时,将V标志设定为1且Z标志保持设定。因此,在图3A的四个指令的执行的结尾,包括V标志及Z标志两者的CPSR150被追踪。图3B、图3C图及图3D为表,这些表展示当执行与图3A的表中完全相同的四个指令的序列但是以乱序而非顺序执行时追踪哪些CPSR值及产生哪些c结果索引码。在此状况下,取决于执行CPU100的定时及能力,存在三个不同可能结果。图3B的表中,条件结果为快速可用的,且因此不同追踪索引码被用于第二个c原子。所有三个加法条件指令在图3B情况中具有相同条件指令标签,这是因为这三个加法条件指令是否有条件地执行皆取决于相同比较指令CMP(四个指令的序列中的第一指令)的结果。当遭遇第一个条件加法指令ADDEQ时产生c原子索引码“0”,这是因为此取决于Z标志。针对后续ADDNE指令并未产生新c原子索引码,这是因为此取决于与先前指令相同的Z标志。然而,将第二c原子索引码“1”分配至ADDVS指令,此取决于不同CPSR标志,亦即,V标志。第一条件指令(ADDEQ)指令的条件结果在紧随ADDEQ的解码后的周期中变为可用,如图3B表中所示,且条件结果标签A被转换为C结果索引码零,该C结果索引码零的有效载荷为Z标志。ADDVS指令的条件结果在紧随该解码指令之后的周期中变为可用,且此举导致产生第二c结果索引码,该第二c结果索引码具有值“1”及有效载荷V标志。图3C图示与图3A相同的四个指令在乱序处理器中的执行,其中比图3B的情况花费更长的时间来评估条件结果(由于CPU100的能力)。在此情况下,第一条件结果标签在解码ADDVS指令(四个指令的序列中的第四个指令)之后的周期中输出。因此,在此情况下,同样c结果索引码“0”用于与ADDEQ指令(使用Z标志)相对应的c原子及与ADDVS指令(使用V标志)相对应的c原子两者,这是因为他们将共享单一c结果索引码“0”,该单一c结果索引码“0”具有有效载荷Z标志及V标志两者。图3D的表为图3A的指令序列的乱序执行结果的最终实例。在此情况下,在由CPU100完全验证四个指令(CMP、ADDEQ、ADDNE、ADDVS)的序列以外的两个更迟指令(CMP及SUBEQ)之后,条件结果在乱序处理器中变为可用。用于SUBEQ指令的条件指令标签为“B”,而用于三个先前条件指令(ADDEQ、ADDNE、ADDVS)的条件指令标签为“A”,从而反映出这三个指令所取决的条件为第一CMP而SUBEQ所取决的条件为第二CMP的事实。可见,条件结果标签B在条件结果标签A之前,且因此在验证具有条件指令标签A的先前三个条件指令之前完全验证条件指令SUBEQ。应注意,每一次解码CMP指令(其他条件指令所取决的指令),皆存在对CPSR的改变且因此存在对条件指令标签的相应改变。因此,在图3D的表中,用于条件指令标签“A”的结果在用于条件指令标签“B”的条件结果之后(亦即,在条件指令标签“B”的条件结果的后续处理周期中)到达。条件结果B的有效载荷为Z标志,而条件结果标签A的有效载荷为Z标志及V标志两者。根据本发明的实施例的条件指令与条件结果的分离追踪使得能够获得追踪结果的较佳吞吐量。这根据图3D显而易见,这是因为在先前已知系统中将必须缓冲与图3D的表中所有五个条件指令相关联的追踪数据项,直至标记“A”的条件结果准备好输出为止。通过比较,根据本发明的实施例,当与所有四个指令相对应的c原子及索引码产生时即可输出c原子及索引码,这是因为可在不同处理周期中输出c原子及相应索引码。ETMCPSR表193用于决定何时需要c结果(与接收到的c原子相对应)及应追踪哪些CPSR标志。当将CPU100配置成能够计算局部CPSR值且甚至在并非所有CPSR标志为已知时能够验证条件指令时,此技术用于减少已追踪标志值的数目。局部CPSR结果为并非CPSR中所有标志皆为已知的情况下的结果。举例而言,ADDEQ指令仅需要待验证的Z标志,因此含有Z标志的局部CPSR结果足以验证用于该条件指令的结果。从图3B、图3C及图3D的实例中的“c结果索引码”列及“c原子索引码”列可看出,在一些情况下使用序列中的下一追踪索引码值,而在其他情况下使用与不同条件指令相对应的相同追踪索引码值。为决定何时应使用序列中的下一追踪索引码,使用储存在CPSR表中的状态。当产生与指令相对应的c原子(指示CPU100已开始执行该指令)时,则使用条件指令标签作为索引来查找CPSR的标志状态,这是因为标签标识与该条件指令相关联的特定CPSR。当前程序状态寄存器标记位如下文参阅图22及图25所述被查找和使用。对于每一CPSR,存在不同的位集。现返回图3B、图3C及图3D的第一实施例,ETMCPSR表193储存三个状态:(i)未追踪;(ii)待追踪;以及(iii)已追踪。在此实施例中,为决定何时应使用序列中的下一追踪索引码(c原子索引码),使用储存在CPSR表193中的状态,且当ETM指令索引码翻译电路系统186产生c原子时,使用相应条件指令标签(由CPU产生)作为索引来查找标志状态。在以下表中概括了分配追踪索引码的方式。如此表中所示,当在ETMCPSR表193中无标志状态值指示为“待追踪”时,则分配序列中的下一追踪索引码值(c原子索引码)。然而若与c原子标签相对应的特定CPSR的标志状态中的一个或更多者为“待追踪”,则使用与用于最近c原子相同的追踪索引码值(c原子索引码)。图4为状态机,该状态机示意性地说明用于图1的CPSR150的三个状态CPSR状态标志。首先重置系统,然后在阶段410处将给定CPSR状态标志设定为“未追踪”状态。若追踪到与给定CPSR相对应且需要关联CPSR状态标志的条件原子,则CPSR状态标志从“未追踪”状态410改变为“待追踪”状态420。CPSR状态标志保持在此状态中,直至追踪到与给定CPSR相对应且包括关联标志的条件结果为止,在追踪到与给定CPSR相对应且包括关联标志之条件结果之后,给定CPSR状态标志即改变为“已追踪”状态430。CPSR状态标志保持在此已追踪状态430中,直至观察到与给定CPSR相对应的标志设定指令为止,在此状况下,进行从“已追踪”状态430回到“未追踪”状态410的过渡。图5的表再访上文图3C的实例,亦即,三个条件指令(ADDEQ、ADDNE、ADDVS)的执行,其中在解码第三条件指令之后评估条件结果。图5为图4的三态系统的实例。除条件指令标签、c原子索引码及条件结果标签(亦图示于图3C中)之外,图5的表亦展示条件结果有效载荷(自右侧起的第二行)、与每一指令解码阶段相对应的CPSR表动作(最右侧行)。查看图5表中的条目,在解码CMP指令(该CMP指令的执行结果决定附加至后续三个条件指令的条件是否满足)之后,将标签A的所有状态设定为“未追踪”。接下来,在解码ADDEQ指令之后,输出条件指令标签A且输出c原子索引码“0”,此后,在ETMCPSR表193中,查找“CPSRA”(参见图2)且看出四个标志中没有一个为“待追踪”,因此开始新群组。需要c原子,这是因为用于标签A(CPSRA)的标志Z的状态设定为“未追踪”。接下来,由于条件指令ADDEQ的解码,将用于标签A的标志Z的状态设定为“待追踪”。在ADDNE指令的解码(与ADDEQ的解码相连续)之后,由于该指令将基于相对于附加至ADDEQ指令的条件(等于)的对立条件(不等于)有条件地执行,因此这还取决于条件代码标志Z,该条件代码标志Z在先前解码阶段处已标记。因此,来自标签A的标志Z的状态已设定为“待追踪”,且不需要新c原子。如前所述,若相关CPSR的标志中没有一个设定为已追踪,则才使用新追踪索引码值。当ADDVS指令处于解码阶段中时,输出另一c原子索引码“0”,这是因为Z标志已设定为“待追踪”且新群组未曾开始。然而,在此状况下需要c原子(不同于ADDNE指令的状况),这是因为用于经标记的CPSRA的标志“V”的状态先前并未设定为“待追踪”。因此,将用于CPSRA(参见图2)的标志V的状态设定为“待追踪”。接下来,CPU100指示标志Z有效但是标志V无效。然而,通过查找CPSR表193已知,需要Z标志及V标志两者来验证三个先前条件指令(ADDEQ、ADDNE、ADDVS),因此条件结果仍无法完全追踪。当具有条件结果有效载荷Z标志及V标志两者的条件结果标签A的输出指示条件结果变为可用时,CPU100指示Z标志及V标志两者均有效。ETMCPSR表193告诉我们这两个标志为追踪条件结果所需要的全部标志。因此,将用于标签A(CPSRA)的Z标志及V标志的状态设定为“已追踪”状态。应注意,Z标志及V标志两者均需要为有效,以追踪条件结果。查找ETMCPSR表193是必需的,以便确保在由CPU100发出取消指令之后可达成正确的c原子及c结果相关。图6A及图6B图为表,这些表提供针对图4的三态CPSR标志系统是否应开始新群组(亦即,新c原子索引码)的实例。图6A的表示意性地说明用于条件指令标签B的更新必须不使得在指令取消事件之后立即针对ADDNE指令产生新c原子索引码的状况。在图6A的表中,当ADDEQ指令处于解码阶段中时,将用于标签A(CPSRA)的Z位标志设定为“待追踪”。继分支指令(图6A表中的第三指令)之后的第二CMP指令产生不同CPSR(亦即,CPSRB),因此将条件指令标签B分配至后续条件指令SUBEQ。此外,针对SUBEQ产生不同c原子索引码,这是因为与CPSRB相对应的标志状态中没有一个当前设定为“待追踪”。在解码SUBEQ指令之后的周期中输出用于条件指令标签B的条件结果标签,因此输出c结果索引码“1”,从而与SUBEQc原子索引码“1”匹配。接下来,在图6A中,指令CMP及指令SUBEQ均取消,但是相关联的c结果索引码及c原子索引码“1”仍出现于追踪流中。然而,当解码ADDNE指令时,条件指令标签返回至值A(先前用于ADDEQ)且需要c原子索引码“0”(亦即,并非新索引码),这是因为此ADDNE指令仍与最近未取消的比较运算CMP相关联,该最近未取消的比较运算CMP与条件指令标签A相对应。图6B图示替代性实例,该替代性实例说明,与图6A中的情形相反,在取消条件指令之后使用相同c原子索引码并非始终正确。在图6B的实例中,若ADDNE指令(在误预测分支取消之后解码)并未开始新索引码,则与条件结果标签B相对应的ADDNE指令的结果将应用于ADDNE指令及ADDEQ指令两者,此举为不正确的,这是因为ADDNE指令及ADDEQ指令与不同“CMP”指令相关联。图6B的表与图6A的表之间的差异在于,在图6B的表的状况下,并未取消第二CMP(仅取消分支指令及在分支之后且在接收到取消请求之前的任何指令),因此在此状况下事实上需要新条件指令标签及新c原子索引码。在图6B中,在分支指令之后存在非条件指令“SUB”。图6C、图6D及图6E描述参阅图3A至图3D所述的技术的替代性技术。在此替代性技术中,维护二态CPSR表。根据此替代性实施例,当前CPSR以不同于表中的其他CPSR的方式被处理。如前所述,在图2中,存在六个不同CPSR,每一CPSR皆具有一组相关联的四个条件标志状态(给予总计24个不同表项)。在图6C至图6E图的替代性实施例中,当前CPSR经处理使得对于当前CPSR仅需要每一标志具有两个状态。然而,这两个状态意谓不同事物。图6C及图6D图示二态CPSR表(当前CPSR的每一标志仅一个位)及发送中位(infilghtbit)(每一CPSR的每一标志一个位)如何与图4的状态图的三个状态相对应。图6E为使用发送中位的实例。若CPU100不能呈现局部CPSR结果但是仅可呈现全CPSR结果,则不必将每一标志de状态储存在CPSR表中。替代地,可为CPSR中的每一者储存单个位,从而指示任何CPSR是否为“待追踪”,亦即,结果在CPU管线120中为“发送中的”。在图6C至图6E实施例(不同于CPSR表的图2实施例)中,每一CPSR标签皆具有单一位(表示为“发送中”位),该单一位指示将来“c结果”是否为预期的。每一CPSR标志两个状态的当前CPSR的CPSR表连同“发送中”值与图4的状态图的三个状态相对应。图6C的表解释如何使用并维护这些发送中位。响应于正由ETM指令索引码翻译电路系统186输出的c原子,设定与条件指令标签(在图6C中表示为“RH标签”)相对应的发送中位。若条件结果由第二追踪产生电路系统192自ETM结果索引码翻译电路系统188接收,若设定了与条件结果标签(在图6C中表示为“LH标签”)相对应的发送中位,则c结果经由FIFO194在追踪数据流中输出且该位此后清除。发送中位用于决定何时已针对具有相同标签(亦即,与相同CPSR相对应)的先前c原子接收先前c结果。当产生与指令相对应的c原子时,使用关联条件指令追踪数据项标签(由CPU100输出)作为索引来查找发送中位。图6D的表展示在此实施例中如何由ETM指令索引码翻译电路系统186(参见图1)产生追踪索引码。具体地,若发送中位值与意谓结果并非为发送中的值“0”相对应,则使用下一追踪索引码值。若另一方面发送中位值具有指示条件结果为发送中的值“1”,则使用与最近c原子相同的追踪索引码值。因此,经由两个数据储存库追踪图4的状态图的三个状态:(1)图6D的发送中表,其中每一CPSR的每一标志具有一个位(两个状态)。这些指示标志在由数据处理装置发出时是否需要追踪,亦即,需要结果的哪些位以重建相应较早条件指令的结果。(2)当前CPSR之CPSR表,其中一个CPSR(当前CPSR)的每一标志具有两个状态(标记),指示是否追踪条件指令作为c原子。图6E的表再访图3A的实例且展示在实施图6C及图6D的规则时如何设定发送中标签。在图6E的实例中,与三个条件指令ADDEQ、ADDNE及ADDVS相对应的条件结果在已解码指令ADDVS之后变为可用(类似于图3C的状况)。当在与解码指令ADDEQ的列相同的列相对应的追踪(图6E表)中输出第一c原子时,则查找用于标签A的发送中位且发现结果为“0”(并非发送中),因此以新追踪索引码值开始新群组。在此状况下,c原子索引码为“0”。当在与解码指令ADDVS相同的阶段处产生下一c原子时,则再次查找用于条件指令标签A的发送中位,此是因为指令ADDEQ及指令ADDVS共享相同条件指令标签。在此状况下,结果为“1”(指示发送中),因此不开始新群组且使用与最近c原子相同的追踪索引码值。因此,用于ADDVS指令的c原子索引码亦为“0”。当在解码ADDVS之后的阶段输出条件结果标签A时,则用于标签A的发送中位被清除。此位清除指示与条件指令标签A相对应的结果已得到验证,因此在核心管线中不再为“发送中”。图7至图11示意性地说明如何在相同追踪流中使条件分支指令与其他条件指令分离及如何稍有不同地处理它们。具体而言,使用所谓的“路标点”来追踪条件分支指令及(非条件)加载/储存指令,而使用如上文所述的“c原子”来追踪所有其他条件指令。已知使用路标点来追踪条件分支且指示已取得哪些分支及未取得哪些分支。此状况详细地描述于转让给ARMLimited的授权美国专利US7,707,394中。路标点可用来不仅表示条件分支指令,而且亦表示加载/储存指令。US7,707,394解释如何在追踪数据流中一起侦测并输出路标点序列,以便单一追踪数据项表示多个路标点。可以与根据本发明的实施例的上文所述由CPU100使标签与c原子(条件指令观察指示符)相关联的方式类似的方式,来使核心标签与路标点相关联。核心标签由ETM更名,以形成遵循预定次序的追踪索引码。由于追踪索引码遵循预定次序的事实,不存在一起输出路标点与索引码的严格要求。事实上,在追踪数据流中输出的路标点由如图7A的表中所指示的两个值中的一者标示。如此表中所示,“E”标示与以下两者中的任一者相对应的路标点:(a)条件分支指令,当观察程序指令时,实际上针对该条件分支指令取得分支;或(b)加载/储存指令。对于这些“E”路标点,使追踪索引码递增1。然而,对于观察程序时实际上并未取得的条件分支指令而言,使追踪索引码递增1,且由“N”标示这些路标点。在图1至图6的上文描述中,参考所有条件指令来描述c原子的输出。然而,在一些实施例中,并非针对所有条件指令输出c原子,而是挑选出条件分支指令且以不同方式处理这些条件分支指令。具体而言,代替输出标志条件分支指令的执行的c原子,而是,在追踪数据流中输出具有如图7A的表中所指示的关联“E”状态或“N”状态的路标点。如上文所述,多个路标点可压缩(或序连)以形成单一追踪数据输出项,且多个c原子可以类似方式压缩。如上文所述,c原子亦在ETM180中经受序列侦测及标签至索引码翻译。然而,应注意,c原子以重要方式不同于路标点。具体而言,始终使路标点、索引码序列递增1,但是对于c原子而言,尽管C原子索引码有时递增,但是其他时间这些C原子索引码根本不递增。具体而言,当特定经标记的CPSR(图2的CPSRA、CPSRB、CPSRC、CPSRD、CPSRE或CPSRF)的一个或更多CPSR标志状态为“待追踪”时,则使用与序列中的最近c原子相同的追踪索引码值,且在此状况下c原子索引码并不递增1。此可使用如图7B的表中所示的两种不同类型的c原子来编码。图7B表展示条件指令(除条件分支之外)的特性如下:——追踪索引码(c结果索引码)在先前c原子与后续c原子之间不改变的条件指令(除条件分支之外)表示为“P0”;且追踪索引码(c结果索引码)递增1的条件指令(除条件分支之外)表示为“P1”。因此,举例而言,若将c原子序列的c结果索引码表示为:0、1、2、2、3、4、5、5、6,则此可编码如下:P1、P1、P1、P0、P1、P1、P1、P0、P1。应明白,在序列中c原子索引码不递增(亦即,存在两个连序“2”及两个连序“5”)的点处,在相同追踪索引码的第二次重复时即输出P0,否则输出P1。这些P1及P0追踪元可以按照用于路标点的E元及N元类似的方式被压缩(或序连)。用于E路标点及N路标点的压缩先前已知且详细地描述于US7,707,394中。根据本发明的实施例,可由追踪电路系统在不同处理周期中输出用于条件指令的c原子、c结果及路标点的事实意谓着可独立地输出c原子且随后使用索引码系统使该c原子与相应c结果相关。此举使c原子能够得以独立于c结果与路标点而压缩,但是c原子仍在相同追踪数据流中与c结果与路标点一起输出。此举通过使能路标点、c原子及c结果的独立压缩而提供了改良的效率。图7C的表展示由ETM180的追踪电路系统根据CPU100中的执行事件而产生的路标点事件及c原子,其中表中的连续行表示连续且顺序的处理周期。图7C的表的最右列展示相应追踪数据输出。产生追踪数据输出项的次序由表的连续行指示。第一追踪输出与压缩的路标点追踪输出“EEEN”相对应。值得注意地,此“EEEN”是在最后三个E与N之间产生P1c原子之后输出的。下一追踪数据输出与压缩的c原子“P111”相对应,且尽管P1的三个出现在输出序列中散布有两个N路标点,但是这些压缩的c原子“P111”亦输出为三个连序c原子。第三追踪输出与“P110”相对应,该“P110”与在“产生的c原子”列中输出的连续P1、P1及P0相关。在输出这三个c原子P1、P1、P0之前,已输出两个“N”路标点,但是此路标点在追踪输出中尚末指示。最后追踪输出与“NNNE”相对应,反映在P1、P1及P0之前输出的其余路标点且亦反映在序列的末端产生的最后路标点E。如图1中所示,诊断电路系统接收追踪数据输出且分离进入c原子FIFO197的压缩的c原子并追踪进入路标点FIFO198的压缩的路标点。由于图7C的表中所示的追踪输出的结果被压缩而导致次序变化,图1的诊断工具196有效地获得与该诊断工具196解码来自ETM180的追踪输出时的执行次序不同的次序。在图7C的此特定实例中,追踪输出次序为:E、E、E、N、P1、P1、P1、P1、P1、P1、P0、N、N、N、E。诊断电路系统196利用程序映像199来重新排序这些压缩的路标点及压缩的c原子,以将这些压缩的路标点及压缩的c原子复原为正确的执行次序。诊断工具196通过贯穿程序映像工作以识别所有分支来进行此操作。每一分支与E路标点或N路标点相关联,该E路标点或N路标点固有地给予“已取得分支”或“未取得分支”信息,“已取得分支”或“未取得分支”信息允许诊断工具196根据当时在CPU100中盛行的条件精确地决定已取得程序映像中的哪些指令及未取得哪些条件分支指令。因为诊断电路系统196遵循与路标点相对应的此线程,所以在参考程序映像199查阅程序时该诊断电路系统196将亦遭遇条件非分支指令,且条件非分支指令中的每一者按次序与接收到的追踪数据流中的c原子关联。然而,应注意,尽管许多条件指令导致c原子的产生,但是存在并不导致c原子的产生的条件指令子集,例如,图3B图的ADDNE。图7D的表解释诊断电路系统196在自ETM180接收路标点及c原子之后如何处理路标点及c原子及如何将路标点及c原子置放至分离的c原子FIFO197及路标点FIFO198中。该表解释了当经由程序映像199遵循执行线程时所遭遇的每一指令类型、诊断电路系统遭遇特定类型的指令时由该诊断电路系统采取的动作。在遭遇分支指令时,自路标点FIFO198取得E或N。在遭遇加载/储存指令时,再次自路标点FIFO198取得E或N。当遭遇条件分支指令时,将不产生相应c原子,这是因为此为由路标点(而非c原子)处理的特殊状况,所以自路标点FIFO198取得E或N。条件加载/储存指令为路标点(由于为加载/储存指令)且亦可为c原子(由于为条件指令),但是对于非条件加载/储存而言,不存在相应c原子,因此在此状况下,自路标点队列取得E,这是因为已知加载/储存从未与N路标点(未取得的分支)相对应。然而,在条件加载/储存的状况下,还从c原子FIFO197取得P0或P1。所有“其他条件指令”(亦即,除条件分支及条件加载/储存外的条件指令)皆落入由c原子的产生涵盖的范畴内,且在此状况下从路标点FIFO取得P0或P1。由于产生的c原子及产生的路标点按次序储存于c原子FIFO197及路标点FIFO198中,因此从FIFO移除这些实体的次序反映了程序执行次序。图8为流程图,该流程图示意性地说明在接收到追踪数据流之后由诊断电路系统196采取的动作,该追踪数据流含有条件原子分组及路标点分组两者。该程序开始于阶段810处,在该阶段810处,在诊断电路系统196处接收追踪数据项开始。随后,在阶段820处,诊断电路系统196接收追踪数据的下一项且随后前进至阶段830,在该阶段830处,决定追踪项是否为条件原子(c原子)分组。若追踪项事实上为c原子分组,则程序进行至阶段832,在该阶段832处,解码分组且在适当时将P0及/或P1c原子添加至c原子FIFO197。此后,程序进行至阶段860,在该阶段860处该程序结束。另一方面,若在阶段830处决定特定追踪数据项并非c原子分组,则程序进行至阶段840,在该阶段840处,决定追踪项是否为路标点分组。若追踪项事实上为路标点分组,则程序进行至阶段842,在该阶段842处,解码分组且在适当时将E及/或N路标点添加至路标点FIFO198。此后,程序进行至结束阶段860。然而,若在阶段840处决定追踪数据项并非路标点分组,这意谓着追踪项既非c原子分组亦非路标点分组,则程序进行至阶段850,在该阶段850处,将以传统方式在适当时处理其他分组类型,然后程序在阶段860处结束。图9A、图9B及图9C示意性地说明当存在分支误预测时或当异常中止发生从而导致一个或更多路标点取消时,在能够臆测乱序处理的CPU100中,包含压缩的路标点及压缩的c原子的追踪输出会发生何事。图9A的表示意性地说明在取消至少一个路标点的情况下,问题如何由于路标点及c原子的压缩发生,这是因为诊断工具196在此情形中将不会意识到在取消事件之前已执行了多少个条件指令。在沿图9A的表向下的部分中存在取消一个路标点(亦即,先前的N)之事件,且追踪输出指示已取消一个路标点但是未给予关于压缩的c原子的任何信息。应注意,在追踪输出中,前两个产生的c原子P1、P1尚未在追踪流中输出,但是在取消之后输出压缩的c原子追踪输出“输出P111”。该“输出P111”意谓已产生三个c原子P1、P1、P1。由于路标点N的取消在此状况下(但并非必然)导致紧随的后续c原子P1的取消,因此诊断电路系统196在“取消1”追踪输出之后接收压缩的c原子输出P111时将不会意识到事实上取消了与压缩的“P111”追踪输出相对应的“P1”中的一者。因此,尽管诊断工具知道取消了哪一个路标点,但是该诊断工具不知道因此亦取消了c原子中的何者。换言之,c原子及取消事件的次序由于压缩而丢失,使得诊断电路系统196不知道第二个P1是在取消之前(在此状况下架构上不执行该取消)还是在取消之后(在此状况下架构上执行该取消)。类似地,若误预测发生(这要求条件指令在架构上不被执行),但是在追踪中并未取消路标点,则诊断电路系统196将不会意识到未执行条件指令。为解决此状况且为防止在指令误预测或取消之情况下路标点及c原子的压缩导致诊断电路系统196做出不正确假设,实施以下两个规则:在分支误预测、异常中止或异常或任何其他取消指令的情况下,输出重新对准追踪项及取消追踪指示(但是对于异常而言,必须取消序列,若为异常则重新对准);在重新对准追踪项之前输出已产生的所有c原子;在重新对准追踪项之前输出已产生的所有路标点。重新对准追踪项向诊断电路系统196指示应废除诊断电路系统196的c原子FIFO197中的任何c原子,这是因为它们与已取消的指令相对应。图9B的表给出使用重新对准追踪数据项及已取消的追踪数据项的一个实例。在此实例中,以与图9A的表中的实例相同的方式取消N路标点,不同之处在于,在此状况下,当在追踪数据流中输出取消指示时,在追踪输出中指示在取消之前已产生的所有c原子的指示。此与“P11”追踪输出相对应。此后,输出取消指示“取消1”,随后在追踪中输出“重新对准”指示。在此状况下,c原子及取消的次序被维持,这是因为重新对准清除了任何缓冲的c原子且重新对准始终与取消一起输出(在取消之前或之后)。ETM并不追踪已取消多少个c原子(若存在),这是因为该ETM并未储存足够状态来决定此数目。然而,诊断工具可计算出已取消哪些c原子。图9C示意性地说明响应于接收在图9B的表中所指示的追踪输出而由诊断电路系统196采取的动作。第一列展示由诊断电路系统196接收到的所有追踪数据项。此后,将此再分为路标点队列(第二列)及条件队列,该条件队列亦即c原子队列(第三列)。诊断电路系统196响应于接收到追踪输出的动作如表的最右列中所指示。第一诊断电路系统动作将推理执行至E。这是因为在所有路标点之间执行的指令(除路标点及c原子之外)皆由诊断电路系统196推理。诊断电路系统196无法推理至路标点N,这是因为尚未接收到c原子,且在此点处诊断电路系统196根据该诊断电路系统196对程序映像199的分析预计c原子。在接收压缩追踪元P11之后,在追踪数据流中接收“取消1”指示,因此诊断电路系统取消所有事物直至最后路标点且包括取消最后路标点,亦即,N路标点。继接收到重新对准追踪项之后,冲洗(flush)c原子FIFO197,从而移除P11及在取消之前发出的P1以及在接收“取消1”的同时添加至条件队列的P1。继重新对准之后,接收压缩的c原子P1110追踪,但是诊断电路系统根据该诊断电路系统对程序映像199的分析预计将接收路标点,且无路标点已被接收,因此无c原子仍可由诊断电路系统处理。诊断电路系统的后续动作涉及参考何时需要及不需要c原子来推理路标点之间的指令。以此方式,由诊断电路系统196重建由CPU100执行的实际执行序列。应注意,加载/储存指令可为条件的或非条件的。将非条件加载/储存指令处理为E原子,因此E原子取自路标点队列。若加载/储存指令为条件的,则E原子仍取自路标点队列,但是另外P0或P1取自c原子队列。图10为流程图,该流程图示意性地说明由诊断电路系统196采取以分析传入追踪数据的动作。具体而言,图10的流程图描述诊断电路系统在执行对执行流的分析的过程中如何从c原子FIFO197及路标点FIFO198移除c原子及路标点。程序开始于阶段1000且直接进行至阶段1010,在该阶段1010处,接收传入追踪数据且使用程序映像199来决定执行的下一指令。此后,程序进行至阶段1012,在该阶段1012处,决定下一指令是否为非条件分支。若下一指令事实上为非条件分支,则程序进行至阶段1014,在该阶段1014处,从路标点FIFO198取得“E”或“N”。随后,程序进行至阶段1060,在该阶段1060处,可用信息用于决定当前指令的细节,且随后进行至结束阶段1070直至接收到下一追踪数据项为止。若另一方面在图10的阶段1012处决定下一指令并非非条件分支指令,则程序进行至阶段1020,在该阶段1020处,决定下一指令是否为非条件加载/储存指令(非条件的)。若指令事实上为非条件加载/储存指令,则程序进行至阶段1014,在该阶段1014处,从路标点FIFO198取得E或N,随后程序进行至阶段1060且随后进行至结束阶段1070。若在阶段1020处决定下一指令并非非条件加载/储存指令,则程序进行至阶段1030,在该阶段1030处,决定指令是否为条件分支。若指令事实上为条件分支,则程序进行至阶段1014,且从路标点FIFO198取得E或N,且随后程序进行至阶段1060及阶段1070,在该阶段1070处,程序结束。若另一方面在阶段1030处决定下一指令并非条件分支,则程序进行至阶段1040,在该阶段1040处,决定下一指令是否为条件加载/储存。若下一指令事实上为条件加载/储存,则程序进行至阶段1042,在该阶段1042处,从路标点FIFO198取得E或N,随后程序进行至阶段1044,在该阶段1044处,从c原子FIFO197取得P0或P1。因此,对于条件加载/储存指令而言,从路标点队列及c原子队列中的每一者取得项目。随后,程序进行至阶段1060及阶段1070。若在阶段1040处发现指令并非条件加载/储存,则程序进行至阶段1050,在该阶段1050处,决定指令是否为条件指令。若指令为条件指令,则从c原子队列197取得P0或P1,且随后程序进行至阶段1060,在该阶段1060处,决定当前指令的细节,且随后程序在阶段1070处结束。然而,若下一指令并非条件指令,则程序自阶段1050直接进行至阶段1060,在该阶段1060处,可用信息用于决定当前指令的细节。但是在此状况下,当前指令并非非条件分支指令、非条件加载/储存指令、条件分支指令、条件加载/储存指令或条件指令中的一者。图11A、图11B及图11C为取消追踪指示、误预测追踪指示、异常追踪指示及重新对准追踪指示在追踪数据流中输出的相对顺序的实例。在图11A的实例的状况下,第一路标点E与分支误预测相对应,且重新对准追踪项置放在误预测之后但在下一路标点或c原子之前。在图11B的状况下,第二路标点,亦即,第二“E”与误预测的分支相对应。重新对准追踪项置放在误预测之后但是在下一路标点或c原子之前(在此特定实例中,在下一路标点E之前)。在图11C的实例中,异常中止发生在第一路标点“E”与第二路标点“E”(序列中的第一追踪项与第三追踪项)之间。在此状况下,抛出异常,且将重新对准追踪项置放在异常之后但是在下一路标点或c原子之前。应注意,在此状况下c原子P1(序列中的第二追踪项)产生于两个路标点,亦即路标点E与路标点E之间,在这两个路标点E之间异常中止发生,但是仍应该将重新对准项置放在异常之后。图12至图14示意性地说明如何通过移除条件结果可能隐含的条件原子来压缩包含c原子的追踪数据流。以此方式从追踪数据流移除c原子子集可用来改良追踪处理的效率。尽管并非所有条件指令皆导致产生c原子,但是c原子与c结果之间常常存在一一对应,且每一c结果必须具有至少一个相应c原子。这意谓着,在许多状况下,当遭遇后续c结果时,诊断电路系统196可隐含c原子的存在,而无需c原子实际上必须包括在追踪数据流中。因此,若诊断电路系统196接收具有与诊断电路系统尚未接收的c原子(c原子索引码)相对应的c结果索引码的c结果,则诊断电路系统196可演绎c原子的存在。若c结果为乱序,则诊断电路系统196可演绎其他c原子的存在,以保持c原子有次序。诊断电路系统196可在比c原子原本出现的时间更迟地演绎c原子,且因此c原子及路标点可改变次序。然而,这是无关紧要的,这是因为如先前所述,在任何状况下,储存于c原子FIFO197及路标点FIFO198中的c原子及路标点可由诊断电路系统196参考程序映像199中的程序指令序列以正确次序置放。图12A示意性地说明基于由图1的结果索引码翻译电路系统188输出c结果索引码的输出的表,该表包含隐含了一系列c原子(亦即,与指令执行的追踪数据项相对应)的追踪数据流的实例。在此实例中,由ETM180产生五个P1c原子的序列但并未输出。类似地,亦由ETM产生在表中由“RH索引码”表示的c原子索引码但并未输出。此举可视为c原子的缓冲。当输出c结果时,隐含位表示那些缓冲的c原子。然而,事实上结果索引码翻译电路系统188输出相应条件结果索引码。尽管未明确给出索引码值,但是根据追踪将明白哪些c原子与c结果相关联。尽管未输出全部c原子信息,但是c结果分组有效地含有关于c结果的信息。c原子被高度压缩(减少至1个位)。图12A的表的第四列示意性地说明基于接收到的c结果索引码由诊断电路系统196隐含了哪些c原子索引码。在此状况下,对应为直接对应,在该直接对应中,直接隐含与c结果索引码相对应的c结果0、c结果1及c结果2。然而,在c结果索引码3之前输出c结果索引码4,因此当诊断电路系统196接收c结果索引码4时,诊断电路系统196隐含亦已产生的c原子索引码3,但是尚未输出相应结果。事实上,从图12A的表的“输出的c结果LH索引码”列可看出,紧随c结果索引码4之后产生c结果索引码3。因此,同时隐含c原子索引码3及c原子索引码4事实上为正确的。值得注意地,在图12A的表的实例中,所产生的c原子仅包含P1原子而不包含P0原子。如前所述,对于P1c原子而言追踪索引码始终递增一,而对于P0原子而言追踪索引码不改变。因此,虽然可由c结果的存在隐含P1c原子,但是此举对P0原子不成立。事实上P0c原子无法由c结果的存在演绎,因此所有P0c原子需要在追踪中输出且不可缓冲。存在另外两种特殊情形,其中依赖通过ETM180对c原子输出的缓冲及通过诊断电路系统196从c结果隐含相应c原子为不适当的。这两种情形中的第一种情形为在重新对准追踪项的状况下,其中必须由ETM180输出在重新对准之前已知的所有c原子,而不管后续c结果原则上可用来隐含这些c原子的事实。此举将确保通过诊断电路系统196演绎的路标点及c原子的正确的相对顺序。不适于缓冲c原子的输出及从所接收的c结果索引码隐含c原子的存在的另一情形为:在c原子本身已由指令索引码翻译电路系统186分配了c原子索引码,此并非严格有序,例如使用特殊索引码。亦存在某些状况,其中由ETM180输出且由诊断电路系统196接收的c结果必须不用来隐含更多c原子。以下三个情形为这些状况的实例,其中诊断电路系统无法将以下两者区分开:1.被使用两次的相同c结果索引码;2.已缓冲的N个c原子,其中N为序列追踪索引码的数目。事实上,要求由ETM180输出的c结果含有通知诊断电路系统196是否应从相应c结果隐含c原子的信息。在图1的实施例中,关于对于给定c结果是否应隐含c原子的信息为直接是/否条件,且并未向诊断电路系统196明确规定要隐含的c原子的精确数目。图12B为表,该表示意性地说明追踪数据流的实例,在该追踪数据串流中,一些c原子索引码从相应c结果隐含,四个不同c原子追踪索引码被采用。因为在所有索引码排尽之后仅可使用四个c原子追踪索引码,所以存在索引码的旋迭(wraparound)。具体而言,可见,c原子索引码序列前进为0、1、2、3,且随后返回至与产生但未输出的第五个P1c原子相对应的0。此外,在图12B的实例中,产生但未输出的第五个P1c原子、第六个P1c原子及第七个P1c原子与误预测相对应,因此这三个c原子实际上未执行,且因此相应c结果及c结果索引码从未输出。c结果含有以下至少三条信息:1.索引码,该索引码明确地或相对于大多数c结果而与条件结果相关联;2.有效载荷,该有效载荷允许诊断电路系统196决定条件指令的通过/失败状态(亦即,决定实际上是否执行条件指令);以及3.是否可基于c结果隐含相应c原子,且此为直接的二位指示符,亦即,隐含是或隐含否。为应用隐含-是(imply-yes)或隐含-否(imply-no)信息,ETM180被配置为追踪由指令索引码翻译电路系统186产生但是其向诊断电路系统196的输出被缓冲的那些c原子。ETM180决定每一c结果是什么及c原子中的哪些可由c结果隐含(若有可隐含的)。若无c原子被c结果隐含,则c结果被标记为隐含-否,否则由ETM180将该c结果标记为隐含-是。这通过所使用两个寄存器还实现。“最后产生c原子索引码(last-c-atom-generated-key)”寄存器包含最近产生但未输出的c原子的索引码。此状况的例外为最近产生但未输出的c原子具有特殊索引码的情况。单独的“最后输出c原子输出索引码(last-c-atom-output-key)”寄存器记录最近(i)明确输出的c原子;或(ii)由c结果隐含的c原子的追踪索引码:。当c结果产生时,相应c结果索引码被测试以观察该相应c结果索引码是否在范围(最后输出c原子索引码)<(c结果LH索引码)<=(最后产生c原子索引码)内。当应用此测试时,必须使用模数学(modulusmath),且模数学的处理为本领域技术人员所熟知的。若c结果索引码事实上在此定义范围中,则ETM180将隐含-是作为c结果的部分而输出。图13为表,该表示意性地说明类似于图12B的序列的追踪数据序列,但是在该追踪数据序列中,储存在“最后产生c原子索引码”缓存器及“最后输出c原子索引码”缓存器中的值分别展示于自右侧起的第二列及第三列中。图13的表的右列给出是否已满足由以上公式定义的测试(亦即,隐含-是)的指示。应注意,由于仅使用四个追踪索引码且由于索引码的旋迭,索引码“3”由于重复索引码序列0、1、2、3、0、1、2、3……(其中例如第一个“3”在第二个“0”之前)而被视为小于索引码“0”。图13表的“隐含的c原子RH索引码”列中标记为3*的隐含的c原子索引码是在输出重新对准项之后不久被隐含的,且在此状况下未隐含具有索引码0、1、2的c原子,因为它们已由于先前的误预测而明确地输出,其中与c原子索引码0、1及2相对应的三个P1c原子未被执行。对于在图13倒数第二行中输出的c结果索引码“2”而言,与c结果索引码2相对应的具有索引码2的c原子未被隐含,因为该c原子已由较早c结果隐含,且因此其结果在图13的右侧列中规定的测试未满足。对于图13的表的末行中输出的c结果索引码,具有索引码1的相应c原子未被隐含,因为该c原子已在名为“明确输出c原子索引码”的列中明确地被输出。图13展示出作为误预测的结果而明确地输出c原子索引码0、1、2及由于P0c原子(在表的最左侧列中倒数第三个产生的c原子)在追踪数据流中的出现而明确地输出c原子索引码0及c原子索引码1,对于该P0c原子不容许从相应c结果隐含c原子。c原子由于以下理由而明确地被输出:·在输出重新对准追踪项之前(例如,由于误预测或异常)·若使用P0c原子类型(其中追踪索引码并不根据定义递增)·若使用不遵循索引码的正常序列顺序的特殊索引码,且该特殊索引码用于非常迟的c结果。当c原子明确地被输出时,“最后输出c原子索引码”寄存器可用来决定应输出哪些c原子。举例而言,在重新对准追踪项的状况下,要明确地输出的第一c原子为“最后输出c原子索引码加一”寄存器的值,且要输出的最后c原子为最后产生c原子索引码的值。具有介于两者之间的索引码的c原子应被输出。图14a为流程图,该流程图示意性地说明ETM180在输出追踪流及实施追踪压缩方案过程中的动作,其中依赖诊断电路系统196从相应c结果隐含c原子的能力某些c原子被产生但未被输出(亦即,被缓冲)。换言之,图14a的流程图示意性地说明ETM180如何作用以经由从追踪数据流移除c原子的子集而压缩输出追踪数据流。程序在阶段2000处开始且随后前进至阶段2100,在该阶段2100处,决定是否需要重新对准追踪数据项。若需要重新对准追踪项,则程序进行至阶段2110,在该阶段2110处,ETM180明确地输出产生但未输出的所有c原子。随后程序进行阶段2120,在该阶段2120处,更新最后输出c原子索引码,且随后程序进行至阶段2130,在该阶段2130处,重新对准追踪数据项实际上输出至追踪数据流中,且随后程序返回至垂直流程并前进至阶段2200。若另一方面在阶段2100处决定不需要重新对准追踪数据项,则程序直接进行至阶段2200而无需沿水平分支压缩阶段2110、2120及2130进行。在阶段2200处决定当前是否正产生c结果。若无c结果正在产生,则程序直接进行至阶段2300。另一方面,若在阶段2200处决定事实上当前正在产生c结果,则程序进行至阶段2210,在该阶段2210处,决定当前是否正缓冲与当前c结果相对应的c原子。此测试的一个实例为决定与正产生的c结果相对应的索引码是否满足测试:(最后输出c原子索引码)<(c结果LH索引码)<=(最后产生c原子索引码)。换言之,与当前正产生的条件指令追踪数据项相对应的索引码是否大于与最近输出的条件指令追踪数据项相对应的索引码且小于或等于与最近产生的条件指令追踪数据项相对应的索引码。由于当索引码值达到最大值时,索引码值旋迭以正常工作,因此索引码比较遵照模运算。若在阶段2210处决定当前并非正缓冲与c结果相对应的c原子,则程序进行至阶段2230,在该阶段2230处,输出刚刚产生的c结果,并且清除隐含位,从而指示基于此特定c结果无c原子应由诊断电路系统196隐含。若另一方面在阶段2210处发现当前正缓冲与当前c结果相对应的c原子,则程序进行至阶段2222,在该阶段2222处,输出c结果,并且设定隐含位,从而指示诊断电路系统196应从c结果隐含相应c原子。在输出c结果并且设定隐含位之后,程序进行至阶段2224,在该阶段2224处,在适当寄存器中更新最后输出c原子索引码的值,随后程序进行至阶段2300。在阶段2300处决定是否正产生c原子。若并非正产生c原子,则程序在阶段2400处结束。若另一方面正产生c原子,则程序进行至阶段2310,在该阶段2310处,决定c原子是否具有类型P0而非P1或该c原子是否与特殊索引码相对应。若c原子并非这些异常类型中的一者,则程序进行至阶段2320且更新最后产生c原子索引码,随后程序在阶段2400处结束。然而,若c原子与特定索引码相对应或具有类型P0,则程序进行至阶段2312,在该阶段2312处,使正产生的c原子与已产生但尚未输出的所有其他c原子一起明确地输出。随后程序进行至阶段2314,在该阶段2314处更新最后输出c原子索引码。随后程序进行至阶段2320,在该阶段2320处更新最后产生c原子索引码,随后程序在阶段2400处结束。图14b说明根据本发明的实施例的追踪单元180。追踪单元180类似于图1中所示的追踪单元且在适当的情况下使用相同的组件符号。该追踪单元180具有额外条件代码或CPSR值储存缓冲器185及具有关联压缩及组合电路系统的符记(token)缓冲器187。自结果接口184发送的数据包含来自每一更新的CPSR寄存器的CPSR值及额外数据。因为在此实施例中CPU100上存在8个CPSR寄存器,所以存在单一周期中可接收到8个可能设定。并非在单一周期中将此所有设定输入至追踪产生电路系统192,因为这需要追踪产生电路系统192处理这些设定,这将是昂贵的,而是使这些设定缓冲在CPSR值存储缓冲器185中。因此,这些设定可随时间推移而稳定地输出。在此实施例中,在每一时钟周期中,输出两组CPSR值。这两组CPSR值可以是随机选择的,或者,若在输入处将接收到针对该CPSR的一组更新的CPSR值,则可能需要输出一组特定CPSR值。此举将确保条件原子追踪数据项及条件结果追踪数据项在追踪流中的正确顺序。就此而言,在指令接口182处从处理装置的解码接收到具有关联「标签」(关联「标签」识别将由指令更新的特定CPSR缓存器)的条件指令观察指示符提供了将更新哪些CPSR寄存器的先行指示。在有效值当前储存在寄存器185中的CPSR值要被接收的状况下,这些有效值被选择供输出,以便储存位置腾空,以储存随后接收的新数据。当它们被输出时,它们由产生追踪数据项的追踪产生电路系统192处理。因为在此实施例中可在任一周期中接收两个条件指令观察指示符,所以至多两组CPSR值需要逐出,且因此每一周期输出两组CPSR值足以维持储存在缓冲器185中的正确值,且意谓着追踪产生电路系统195仅需要具有每一周期处理两组值的充分的处理能力。在此实施例中,存在用于接收由追踪产生电路系统192产生的追踪数据项的额外电路系统187,此电路系统压缩常用追踪数据项以形成符记,符记为追踪数据项的压缩表示且符记被储存在符记缓冲器中。符记稍后可组合于一起且若干符记可作为单一追踪项而输出。通常,最小追踪分组为8位长度且分组常常为8位的倍数,而符记通常小得多,因此若干符记可组合为一个分组供输出。可由符记表示的常用条件结果追踪数据项的实例为:含有更常用CPSR值中的一者的那些常用条件结果追踪数据项。一些CPSR值比其他CPSR值显著更常用。举例而言,以下值非常常用:N清除、Z清除、C设定、V清除。含于条件结果追踪数据项中的索引码为比先前的这样的索引码更常用的那些常用条件结果追踪数据项。若符记储存在缓冲器中达尽可能长的时间以提供更多时机用于将不同符记组合为单一分组,则此为便利的。然而,缓冲器仅具有有限尺寸,且因此当缓冲器变满时或当所接收的项不存在对其可用的符记(或许该项为无法有效压缩的不常用项)时必须输出符记。在后者状况下,为维持次序,通过输出所有值而清空缓冲器,且随后输出接收到的非压缩项。通常,这些符记被保持在缓冲器中达尽可能长的时间,因为此后将不同符记组合为单一追踪项中的可能性更大。图15至图27的描述为发明者JohnMichaelHorley、SimonJohnCraske、MichaelJohnGibbs及PaulAnthonyGilkerson的标题名称为“ProcessingApparatus,TraceUnitandDiagnosticApparatus”的同在申请中的英国专利申请案第1100505.5号的部分,本案主张该案的优先权。因此,提供以下图15至图27用于说明性目的且用于进一步解释条件结果追踪数据项(c原子)的缓冲及并非所有条件指令皆具有相应c原子的事实。图15至图27亦帮助说明如何如图3A至图3D中所述地使用CPSR标记位。图22及图25尤其与此相关。图15说明处理装置3002,该处理装置3002包含用于响应于程序指令而执行处理操作的处理电路3004。处理装置3002具备存储器系统3008,该存储器系统3008包含一个或更多高速缓存单元或存储器单元,用于储存待由处理电路3004执行的程序指令及/或待由处理电路3004处理的数据。处理装置3002包括追踪电路3006,该追踪电路3006用于监视由处理电路3004执行的处理操作。追踪电路3006产生追踪数据元,这些追踪数据元指示由处理电路3004执行的处理操作的特性。追踪电路3006通过输出端口3010输出所产生的追踪数据元。追踪电路3006不必与处理电路3004实施于相同的集成电路上,且在一些实施例中可将追踪电路3006提供为单独的追踪单元。诊断装置3012被提供用于分析由追踪电路3006产生的追踪数据元。诊断装置3012经由输入端口3014接收追踪数据元。诊断装置3012亦接收哪些程序指令由处理电路3004执行的指示。此指示可由追踪电路3006提供,从而指示在追踪流中执行哪些指令。或者,诊断装置3012可具备地址,该地址指示由处理电路3004执行的第一程序指令在存储器系统3008内的位置。诊断装置3012亦可具备存储器(在图15中未示出),用于储存由处理电路3004执行的程序的相应复本。诊断装置3012逐步分析由处理电路3004执行的指令,且基于追踪数据元流中的信息来决定指令的处理结果。追踪数据元不必直接从追踪电路3006输出至诊断装置3012,而是可例如储存在存储器或其他储存装置中,且随后在需要时由诊断装置3012从储存装置访问。诊断装置3012可为例如被编程为执行追踪分析方法的通用计算机。处理装置3002具有储存位置,例如条件状态寄存器(CPSR)3020,用于储存一个或更多条件标志3022,该一个或更多条件标志3022指示处理装置3002的各个条件。在英国剑桥的ARMLimited设计的处理器中,条件标志3022可包括NZCV(负、零、进位、溢出)标志,用于指示处理结果是否为负、零、需要进位或产生溢出。图17说明可由条件状态寄存器3020中的条件标志3022的不同组合指示的各种条件状态。将了解,用于储存条件标志3022的储存位置不必为条件状态寄存器3020但是亦可为存储器系统3008内的储存位置,或任何其他种类的储存位置。处理电路3004可响应于至少一个条件更新指令,以更新条件状态寄存器3020中的条件标志3022中的一个或更多个。举例而言,比较指令可比较两个数据值且取决于比较而更新标志,例如以指示这些值是否相等或一个值是否小于或大于另一值。使条件标志3022得以更新的任何指令可被视为条件更新指令。举例而言,在ARM指令集架构中,TST、TEQ、CMP及CMN指令为条件更新指令的实例。处理电路3004亦可响应于与给定条件相关联的至少一个条件指令。当条件指令执行时,则条件标志3022的值与给定条件比较。若条件标志3022满足该条件,则相关联的处理操执被行作。若未满足该条件,则相关联的处理操作不执行(或者,对于一些种类的条件指令而言,若该条件未满足,则可执行与相关联处理操作不同的处理操作)。举例而言,条件加法指令ADDEQ与EQ条件相关联。图16说明若Z标志被设定则满足EQ条件。当条件相加指令ADDEQ被执行时,则若Z标志被设定,则相关联的加法运算将执行,而若Z标志未设定,则加法运算将不会执行。条件指令的处理结果无法仅根据指令流来决定,这是由于指令流不含用于决定条件是否满足的信息。因此,追踪电路3006响应于至少一个选定的指令,以产生追踪数据元,该追踪数据元包括已追踪条件值,该已追踪条件值指示条件标志3022的值。诊断装置3012可使用包括在追踪数据元中的已追踪条件值来决定条件是否满足,且因此可决定相应条件指令的处理结果。追踪电路3006维护一个或更多控制标志3026,用于监视是否已追踪到条件标志3022的值。追踪电路3006可选择是否基于一个或更多控制标志3026的当前值在给定指令执行时追踪条件标志值。在一个实施例中,追踪电路3006包括单一控制标志3026(参见如下文所述的图22至图24的实施例),而在另一实施例中追踪电路3006包括各自与条件标志3022中的一者相对应的多个控制标志3026(参见下文相对于图25至图27所述的实施例)。诊断电路3016维护一组相应控制标志3028,这些控制标志3028以与追踪电路3006的控制标志3026相对应的方式被用来决定是否期望在针对给定程序指令的追踪流中提供包括已追踪的条件值的追踪数据元。追踪数据元内的已追踪的条件值可以不同方式来指示。在一个实例中,追踪电路3006可在追踪数据元中包括条件标志3022的至少一个子集的实际值。在条件指令仅取决于条件标志3022的子集的情况下,则追踪电路3006可仅包括条件标志值的相关子集,或可包括条件标志3022的全部。或者,追踪电路3006可在追踪数据元中包括指示条件标志3022的值的特定组合的识别码。若条件值的一些组合比其他组合更常用,则此可提供有效率的编码。举例而言,图17示出将2位识别符用于条件状态中的三个状态(例如,设定C标志的状态、设定N标志的状态及设定Z标志及C标志的状态)的实例。随后将4位识别符用于不同条件状态中的多于三个状态。若需要条件标志值的其他组合中的一者,则可使用与图17中所示的方案不同的编码方案而将当前条件标志值的单独指示提供于追踪数据元中。将了解到,识别符的编码,及哪些条件状态由特定识别符表示的选择仅为实例。尽管如此,此实例说明通过将具有最少位的识别符分配至最频繁出现的条件状态可减少追踪数据的总量。举例而言,若处理装置3002于70%的时间处于具有2位识别符的三个条件状态之一,于29%的时间处于具有4位识别符的三个状态之一,且于1%的时间处于其他状态之一(且其他状态由8位识别符表示),则用来识别当前条件状态的平均位数将为2*0.7+4*0.29+8*0.01=2.64(星号*指示乘号)。因此,包括在追踪流中以指示当前条件状态的平均位数将小于若追踪数据元简单地包括条件标志的当前值时将使用的4个位。追踪电路6可追踪正由处理电路4执行的程序的不同指令处的条件标志3022的值。追踪电路3006可选择一个或更多选定的指令,用于触发包括条件标志指示值的追踪数据元的产生。此选定的指令可为条件指令,但是亦可为另一指令。举例而言,图18至图20图示包括在执行条件更新指令时产生的包括已追踪的条件值的追踪数据元的实例。图18示出响应于处理电路3004的操作而产生追踪数据的方法。在步骤3040处,处理电路3004处理正执行的程序的下一指令,且追踪电路3006监视处理电路3004对指令的处理。在步骤3042处,追踪电路3006决定正由处理电路3004执行的指令是否为条件更新指令。若指令为条件更新指令,则在步骤3044处追踪电路3006产生并输出包括已追踪的条件值的追踪数据元,该已追踪的条件值指示由条件更新指令的执行而产生的条件标志3022的经更新的值。另一方面,若指令并非条件更新指令,则省略步骤3044。在步骤3046处,决定是否存在待由处理电路3004处理的另一指令。若存在另一指令,则方法返回至步骤3040,而相反若不存在其余指令,则方法在步骤3048处结束。图19说明用于分析使用图18的方法由追踪电路3006产生的追踪流的相应诊断方法。诊断装置3012接收哪些指令由处理电路3004执行的指示。在步骤3050处,诊断电路3016分析指示为正由处理电路3004执行的下一指令。在步骤3052处,诊断电路3016决定下一指令是否为条件指令。若指令为条件指令,则在步骤3054处诊断电路3016在追踪数据流中定位与在程序指令的指示中指示的最近条件更新指令相关联的追踪数据元。在步骤3056处,诊断电路3016基于包括在定位的追踪数据元中的已追踪的条件值来决定条件指令的处理结果。举例而言,诊断电路3016可使用已追踪的条件值来决定与条件指令相关联的条件是否满足且因此决定是否执行相关联操作。若在步骤3052处决定下一指令并非条件指令,则省略步骤3054及步骤3056。在步骤3058处,决定是否存在待分析的另一指令。若存在另一指令,则方法返回至步骤3050,而若不存在更多指令,则方法在步骤3060处结束。图20说明根据图18的方法产生追踪流及根据图19的方法分析追踪流的实例。图20示出由处理电路3004执行的程序指令集。当分支指令执行时,则指示是否取得分支的追踪数据元产生。当遭遇条件更新指令(例如,CMP)时,则根据图18的步骤3044产生包括已追踪的条件值CPSR的追踪数据元。当分析追踪流时,则诊断装置可使用已追踪的条件值来决定任何随后条件指令(例如,图20中所示的指令MOVNE、MOVEQ及ADDHI)的处理结果。一些指令可为条件更新指令及条件指令两者。举例而言,在图20中的存储器位置2100处的程序指令为用于控制处理电路3004以决定条件标志3022的当前值是否满足不等(NE)条件(参见图16)的条件比较指令CCMPNE。若满足不等条件,则处理电路3004执行比较运算且基于比较结果更新条件标志3022。当CCMPNE指令为条件指令时,则诊断电路3016基于包括在条件标志的最近更新处的追踪流中的已追踪的条件值(亦即,包括在存储器位置2000处用于比较指令CMP的CPSR值)来决定CCMPNE指令的处理结果。若在执行CCMPNE指令的后满足NE条件,则CCMPNE指令亦为条件更新指令,且因此追踪电路3006产生用于指令CCMPNE的包括指示条件标志3022的经更新值的已追踪条件值的追踪数据元。此追踪数据元可用于决定任何后续条件指令的结果。或者,在一些实例中,CCMPNE指令可被视为条件更新指令,而不考虑NE条件是否满足,且因此对于CCMPNE指令,可总是产生指示条件标志的值的追踪数据元。这在NE条件在追踪时尚未计算的情况下是有用的。图18至图20中所示的技术在当单一条件更新指令之后跟随取决于同一组条件值的一系列条件指令时是有用的,这是因为在此状况下少量追踪数据足以决定若干随后指令的结果。然而,在一些情形中,可能存在无使用条件标志的经更新值的任何介入条件指令而连续发生的许多条件更新指令。举例而言,在图21中,程序指令的序列包括若干比较CMP及位测试TST指令,这些指令导致条件标志更新,但是这些指令的前四个指令在无需被条件指令使用的那些更新值的情况下更新标志。在此情形下,在执行条件指令时产生包括已追踪的条件值的追踪数据元更有效(例如,如下文参阅图22至图24及图25至图27所述)。在图21中所示的实例中,则可在条件指令MOVNE执行时而非在每一条件更新时产生追踪数据元。将了解到,这些技术的混合是可能的,且因此一些追踪单元可在条件更新指令执行时以及在条件指令执行时产生已追踪的条件值。图22示出在条件指令执行时追踪条件标志3022的追踪方法。在此实施例中,追踪电路3006维护控制标志3026,用于决定是否追踪条件标志3022的值。控制标志3026具有“清除”状态及“设定”状态(例如,“清除”状态可为具有0值的控制标志3026,而“设定”状态可为具有1值的控制标志3026,或反之亦然)。在图22的步骤3070处,追踪电路3006监视处理电路3004执行下一指令。在步骤3072处,追踪电路3006决定指令是否为条件指令。若指令为条件指令,则在步骤3074处追踪电路3006决定是否清除控制标志。若清除控制标志,则在步骤3076处追踪电路3006产生并输出追踪数据元,该追踪数据元包括指示条件状态寄存器3020的当前状态的已追踪的条件值。随后在步骤3078处控制标志被设定。另一方面,若在步骤3074处控制标志被设定,则省略步骤3076及步骤3078。若在步骤3072处决定指令并非条件指令,则省略步骤3074至步骤3078。随后,在步骤3080处,决定下一指令是否为条件更新指令。应注意,一些指令可为条件指令及条件更新指令两者。若指令为条件更新指令,则在步骤3082处清除控制标志。否则,省略步骤3082。随后在步骤3084处,决定是否存在待由处理电路3004处理的另一指令。若存在另一指令,则方法返回至步骤3070。若不存在更多指令,则方法在步骤3086处结束。以下指示出用于实施图22的方法的一些位码(术语“marker”指示控制标志3026):图22的方法有助于减少追踪数据的量,这是因为追踪电路3006对于在条件更新指令之后的第一条件指令产生了包括已追踪的条件值的追踪数据元。对于后续条件指令而言,则不必追踪条件值,这是因为先前的条件指令已具有相关联的含有指示条件标志3022的状态的信息的追踪数据元。图23示出用于分析在图22的方法中产生的追踪流的相应诊断方法。诊断装置3012具有控制标志3028,该控制标志3028具有与追踪电路3006的控制标志3026的状态相对应的“清除”状态及“设定”状态。在步骤3100处,诊断电路3016分析包括在由处理电路3004处理的程序指令的指示中的下一指令。在步骤3102处,决定是否存在条件指令的指示。若指令为条件指令,则在步骤3104处决定是否清除诊断控制标志3028。若清除诊断控制标志,则在步骤3106处诊断电路3016定位用于该条件指令的相关联的追踪数据元,且在步骤3108处基于包括在相关联的追踪数据元中的已追踪的条件值来决定该条件指令的处理结果。在步骤3110处,诊断控制标志被置于“设定”状态。另一方面,若在步骤3104处不清除诊断控制标志,则方法进行至步骤3112,在该步骤3112处由诊断电路3016定位另一追踪数据元。该另一追踪数据元为与先前分析的条件指令相关联的数据元。在步骤3114处,诊断电路3016基于包括在针对先前分析的条件指令产生的另一追踪数据元中的已追踪的条件值来决定当前分析的条件指令的处理结果。若在步骤3102处,决定指令并非条件指令,则省略步骤3104至步骤3114。随后在步骤3116处决定正分析的指令是否为条件更新指令。指令可为条件指令及条件更新指令两者。若指令为条件更新指令,则在步骤3118处清除诊断控制标志3028,而若指令并非条件更新指令,则省略步骤3118。在步骤3120处,决定是否存在待分析的另一指令。若存在另一指令,则方法返回至步骤3100,而否则方法在步骤3122处结束。因此,诊断电路使用与追踪电路3006的控制标志3026相对应的诊断控制标志3028来决定预计是否在给定条件指令的追踪流中包括相关联的追踪数据元。若存在这样的相关联的追踪数据元,则可基于包括在相关联的追踪数据元中的已追踪的条件值来决定条件指令的处理结果。若不存在相关联的追踪数据元,则将存在与先前的条件指令相关联的追踪数据元,该追踪数据元将含有使得能够确定当前条件指令的处理结果的已追踪的条件值。当遭遇条件更新指令时,则清除诊断控制标志3028,以指示预计下一条件指令将具有相关联的追踪数据元。图24说明将图22及图9的方法应用于图20中所示的程序指令流的实例。此外,在存储器位置1600处的分支指令的分支取得结果被追踪。响应于储存在存储器位置2000处的条件更新指令CMP的执行,追踪电路3006,根据图22的步骤3082,清除其控制标志3026。以类似方式,当诊断电路3016分析指令时,则其将通过根据图23的步骤3118清除其诊断控制标志3028来响应条件更新指令CMP的指示。当追踪电路3006遭遇储存在存储器位置2004处的条件指令MOVNE时,追踪电路3006决定控制标志3026当前处于清除状态中,且因此在图22的步骤3076处包括已追踪的条件值CPSR的追踪数据元产生。随后根据图22的步骤3078,控制标志被设定。以相应方式,当分析指令时,诊断电路3016将侦测存储器位置2004处的条件指令MOVNE的指示,且此后该诊断电路3016将通过定位追踪流中的相关联的追踪数据元及基于包括在追踪数据元中的已追踪的条件值来决定MOVNE指令的处理结果,来响应被清除的诊断控制标志3028。此后,诊断电路3016在图23的步骤3110处设定诊断控制标志3028。此后,对于存储器位置2008及存储器位置200C处的后续条件指令而言,追踪电路3006侦测到控制标志3026处于设定状态中,且因此不产生相应追踪数据元。以相应方式,诊断电路3016侦测诊断控制标志3028处于设定状态中,且因此图23的随后步骤3112及步骤3114定位与储存在存储器位置2004处的先前的条件指令相关联的追踪数据元。诊断电路3016基于针对存储器位置2004处的指令的先前的追踪数据元来决定存储器位置2008及存储器位置200C处的指令的处理结果。以此方式,追踪流被产生,其中,继条件标志3022的更新后执行的第一条件指令触发了包括已追踪的条件值的追踪数据元的产生。图25至图27示出实施例,在该实施例中,追踪电路3006监视已追踪哪些条件标志3022,且在针对条件指令产生追踪数据元时追踪尚未追踪的条件指令所需要的额外条件标志。此方法利用多个控制标志3026,每一控制标志3026与条件标志3022中的各条件标志相对应。每一控制标志3026皆具有“清除”状态及“设定”状态。诊断电路3016具有一群相应的诊断控制标志3028,这群相应的诊断控制标志3028亦具有“清除”状态及“设定”状态。图25说明追踪处理电路3004的操作的方法。在步骤3140处,处理电路3004执行下一指令且由追踪电路3006监视此指令的执行。在步骤3142处,决定指令是否为条件指令。若指令为条件指令,则在步骤3144处追踪电路3006决定条件标志3022的子集,该条件标志3022的子集为用于决定条件指令的结果所需要的。举例而言,对于图16中所示的每一条件而言,在表中所指示的相应标志为所需要的条件标志的子集。HI条件例如需要C标志及Z标志。在步骤3146处,追踪电路3006决定是否清除与条件标志3022的所需子集相对应的控制标志3026中的任何控制标志。若不清除与条件标志的所需子集相对应的控制标志中的任何控制标志,则方法进行至步骤3152。若清除与条件标志的所需子集相对应的控制标志中的任何一个或更多控制标志,则在步骤3148处追踪电路3006产生并输出包括已追踪的条件值的追踪数据元,该已追踪的条件值至少指示相应控制标志3026被清除了的所需子集的条件标志3022。可选地,追踪条件值亦可指示其他条件标志,或可指示条件标志3022中的全部。随后在步骤3150处,追踪电路3006设定控制标志,该控制标志与在已追踪的条件值中指示的条件标志相对应。若在步骤3142处决定指令并非条件指令,则省略步骤3144至步骤3150。在步骤3152处,追踪电路3006决定正由处理电路3004执行的指令是否为条件更新指令。若指令为条件更新指令,则在步骤3154处追踪电路3006至少清除与因条件更新指令而更新的条件标志3022相对应的控制标志3026。可选地,在步骤3154处追踪电路3006亦可清除其他控制标志3026,或可清除控制标志3026中的全部。若指令并非条件更新指令,则省略步骤3154。随后在步骤3156处,决定是否存在待由处理电路3004处理的另一指令。若存在另一指令,则方法返回至步骤3140。否则,方法在步骤3158处结束。以下指示出用于实施图25的方法的伪码(术语“marker”代表控制标志3026):图26图示分析由图25的方法产生的追踪流的方法。在步骤3160处,诊断电路3016分析由处理电路3004执行的指令的指示中指示的下一指令。若在步骤3162处决定下一指令为条件指令,则在步骤3164处诊断电路3016决定用于该指令的条件标志的所需子集且决定是清除还是设定与条件标志的所需子集相对应的诊断控制标志3028。在步骤3166处,若步骤3164已决定清除与条件标志的所需子集相对应的诊断控制标志3028中的任何诊断控制标志,则诊断电路3016在追踪流中定位包括第一已追踪的条件值的相关联的追踪数据元。第一已追踪的条件值至少指示与清除的诊断控制标志3028相对应的条件标志的所需子集的值。随后诊断电路3016设定被清除的并与所需子集相对应的诊断控制标志3028。在步骤3168处,若步骤3164已决定与条件标志的所需子集相对应的任何诊断控制标志3028被设定,则诊断电路3016定位用于至少一个先前的条件指令的至少一个另一追踪数据元。该另一追踪数据元包括至少一个另一已追踪的条件值,该至少一个另一已追踪的条件值指示与被设定的诊断控制标志相对应的条件标志的值。随后在步骤3170处诊断电路3016分析第一已追踪的条件值及/或至少一个另一已追踪的条件值(取决于在步骤3166及步骤3168处访问了哪些已追踪的条件值),且随后基于已追踪的条件值来决定当前条件指令的处理结果。若在步骤3162处决定指令并非条件指令,则省略步骤3164至步骤3170。在步骤3172处,诊断电路3016决定下一指示的指令是否为条件更新指令。若下一指令为条件更新指令,则在步骤3174处诊断电路3016至少清除与因条件更新指令而更新的条件标志3022相对应的诊断控制标志3028(诊断电路3016可基于条件更新指令的已演绎的处理结果来决定更新哪些条件标志3022)。可选地,在步骤3174处诊断电路3016亦可清除诊断控制标志3028中的其他诊断控制标志,或可清除诊断控制标志3028中的所有诊断控制标志。若在步骤3172处下一指令并非条件更新指令,则省略步骤3174。在步骤3176处,决定是否存在待分析的另一指令。若存在另一指令,则方法返回至步骤3160,而否则方法在步骤3178处结束。图27说明将图25的方法及诊断装置3012应用于先前说明的程序指令流的实例。在此实例中,假设响应于条件更新指令而清除所有控制标志3026及诊断控制标志3028,但是如上文所提及的,亦可能提供追踪电路3006及诊断电路3016仅清除与已更新的条件标志3022相对应的控制标志3026、控制标志3028的实施例。在图27中,在针对分支指令产生的追踪数据元中指示分支取得结果。分支取得结果可由诊断电路3016用来决定由处理电路3004执行哪些指令。在遭遇存储器位置2000处的条件更新指令CMP时,追踪电路3006清除所有控制标志3026。类似地,当诊断电路3016遭遇条件更新指令CMP时,该诊断电路3016清除其诊断控制标志3028中的所有诊断控制标志。在执行存储器位置2004处的条件指令MOVNE时,追踪电路3006决定,对于「不等」条件NE,所需条件标志子集为Z标志(参见图16)。在图25的步骤3146处,追踪电路3006决定清除与Z条件标志相对应的控制标志3026,且因此在步骤3148处产生追踪数据元,该追踪数据元包括指示至少Z标志的值的已追踪的条件值。随后在图25的步骤3150处设定与Z标志相对应的控制标志。以相应方式,当分析追踪流时,诊断电路3016遭遇存储器位置2004处的条件指令MOVNE且决定所需条件标志子集为Z标志。在此点处,与Z条件标志相对应的诊断控制标志3028被清除,且因此诊断电路3016决定存在与MOVNE指令相对应的相关联的追踪数据元。诊断电路3016定位相关联的追踪数据元,该相关联追踪数据元包括指示Z标志的值的已追踪的条件值。诊断电路3016基于储存在存储器位置2004处的针对MOVNE指令的已追踪的条件值来决定处理结果。随后诊断电路3016设定与Z标志相对应的诊断控制标志3028。当追踪电路3006遭遇储存在存储器位置2008处的条件指令MOVEQ时,追踪电路3006决定用于决定是否满足“相等”条件EQ的所需标志子集亦为Z标志(参见图16)。在图25的步骤3146处,追踪电路3006决定设定与Z标志相对应的控制标志,且因此省略图25的步骤3148及步骤3150且不产生包括已追踪的条件值的追踪数据元。在分析追踪流时,诊断电路3016可类似地侦测与Z标志相对应的诊断控制标志3028被设定。因此,诊断电路3016将在图26的步骤3168处定位用于储存在存储器位置2004处的先前的条件指令MOVNE的追踪数据元,且基于包括在针对MOVNE指令的追踪数据元中的已追踪的条件值来决定MOVEQ指令的结果。在存储器位置200C处存在条件加法指令ADDHI,该条件加法指令ADDHI取决于HI条件。当执行此指令时,追踪电路3006决定所需条件标志子集为C标志及Z标志(参见图16)。追踪电路3006决定与C标志及Z标志相对应的相应控制标志3026的状态,且决定设定与Z条件标志相对应的控制标志3026,但仍清除与C条件标志相对应的控制标志3026。因此,在图25图的步骤3148处,追踪电路3006产生至少包括指示C标志的值的追踪数据元。随后设定与C条件标志相对应的控制标志3026。在分析追踪流时,诊断装置3012侦测用于存储器位置200C处的ADDHI指令的所述条件标志子集为C标志及Z标志。由于与C标志相对应的诊断控制标志3028被清除,因此在步骤3166处诊断电路3016将在追踪流中定位与指示C标志值的ADDHI指令相关联的追踪数据元。在图26图的步骤3168处,诊断电路3016将亦定位另一追踪数据元,这是因为在步骤3164处用于Z条件标志的诊断控制标志3028被设定。在此实例中,该另一追踪数据元是针对存储器位置2004处的MOVNE指令产生的追踪数据元。在图26图的步骤3170处,诊断电路3016基于包括在用于存储器位置2004处的MOVNE指令的追踪数据元中的已追踪的条件值及包括在用于存储器位置200C处的ADDHI指令的追踪数据元中的已追踪的条件值两者,来决定ADDHI指令的处理结果。以类似方式,针对图27中所示的后续指令,追踪电路3006产生追踪数据且诊断电路3016分析追踪数据。虽然上文实施例已描述在条件标志3022更新时控制标志3026及诊断控制标志3028被清除,但是其他事件亦可触发控制标志3026或诊断控制标志3028被清除。举例而言,异常事件可导致控制标志清除。若由异常事件触发的异常程序正由追踪电路3006追踪,则在出现异常事件时清除控制标志3026确保将在异常程序启动时追踪条件标志3022。或者,若异常程序未被追踪,则在出现异常事件时清除控制标志3026可确保将在从异常程序返回后追踪条件标志3022。此外,追踪电路3006可周期性地清除控制标志,以便将已追踪的条件值周期性地包括在追踪流中,以为诊断装置3012提供参考点。诊断电路3016可在参考点处开始分析追踪数据,这是由于在参考点处包括的已追踪的条件值使得能够确定条件标志的状态而无需来自先前的追踪数据元的信息。此为有用的,这是由于诊断电路3016能够直接跳转至感兴趣的追踪流的区域,而非必须贯穿整个追踪流工作以到达感兴趣区域。此外,为改良处理效能,一些处理器可在已知实际上是否应执行指令之前执行这些指令的臆测执行。有时,一个或更多臆测执行的指令事实上不应执行。在侦测误臆测时,处理器可反转任何错误执行的指令的结果,以恢复出现在执行错误执行的指令之前的处理器状态。已错误地执行多少个指令对于追踪电路3006可为未知的。为确保可从追踪流决定由误臆测的校正产生的条件标志值,追踪电路3006可在侦测到误臆测时即清除控制标志3026。对于这些事件中的任何事件而言,追踪电路3006可在追踪流中包括指示已清除的控制标志3026的信息。诊断电路3016可通过清除诊断控制标志3028来响应此信息。图22至图27说明指示条件标志3022的值的已追踪的条件值包括在追踪流中以使得诊断装置3012能够决定条件指令的结果的实施例。然而,这些技术亦可应用于另一种结果指示值(例如,通过/失败结果)包括在追踪流中以使得能够决定条件指令的结果的实施例。尽管已在本文中参考附图详细地描述了本发明的说明性实施例,但是将理解,本发明不限于这些精确实施例,且在不脱离如由随附权利要求书界定的本发明的范围及精神的情况下,可由本领域技术人员在这些精确实施例中实现各种变化及修改。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1