CN101493762B - 处理数据的方法和设备 - Google Patents

处理数据的方法和设备 Download PDF

Info

Publication number
CN101493762B
CN101493762B CN2009100061112A CN200910006111A CN101493762B CN 101493762 B CN101493762 B CN 101493762B CN 2009100061112 A CN2009100061112 A CN 2009100061112A CN 200910006111 A CN200910006111 A CN 200910006111A CN 101493762 B CN101493762 B CN 101493762B
Authority
CN
China
Prior art keywords
instruction
decoding
pre decoding
instruction set
programmed
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN2009100061112A
Other languages
English (en)
Other versions
CN101493762A (zh
Inventor
P·R·格林哈尔格
A·C·罗斯
S·J·克拉斯克
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
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 CN101493762A publication Critical patent/CN101493762A/zh
Application granted granted Critical
Publication of CN101493762B publication Critical patent/CN101493762B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/3017Runtime instruction translation, e.g. macros
    • G06F9/30174Runtime instruction translation, e.g. macros for non-native instruction set, e.g. Javabyte, legacy code
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • 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/30145Instruction analysis, e.g. decoding, instruction word fields
    • G06F9/3016Decoding the operand specifier, e.g. specifier format
    • G06F9/30167Decoding the operand specifier, e.g. specifier format of immediate specifier, e.g. constants
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3802Instruction prefetching
    • G06F9/3814Implementation provisions of instruction buffers, e.g. prefetch buffer; banks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3818Decoding for concurrent execution
    • G06F9/382Pipelined decoding, e.g. using predecoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3836Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution
    • G06F9/3853Instruction issuing, e.g. dynamic instruction scheduling or out of order instruction execution of compound instructions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline, look ahead
    • G06F9/3861Recovery, e.g. branch miss-prediction, exception handling
    • G06F9/3865Recovery, e.g. branch miss-prediction, exception handling using deferred exception handling, e.g. exception flags

Abstract

本发明涉及多指令集的指令预解码。提供了一种数据处理设备,其具有用来生成预解码的指令的预解码电路10,预解码的指令被存储在指令高速缓存20中。来自指令高速缓存20的预解码的指令被解码电路45,50,46读取,并用来形成控制与预解码的指令对应的处理操作的控制信号。最初取出的程序指令可以属于多个指令集中的各个指令集。来自一个指令集的指令被预解码电路10预解码成预解码的指令,预解码的指令具有共享格式以表示与从另一个指令集中取得的相应指令共享的功能性。通过这种方式,解码电路的共享部分可以关于来自这两个不同指令集中的指令的共享功能性生成控制信号。

Description

处理数据的方法和设备
技术领域
本发明涉及用来对指令进行预解码的数据处理设备和方法,其中预解码的指令被放置在高速缓存中以便后续解码以及由处理电路使用。 
背景技术
在典型的数据处理设备中,大量功率消耗在处理电路的执行流水线(pipeline)内执行指令之前对指令的解码上。在支持多指令集的处理电路中,由于通常需要提供多个单独的解码器对来自各个指令集的指令进行解码,所以这个问题变得尤成问题。举例来说,在一些实施方式中,大约15%的处理器功率可能会被指令解码器消耗掉。 
通常的情况是,在数据处理设备中提供一个或多个高速缓存以缓存处理电路所需的指令和数据。在高速缓存层级中的任一特定等级,可以提供单独的指令高速缓存和数据高速缓存(通常称作哈佛(Harvard)体系架构),或者可选地,可以提供统一的高速缓存以存储指令和数据(通常称作冯诺伊曼(Von Neumann)体系架构)。当指令从存储器中取出以存储在高速缓存中的时候,由于性能方面的原因,一些已知系统采用了预解码机制。根据这类机制,指令在存储在高速缓存之前被预解码,在这种情况下,高速缓存然后通常以比存储在主存储器中的指令更宽的格式存储指令,以容纳由预解码过程产生的附加信息。为了在指令稍后被解码和执行时帮助改善性能,在存储在高速缓存中的预解码的指令中提供的额外信息已用来识别分支指令,识别指令类别(例如,加载/存储指令,协处理器指令等)以便稍后协助多发射(multi-issue)电路给具体的执行流水线分派具体指令,从而识别可变长度指令集中的指令边界。 
例如,发表于1994年10月IEEE Transactions on Computers,Vol.43,No.10第1140-1150页的G Intrater等人的文章“PerformanceEvaluation of a Decoded Instruction Cache for VariableInstruction Length Computers”讨论了将预解码的指令存储在高速缓存中。Lawrence Livermore National Laboratory的L.Curtis Widdoes, Jr.于1979年12月11日发表的文章“The S-1 Project:DevelopingHigh-performance Digital Computers”描述了S1 Mark IIA计算机,文中解码的指令高速缓存将36位的指令字扩展到56位的指令高速缓存格式,以减少指令解码时间(还可以参见网站http://www.cs.clemson.edu/~mark/s1.html上的论文“Livermore S-1Supercomputer-A Short History”)。而且,采用预解码的机制来预先识别分支以及预先识别指令边界的思想在AMD K5 Processor Datasheet(公开号为18522E-0,1996年9月,第4.5节的Innovative x86Instruction Predecoding,第6页)中讨论过,其中讨论了给每个指令字节增加4位,以识别开始、结束、操作码位置,以及各个x86指令以后翻译所需的Rop(RISC操作)的数量。 
降低与解码电路相关的开销是有利的,解码电路用来对预解码的指令进行解码以生成控制信号来控制处理电路。降低此解码电路的门数降低了设备的复杂性、成本和功耗。 
从US-A-5,568,646中可知提供了支持多于一个指令集的处理器,并且使用指令流水线的解码阶段中的可编程逻辑阵列将第一指令集的指令中的至少一些位映射到第二指令集内的相应位。第一指令集的指令至少部分被映射到第二指令集的指令,并且映射的版本然后用来生成至少一些控制信号以控制其它流水线阶段。 
发明内容
从本发明的一方面看,提供了一种用于处理数据的设备,包括: 
预解码电路,其响应于从存储器中取出的程序指令来对所述程序指令执行预解码操作,以形成预解码的指令; 
高速缓冲存储器,其耦合到所述预解码电路,以存储所述预解码的指令; 
解码电路,其响应于从所述高速缓冲存储器中读取的预解码的指令来生成控制信号;和 
处理电路,其响应于所述控制信号以执行由所述预解码的指令指定的处理操作;其中 
所述程序指令来自多个不同的指令集; 
所述预解码电路将来自第一指令集的程序指令和来自第二指令集的 程序指令映射到预解码的指令,该预解码的指令具有共享格式来表示共享功能性;和 
所述解码电路的共享部分生成所述控制信号以关于所述共享功能性控制所述处理电路。 
本发明的技术认识到预解码电路采用表示共享功能性的共享格式提供了将来自不同指令集的指令映射到预解码的指令中的机会。这促进了使用解码电路的共享部分来由预解码的指令生成控制信号。这样,由于解码电路的至少一部分由不同的指令集共享,所以与解码电路相关的开销可以被降低。而且,由于预解码的指令通常是从指令高速缓存中多次取出的,所以在预解码阶段执行该到共享格式的映射允许在执行该映射中耗费的能量分摊到对预解码指令的多次使用上。并且,在预解码阶段执行该映射避免了在解码阶段的额外处理,该额外处理使得更难满足定时约束。 
尽管会理解来自多指令集的所有指令的全部功能性可以被共享,但不同的指令集更可能具有某些不被共享的功能性,因此在一些实施例中,预解码的指令包括一个或多个位字段,用来表示不被来自第一指令集和第二指令集的程序指令共享的功能性。 
可能不共享的功能性的一个例子是在第二指令集不包括条件码时,第一指令集使用条件码。响应于条件码的附加功能性可以由该一个或多个位字段来提供,该一个或多个位字段表示用于基于先前的处理活动的结果来选通(gate)执行或不执行的非重叠功能性。 
尽管指令集可以全部是固定长度,但在一些实施例中,第二指令集的指令是可变长度的指令,包括具有高位(order)部分和低位部分的至少一些程序指令。在这个上下文,该一个或多个位字段可以用来识别这类指令的高位部分和低位部分,以便促进由解码电路对它们进行解码。 
上述技术的局限性在于预解码的指令中可以用来表示由来自第一指令集和第二指令集的指令提供的各种不同类型的功能性的可用的指令位空间。在一些实施例中,第二指令集的至少一些程序指令可以被定义为具有不可预知的行为,并且由于第二指令集不会有效地使用预解码的指令中的该指令位空间来表示其自己的具有可预知行为的指令,所以相应的预解码的指令可以用来表示第一指令集中具有与第二指令集的任 何程序指令不共享的功能性的程序指令。 
不被不同指令集共享的功能性的例子是对指定为数值的操作数的支持,该数值存储在第一寄存器内,所述第一寄存器移位了第二寄存器中指定的量。在这个上下文中,指定第二寄存器的字段可以位于预解码的指令内与一立即值(immediate value)对应的位置处,该立即值指定表示不同指令集的指令的不可预知变体的预解码的指令内的移位量,所述不可预知变体使用存储在第三寄存器内的数值作为操作数,该第三寄存器移位了由正被再使用的所述立即值指定的量。 
至少其中一个指令集中可能有一些指令不可能共用解码电路,因此可以使用预解码的指令内的位字段以便选择使用解码电路的不共享部分,从而对该不共享的功能性进行解码。 
在第三指令集内的相邻指令被识别为具有与第二指令集的一个指令对应的组合功能时,预解码电路也可以被用来通过执行第三指令集的程序指令之间的映射来降低能耗。在此情况中,预解码电路可以生成与第二指令集的该一个指令对应的预解码的指令,来取代第一指令集中指定的相邻指令。该一个指令然后可以代替这两个之前的指令被执行,以节约时间和能量。 
预解码电路还可以通过响应于检测到对应于程序流的重定向的程序指令以便终止当前的程序指令流的预解码来节约能量。在程序流的重定向发生时,由于程序流会被重定向到不同点,并且那些预解码的指令不会被使用,所以对指令流中随后的指令进行预解码所消耗的能量很可能会被浪费掉。 
从本发明的另一方面看,提供了一种用来处理数据的设备,包括: 
预解码装置,用来对从存储器中取出的所述程序指令执行预解码操作,以形成预解码的指令; 
高速缓存装置,其耦合到所述预解码电路,以存储所述预解码的指令; 
解码装置,其用来响应于从所述高速缓冲存储器中读取的预解码的指令生成控制信号;和 
处理电路,其用来响应于所述控制信号,执行由所述预解码的指令指定的处理操作;其中 
所述程序指令来自多个不同的指令集; 
所述预解码装置将来自第一指令集的程序指令和来自第二指令集的程序指令映射到预解码的指令,该预解码的指令具有共享格式来表示共享的功能性;和 
所述解码装置的共享部分生成所述控制信号以关于所述共享功能性控制所述处理电路。 
从本发明的再一方面看,提供了一种用来处理数据的方法,包括以下步骤: 
对从存储器中取出的程序指令执行预解码操作,以形成预解码的指令; 
将所述预解码的指令存储在高速缓冲存储器中; 
响应于从所述高速缓冲存储器中读取的预解码的指令来生成控制信号;和 
响应于所述控制信号,执行由所述预解码的指令指定的处理操作;其中 
所述程序指令来自多个不同的指令集; 
执行预解码操作的所述步骤将来自第一指令集的程序指令和来自第二指令集的程序指令映射到预解码的指令,该预解码的指令具有共享格式来表示共享功能性;和 
生成所述控制信号的所述步骤使用解码电路的共享部分来生成所述控制信号,从而关于所述共享功能性控制所述处理电路。 
附图说明
只作为例子,参考附图中图解说明的实施例进一步描述本发明,图中: 
图1示意性地图解说明了根据一个实施例的数据处理设备; 
图2是图解说明由根据一个实施例的数据处理设备执行的一系列步骤的流程图; 
图3是更详细地图解说明在提供异常指示符时,由预解码电路执行的一系列步骤的流程图; 
图4是图解说明在取出和执行指令时由处理电路执行的一系列步骤的流程图; 
图5图解说明数据处理设备的一个具体示例性实施例; 
图6图解说明在预解码发生之前的两种指令格式; 
图7图解说明表示程序指令的数据是如何被存储在存储空间中的; 
图8A-图8D图解说明了可能产生预解码误差的几种可能情况; 
图9图解说明根据一个实施例的在预解码之后的两个示例性指令的格式; 
图10是列出预解码误差可能出现或可能不出现的情况的表格; 
图11是图解说明一些实施例中的数据处理系统的操作的流程图; 
图12图解说明根据一个实施例的预解码的Thumb 32指令内的不完整字段的使用; 
图13图解说明根据一个实施例的跨越高速缓存行(cache line)边界的Thumb 32指令通过数据处理设备的两种可能路线; 
图14是图解说明根据一个实施例的预解码操作序列的流程图; 
图15图解说明根据一个实施例的在预解码之后的两个示例性指令的格式;
图16是更加详细地图解说明根据一个实施例的为实现图11的步骤202而执行的步骤的流程图; 
图17图解说明根据一个实施例在指令高速缓存中提供的部件; 
图18图解说明根据一个实施例的高速缓存的标记RAM的每个条目是如何被扩展为存储推测的处理器状态的; 
图19示意性地图解说明在一个实施例中使用的双通道成组相关式(two-way set associative)指令高速缓存的构造; 
图20是图解说明根据一个实施例的预解码操作的流程图;
图21图解说明根据一个实施例的高速缓存查找程序; 
图22图解说明数据处理设备内的预解码器电路与组合的二级高速缓存关联的一个实施例; 
图23图解说明与图22中组合的二级高速缓存中的每个高速缓存行关联的附加指令/数据标识符值的使用; 
图24示意性地图解说明具有解码电路的处理流水线的一部分,所述解码电路包括用来解码与不同指令集中的指令对应的预解码的指令的共享部分; 
图25图解说明ARM指令的不同部分是如何可以被预解码为与Thumb32指令具有共享格式的预解码指令的; 
图26图解说明Thumb 32和ARM指令是如何被分别预解码为具有表示共享功能性的共享格式的预解码指令的; 
图27图解说明ARM指令是如何可以被预解码为与Thumb 32指令位空间中未使用部分对应的预解码指令的; 
图28图解说明两个相邻的Thumb 16指令是如何被连接并预解码成与单个Thumb 32指令对应的预解码指令的; 
图29是示意性地图解说明ARM指令到Thumb 32指令的重新映射的流程图; 
图30图解说明在预解码成过程中,两个Thumb 16指令是如何可以被重新映射到与单个Thumb 32指令对应的预解码指令的;和 
图31是示意性地图解说明在预解码过程中分支指令是如何被识别的,并用来触发预解码的提前终止的流程图。 
具体实施方式
图1示意性地图解说明了根据一个实施例的数据处理系统1。数据处理系统1包括处理器系统接口5,其包含用来从存储器(未显示)中取出表示程序指令的数据的指令取出电路。处理器系统接口5将从存储器中取出的指令传递到预解码电路10。预解码电路10对指令执行预解码操作以生成预解码的指令,预解码的指令被传递到行填充(line-fill)缓冲器15并被存储在指令高速缓存20中。存储在指令高速缓存20中的指令被处理电路25执行。处理电路25包括用来由预解码的指令生成控制信号的解码电路30,所述控制信号控制处理电路,以便执行处理操作。误差检测电路35用来检测预解码的指令中出现的某些误差,并使相关指令或包含那些指令的高速缓存行在被提供到处理电路25之前重新通过预解码电路10(或者直接地,或者通过行填充操作的启动)。在检测到这类误差的情况下,从误差检测电路35发送误差信号到处理电路25以使解码电路30中断可能关于已经检测到误差的这类预解码的指令已经开始的任何解码,处理电路25相反等待藉由重新通过预解码电路10而获得的预解码指令。 
在将指令存储在指令高速缓存之前对指令进行预解码是一种以前已经用来提高数据处理设备的性能的技术。然而,因为由预解码操作产生的长度更长的预解码的指令,所以以这种方式对指令预解码获得的性能 益处通常是以后来从指令高速缓存中取出那些指令以便执行时的更大的功耗为代价的。然而,由于与从指令高速缓存中取出高速缓存行相比,从主存储器中取出高速缓存行通常是罕见事件,所以已经认识到预解码器通常对给定指令的操作远远少于后面的解码器对给定指令的操作,因此存在实现数据处理设备的功率节省的可能。然而还认识到如果能识别指令的特征,对于该指令通过访问较宽指令高速缓存所消耗的功率比通过在指令高速缓存之后不必解码该特征而获得的功率节约少的话,才可能降低总体功耗。 
如上文指出的,指令预解码通常实现为性能增强技术,所增加的功耗被视作值得为性能益处付出的代价。不过,已经发现在指令高速缓存之后在解码阶段识别异常指令所需的解码电路可能对解码器的总门数贡献很大。这在安全数据处理设备中尤其如此,原因是异常指令必须以一致的确定的方式被解码,使得不管处理器处于何种条件,并且不管其最近执行过什么指令,它总是对特定的异常指令表现相同。因为异常指令必须以一致、确定的方式解码,所以更多的门必须被置于解码器中,以处理指令集体系架构中的边缘情况(corner case)。通过将该识别移到预解码阶段,并提供与预解码的指令有关的异常指令标识符,已经发现此配置所增加的功耗被不必在解码阶段识别异常指令的功率节省所超过。 
图2示意性地图解说明根据一个实施例的在执行预解码操作时由数据数据设备1执行的一系列步骤。流程开始于预解码电路10内的步骤300,已经(通过处理器系统接口5)从存储器中检索到指令。在步骤302,确定指令是否是异常的。在一个实施例中,异常指令被定义为是未定义的,或者是不可预知的指令。未定义指令是指令空间中的一个指令,却不是指令集的一部分。由于在(例如)32位指令空间中,有232(超过四十亿)个可能的编码,所以显然可以有大量的这类未定义指令。另一方面,不可预知的指令是被定义的指令,但是其使用方式使得它不会在数据处理设备中产生意义明确的结果,例如试图执行基址寄存器写回(writeback)的加载或存储指令,其中基址被设置为程序计数寄存器。 
如果指令被识别为异常,则在步骤304,预解码电路10提供识别该指令为异常的标识符。该标识符与预解码电路10生成的预解码的指令 有关,在一个实施例中,在预解码的指令中的边带位(side band bit)用作标识符。 
然而如果在步骤302,指令被识别为不是异常的,则步骤304被省略。流程前进到步骤306,在步骤306预解码电路10执行任何其它的(在说明书稍后部分会给出其它预解码步骤的例子)预解码步骤。最后,在步骤308,预解码的指令被存储在指令高速缓存20中(通过行填充缓冲器15)。 
图3示意性地更加详细地图解说明在一个实施例中由预解码电路10执行的图2的步骤304中的一系列步骤。首先,在步骤320,检查预解码电路10当前是否被配置为将所有异常指令转换为预定的未定义指令。如果是,则流程前进到步骤324,在步骤324中,进行该转换。在本发明的实施例中,预解码电路被配置为执行此操作,由于只有一个具体的未定义指令会被处理电路接收,并且对于所有异常指令其响应(例如调用专用异常例程)是明确定义并且可预知的,所以这允许处理电路中用来处理异常指令的机制特别简单。流程从步骤324继续到图2中的步骤306。因此在这个实施例中,预定的未定义指令本身的使用提供异常指令的“指示符”。 
否则流程前进到步骤326,在步骤326中,检查预解码电路10当前是否被配置成将所有的异常指令都标记为未定义的。由于之后处理所有异常指令就好像它们是未定义指令,且对于所有异常指令处理电路的响应是明确定义的且可预知的(例如,这类指令可能触发异常事件(exception),或可选地可能是NOP(空操作)处理的,通过处理电路而结果不会对处理电路的内部状态有任何影响),所以预解码电路10的这种配置也简化了处理异常指令的下游机制。如果所有的异常指令都应该被标记为未定义的,则流程前进到步骤330,在步骤330,生成相应的指示符,在此情况下,给预解码的指令增加边带位表明该指令是未定义的。 
如果预解码电路10当前未被配置为将所有异常指令标记为未定义的,则流程前进到步骤328,在步骤328,检查所识别的异常指令是否是未定义指令。如果是,则流程前进到步骤330,并且边带位被添加到预解码的指令,表明该指令是未定义的。如果异常指令不是未定义的,则在此实施例中,其一定是不可预知的,并且在步骤332,边带位被添 加到预解码的指令,表明该指令是不可预知的。通过图3的所有路径最终合并,前进到图2的步骤306。 
图4图解说明了在取出并执行指令时由处理电路25执行的一系列步骤,所述指令可能具有相关的指示符以标记预解码的指令为异常的。在步骤350,从指令高速缓存20中取出预解码的指令送到处理电路25中。 
接下来,在步骤352,借助于相关的指示符,检查预解码的指令以确定其是否已经被标记为异常的。如果预解码的指令没有被标记为异常,则在步骤354,正常执行该指令(如果需要之前由解码电路30进行进一步的解码)。 
另一方面,如果指令是异常的,则处理电路25以预定方式执行指令(步骤356)。在此实施例中,处理电路被配置成以两种方式中的一种方式执行此操作。首先,在步骤358,如果处理电路被配置为NOP该指令(不对该指令进行操作),则在步骤360该指令被执行为NOP,通过处理电路而结果不改变处理电路的任何状态。可选地,如果处理电路被配置为响应于异常指令而触发异常事件,则在步骤362,适当的异常事件被调用。 
因此,根据上述实施例,提供处理数据设备,其中通过在预解码阶段识别异常指令来实现功率节省。通过生成表明指令是异常的标识符,在稍后从指令高速缓存中检索预解码的指令时,处理电路可以更迅速地处理异常指令。而且,早期识别异常指令使得能够提供以可预知、明确定义的方式对否则会危害装置的操作和安全性的指令作出反应的数据处理设备。 
数据处理系统1处理来自一个或多个指令集的指令。例如,由剑桥的ARM有限公司生产的一些处理器可以执行来自ARM指令集的指令,以及来自混合长度Thumb 2指令集的指令。Thumb 2指令长度可以是16位或32位。因此,解码电路30可以包括用于每个指令集的解码器。图5显示了数据处理设备1的例子,其中解码电路30包括ARM解码器40,Thumb-32解码器45和Thumb-16解码器50。解码器40,45,50用来对存储在指令高速缓存20中的预解码的指令进行解码。解码器40,45,50从预解码的指令中生成控制信号,所述控制信号控制处理电路,以便执行处理操作。多路转接器(multiplexer)65根据处理器状态选择使用解码器40,45,50中的哪一个。 
图6显示了预解码之前的Thumb-16(T16)指令100和Thumb-32(T32)指令110。T16指令100由16位操作码(包括所有字段)组成。T32指令110由两部分组成。第一部分T32a由16位组成。T32指令110的第一部分T32a中的位[15:13]被设置成0b111。第一部分T32a的位[12:0]存储T32操作码的前13位。T32指令110的第二部分T32b含有包括T32操作码的后半部分的16位。对于T16指令和T32指令,T32的两部分长度彼此相同,且与T16的长度相同。不过对于所有混合长度的指令集来说,不总是这种情况。 
图7显示了表示程序指令的数据是如何被存储在存储空间150中的。数据被排列在块170中,每个块表示程序指令的一部分。例如,每个块可以表示T16指令,T32指令的第一部分T32a或T32指令的第二部分T32b。各个块被排列在高速缓存行160中。为了简单,在图7中,高速缓存行160被描绘为包含四个块,但应认识到高速缓存行160可以存储其它数量(一般很大)的块170。T32指令可以跨越两个高速缓存行160之间的边界,使得一个高速缓存行的最后一块表示T32a,下一个高速缓存行的第一块表示T32b。 
当程序被执行时,如果可能,处理电路执行存储在指令高速缓存20中的指令。如果指令不在指令高速缓存20中,则发生高速缓存未命中(cache miss),并且表示指令的数据块从存储器中被取出。处理器系统接口5内的取出电路从存储器中取出包括表示所需指令的一块或多个块的高速缓存行160。取出的块在被放置到指令高速缓存20中以便进一步解码之前,由预解码电路10进行预解码。不过,当块被取出时,预解码电路10不能毫无疑问地确定块表示指令的哪一部分。因此,预解码电路10对取出的块表示指令的哪一部分进行推测性识别。 
指令块中可以有一些位表示块很可能代表哪一部分。例如,在混合长度的Thumb2指令中,表示T 32指令的第一部分T32a的块的位[15:13]被设置成0b111。根据预解码电路10作出的识别,在块上执行预解码操作。例如,异常指令标识符可以被添加到块中,以指示该块是否是异常指令。不过根据该指令的操作码的值,T32指令的第二部分T32b可能也出现相同的位模式。因此,推测性识别可能是不正确的。如果对块的识别不正确,则预解码电路10可能在该块上执行错误的预解码操作,导致预解码误差。 
图8A到图8D图解说明了几种可能出现误差的情况。图8A显示了当处理器分支到高速缓存行的中间时,可能出现的误差。如果出现高速缓存未命中,则处理器系统接口从存储器中取出高速缓存行。预解码电路10从程序分支的那一点起开始预解码,使得处理器可以尽可能快地不停止(unstall)。预解码电路10然后继续预解码块直到高速缓存行的末端。预解码电路10然后返回到高速缓存行的开始,对高速缓存行中第一块表示哪一部分作出推测性识别,并对高速缓存行中剩下的块进行预解码。高速缓存行中第一块的推测性识别可能是不正确的,引起预解码误差。例如,在图8A中,高速缓存行的第一块实际上表示T32b部分,但根据块的位[15:13]的值,可能被错误地识别为是T32a部分或T16部分。 
在出现分支错误预测时可能出现另一种类型的误差,使程序流错误地分支到T32指令的中间,如图8B所示的。在这种情况下,预解码电路10可能不正确地将接下来的T32b部分识别为T16指令或T32a。随后的块也可能被误识别。例如,如果分支点的块实际上表示T32b部分,但被错误地识别为T32a,则接下来的块会被识别为T32b。这可能引起进一步的误差。 
如图8C中所示的,如果T32指令跨越高速缓存行边界,则在预解码电路10对第二高速缓存行解码时可能会出现误差。T32b部分可能被识别为T16指令或识别为T32a。 
图8D图解说明在高速缓存行包含不表示程序指令(文字)的数据时可能出现的误差。在这种情况下,预解码电路10可能将该文字解释为指令部分。这可能在后续块的识别中引起连锁(knock on)效应。例如,如果预解码电路10将该文字识别为T32a部分,则它会将下一个块预解码为T32指令的T32b部分。 
这样,存在可能引起预解码误差的几种情况。因此,在一些实施例中,数据处理系统1配备有误差检测电路35,该误差检测电路35可检测由预解码电路10作出的推测性识别是否是正确的,如果是不正确的,则用信号通知预解码误差,并校正高速缓存20中的误差指令。通过将已经检测到误差的至少一部分预解码指令发送回预解码电路10以被再次预解码可以校正预解码误差。在一些情况下,预解码电路10可能能够从预解码的块中重新生成原始指令块。校正误差的一种可选方法是使 高速缓存20中含有误差的高速缓存行无效,并使该高速缓存行从存储器中重新取出并再次预解码。 
为了使误差检测电路能够检测预解码电路10推测性地识别块的哪一部分,预解码电路用指令部分标识符对每个块作标记,所述指令部分标识符表明已经识别了块的哪一部分。该指令部分标识符作为一个或多个附加位被添加到块中。 
在一个实施例中,执行预解码操作,以便将异常指令标识符添加到T32指令,以表明该指令是否是异常的。该异常指令标识符以边带(sideband)信息的形式被添加到T32指令的第一部分T32a。在这个实施例中,没有边带信息被添加到T32指令的第二部分T32b或T16指令。 
因此,T16操作码和T32操作码的后半部分不会被预解码电路10更改。这表明由于操作码不会被更改因此不管作出的识别如何,存储在指令高速缓存20中的块是相同的,所以预解码电路10如果错误地将表示T16指令的块识别为T32指令的第二部分T32b是无关紧要的。类似地,如果预解码电路10将实际表示T32b的块识别为T16,也是无关紧要的。此外,不正确的识别不会产生预解码误差。这意味着出现预解码误差的数量可以被减小。如果出现的预解码误差越少,则误差检测电路35需要校正的误差越少,预解码电路10不必不止一次地预解码一样多的指令。因此,数据处理系统1消耗的功率会被降低。 
由于块是被识别为T16还是T32b是无关紧要的,所以对每种情况,预解码电路10将相同的指令部分标识符添加到块中。因此,指令部分标识符只需要识别块是否表示T32指令的第一部分T32a。这意味着指令部分标识符只需要一位,所以指令不需要被不适当地扩展。这意味着将预解码的指令存储在高速缓存20中所消耗的功率较小。在一个实施例中,当块被识别为表示T32a时,指令部分标识符被设置为“1”,当块表示T32b或T16指令时,指令部分标识符被设置为“0”。 
图9显示在一个示例性实施例中预解码之后的T16指令和T 32指令的格式。如果块被识别为表示T32指令的第一部分T32a,则预解码电路10在位[16]添加指令部分标识符(ID位),并将指令部分标识符设置为“1”。插入边带信息,表明指令是否是异常指令。由于位[16]的指令部分标识符现在表明该块表示T32指令的T32a部分,所以位[15:13]对于识别该块是冗余的。因此,边带信息可以被插入这些位中,而不会 丢失信息。进行此操作的一种方式是在T32a部分的位[15:14]插入边带位,一位表示指令是否是未定义的,一位表示指令是否是不可预知的。因此,边带信息可以被添加到块中,而不扩展块的长度,降低了将指令存储在高速缓存20中所消耗的功率。 
由于T32指令的边带信息只被添加到指令的第一部分T32a,所以这允许在第二部分T32b上执行的预解码操作与在T16指令上执行的操作一样,使得出现误差的数量可以被减小。如果块被识别为表示T16指令,则预解码电路10在位[16]添加指令部分标识符(ID位),并将指令部分标识符设置为0。位[15:0]中的T16操作码不被更改。如果块被识别为表示T32指令的第二部分,则对该块执行与T16指令相同的预解码操作。T32指令的位[33](对应于表示T32指令的第二部分T32b的位[16])被设置成0。T32操作码的后半段的剩余部分不被修改。 
因此,在T16已经被识别为T32b或T32b已经被识别为T16时,预解码电路不需要检测误差,所以要检测的误差更少。唯一需要被检测的误差是在T32b部分被不正确地推测识别为T32a部分时,在两个连续块被标记为T32a部分时(这在T32指令跨越高速缓存行边界时会出现),或者在T32a部分被错误地识别为T32b部分(由来自前一块的错误标识的连锁效应引起的)。图10的表列出了可能出现误差或可能不出现误差的情况。列本地指令流(Native Instruction Stream)显示高速缓存行中的块序列实际表示哪一部分。列预解码推测(Pre-decodeSpeculation)显示预解码电路已推测性地识别块的哪一部分。在分支误预测出现时可能出现一些预解码误差,导致程序流分支到T32指令的中间。在程序流从前一高速缓存行继续时,可能出现其它误差。 
应认识到本技术不局限于Thumb2指令集中的指令,而是可应用于任何可变长度指令集中的指令,或者可应用于不同长度的指令集中的指令。通过确保对于来自第一指令集的指令的至少一个部分和来自第二指令集的指令的至少一个部分,不管预解码电路10识别块的哪一部分,在该块上执行的预解码操作是相同的。因此,系统消耗的功率可以被降低。 
图11显示了图解说明一些实施例中数据处理系统1的操作的流程图。首先,在步骤200,处理器系统接口5中的指令取出电路从存储器中取出包括表示程序指令的多个数据块的高速缓存行。接下来,在步骤 202,数据块被传递到预解码电路10,预解码电路10通过对所述块执行预解码操作来对块进行预解码,并生成预解码的块。预解码操作将参考图15进行更加详细描述。在步骤204中,由预解码的块组成的预解码的指令被存储在指令高速缓存20中。随后,在步骤206中,误差检测电路35检查存储在高速缓存20中的预解码的块中的误差。在步骤208,误差检测电路35识别是否已经检测到任何预解码误差。 
如果在步骤208中,误差检测电路35识别到已经检测到预解码误差,则误差检测电路35用来校正该预解码误差。在一个实施例中,在步骤210中,误差检测电路35将任何不正确预解码的块的至少一部分发送回预解码电路10。流程然后返回步骤202,在步骤202中,预解码电路再次对不正确预解码的块进行预解码。 
作为步骤210的可选方案,误差检测电路35相反可以执行步骤212。在步骤212,误差检测电路35使指令高速缓存20中包含不正确预解码的指令的高速缓存行无效。流程然后返回步骤200,在步骤200中,包含不正确预解码指令的高速缓存行从存储器中被重新取出。 
另一方面,如果误差检测电路35在步骤208中识别没有检测到误差,则流程转到步骤216。在步骤216中,处理电路25中的解码电路30对预解码的指令进行解码,并生成控制信号。接下来,在步骤220,处理电路响应于控制信号执行处理操作。然后过程结束。 
可能会出现因此应该被识别的另一个预解码误差是在Thumb32指令跨过高速缓存行边界时,并且在执行预解码操作时第二半字(secondhalf-word)不可用于预解码电路。在正常操作中,只要预解码器有来自前一高速缓存行的第一半字(first half-word)和来自新高速缓存行的第二半字,预解码器就可以正确地对跨过高速缓存行边界的Thumb-32指令进行预解码。不过,在Thumb-32指令跨过高速缓存行边界,且在正执行预解码操作时还没有取出新的高速缓存行时,预解码操作是不完整的,因此边带信号不能被正确地预解码。 
为了使处理电路稍后能确定在从指令高速缓存读取预解码的指令时预解码操作是不完整的,在一个实施例中,不完整字段被添加到预解码的指令以形成不完整的预解码标识符,如果在执行预解码操作时预解码电路不能访问Thumb-32指令的两个部分,则设置该字段,并且在一个具体实施例中,预解码的Thumb-32指令可以被表示为图12中所示的那 样。具体地,比较图12和之前讨论的图9,可以看出每个预解码的指令部分已经从17位扩展到18位,使得位0-17表示第一预解码的指令部分,位18-35表示第二预解码的指令部分。第一预解码的指令部分的位0-16与之前讨论的图9是一样的,边带信号(识别异常指令的存在)被插入到位位置14和15之间,并且指令部分标识符被插入在位位置16。而且,位位置17用来提供不完整字段,如果在执行预解码操作时,预解码电路不能访问Thumb-32指令的后半段,则该位被设置,因此表明位位置14和15中的边带信号不能被信赖,并且实际上可能是不正确的。 
考虑预解码指令的后半段,位17-34与之前描述的图9中所示的实施例的位16-33相同。添加位位置35,以便使第二预解码的指令部分与第一预解码的指令部分的长度相同,并且在一个实施例中,位35被设置为等于0。不过,正如本文后面更详细描述的,在可选实施例中,位位置35可以用于另一目的。 
在可选实施例中,不是在位位置17使用不完整字段,而是在执行预解码操作时只能访问Thumb-32指令的第一半字的情况下,预解码电路可以被布置为设置位位置16中的指令部分标识符,以识别第一预解码的指令部分与Thumb 16指令相关,即通过将位位置16设置为逻辑值0。如果稍后从指令高速缓存中取出这种预解码的指令部分,则误差检测电路35会观察到该指令部分其实是已被不正确地标记为Thumb 16指令的一部分Thumb 32指令,因此用信号通知误差,防止可能被破坏的预解码指令被处理电路执行。因此,通过这种机制,可以防止处理电路使用不完整预解码的指令,而不需要如图12中显示的单独的不完整位。 
作为图12中所示的实施例的另一可选实施例,不完整的预解码标识符可以被存储在与特定高速缓存行的标记RAM入口(entry)相关的高速缓存中。当这种标识符被设置时(优选地这被提供为单个位字段),这会标明出现在高速缓存行末端的预解码的指令部分会受到不完整的预解码操作,因此,不能认为是被正确预解码的。 
在一些实施例中,提供与每个标记RAM入口相关的该单个标识位而不是试图在每个预解码的指令中容纳该额外信息可能是更加空间有效的。 
图13图解说明跨过高速缓存行边界的Thumb 32指令通过数据处理设备可能采用的两种可能路径。如图13中所示,提供缓冲器380以存 储通过处理器系统接口5从存储器系统中取出的特定高速缓存行的最后半字(last half word),如果该最后半字是Thumb 32指令的第一半字,则使用该缓冲的信息。如果处理器正不断地从存储器中取出连续的高速缓存行,则通过缓存该最后的指令部分,预解码电路10可以等待下一个高速缓存行以经过处理器系统接口5和多路转接器60从存储器路由到预解码电路10,并且在那点可以通过使用跨越高速缓存行边界的指令的两个半字执行完整的预解码操作,并生成适当的边带信号。结果,在预解码的指令稍后通过行填充缓冲器15进入指令高速缓存20中时,预解码的指令随后可以从指令高速缓存中读取,并直接通过解码电路30,正如图13中的路径“A”示意性表示的那样。 
不过,如果处理器不是连续取出连续高速缓存行,则与跨过高速缓存行边界的Thumb 32指令的前半段对应的预解码的指令部分会受到不完整的预解码操作,因此需要使用上述三种可行技术中的任何一种技术来设置不完整的预解码标识符。在这种实例中,在包括这种第一预解码的指令部分的Thumb 32指令从指令高速缓存20中读取时,预解码误差检测电路35会检测不完整的预解码标识符的设置,并且在一个实施例中使整个Thumb 32指令通过多路转接器60重新路由回到预解码电路10中,正如图13中路径“B”示意性表示的那样。具体地,控制信号通过路径37从预解码误差检测电路35路由回到多路转接器60,以使多路转接器选择回送(loopback)路径39上呈现的指令数据。在本发明的实施例中,由于在产生预解码的指令时,由预解码操作产生的信息被添加到指令中的方式,所以这是可能的。具体地,由于一旦指令部分标识符被插入在位位置16时位位置15和14变成冗余的,所以边带信号被添加到位位置15和14中。结果,原始指令可以容易地从预解码的指令中重新产生,因此,不需要从存储器中重新取出指令就可以使指令重新路由通过预解码电路10。 
在可选实施例中,如果不能从预解码的指令中重新产生原始指令,则预解码误差检测电路35可以被设置为使指令高速缓存中相关的两个相邻高速缓存行无效,并且执行行填充操作,以使那两个高速缓存行从存储器中被顺序地重新取出,并通过预解码电路。 
应认识到在检测误差,以及指令重新通过预解码电路之后,指令会沿着路径A,并且在处理电路需要时可被检索到解码电路30中。 
图14示意性地图解说明了根据上述技术的预解码电路的操作。预解码操作开始于步骤400,并在步骤402确定指令是否是Thumb 32指令。如果是,则在步骤404中检测该Thumb 32指令是否跨过高速缓存行边界,如果是,则在步骤406中确定处理器是否正从顺序高速缓存行中取出。 
如果处理器正从顺序高速缓存行中取出,则在步骤410中出现在高速缓存行末端的Thumb 32指令的第一指令部分被缓存在寄存器380中,之后在步骤412,预解码电路10等待从处理器系统接口5接收下一高速缓存行。一旦下一高速缓存行可用,则在步骤414中以正常方式在Thumb32指令上执行预解码操作。如果在步骤402检测到指令不是Thumb 32指令,则过程会直接前进到步骤414,因为在本发明的一个实施例中,由处理器执行的任何其它指令集的指令与高速缓存行边界对齐。类似地,如果指令是Thumb 32指令,但在步骤404确定Thumb 32指令没有跨过高速缓存行边界,则处理器再次直接前进到步骤414。 
如果在步骤406中,确定处理器不从顺序高速缓存行中取出,则过程前进到步骤408,在步骤408,关于Thumb 32指令的第一半字,执行不完整的预解码操作,并且不完整字段被设置成识别已经通过使用不完整的预解码操作生成添加到预解码的指令部分中的边带信号。 
从上述描述可以看出,通过提供与一个或多个预解码的指令部分相关的这类不完整的预解码指示,如果包括这种预解码的指令部分的预解码的指令稍后由处理电路从高速缓存中读取,则该指示将向处理电路标明,预解码的指令可能被破坏,允许处理电路采取适当动作。因此,由于执行没有被完整预解码的指令而产生的不正确操作可以被避免,而不会对设计产生大的附加花费和复杂性。 
在上面讨论的实施例中,异常指令标识符仅被添加到T32指令。例如,这可以通过将边带信息添加到T32指令的第一部分T32a来完成。异常指令标识符不被添加到T16指令。在某种程度上,这是可接受的,因为T16指令集小得足以使得可以比T32指令更容易地解码异常指令,因此解码电路对这些异常指令进行解码所消耗的功率较小。 
不过,在一个实施例中,当不完整的预解码标识符被添加时,T32指令的第一部分T32a被扩展。为了更好地利用可用的存储空间,两个T16指令应该与一个T32指令(或者ARM指令)的长度相同。因此,在 T32指令的第一部分已经被扩展成容纳不完整的预解码标识符时,在预解码过程中,附加位也可以被添加到T16指令。这个位可以用来存储异常指令标识符。例如,该位可以包含边带信息,该边带信息表明指令是否是未定义指令。这样,在对未定义的指令进行解码时所消耗的功率可以被降低。 
T32指令的第二部分T32b不需要异常指令标识符,因为该信息会被包含在第一部分T32a中。不过重要的是,由预解码电路10在T32b部分上执行的预解码操作与在T16指令上执行的操作相同。因此,如果块被推测性地识别为表示T32b部分,则预解码电路10添加异常指令标识符,表明在临时假设(与推测相对)该块表示T16指令的情况下该T16指令是否是异常的。因此,不管是识别为T16指令还是识别为T32b部分,在块上执行的操作是相同的。如果预解码电路10错误地将T16指令识别为T32b部分,则由于异常指令标识符无论如何都被添加到该块所以该错误识别并不重要,并且因此预解码误差不会发生。如果推测是正确的,则T 32b部分中的异常指令标识符可以被忽略。 
图15显示根据至少一些实施例的一旦预解码操作已经在T16指令和T32指令上执行,T16指令和T32指令的格式。对于推测性地被识别为T16指令的块而言,指令部分标识符被添加在位[16],并被设置为“0”,并且边带位被添加在位[17],表明指令是否是异常的。位[15:0]中的T16操作码未被更改。相同的操作在被推测性地识别为表示T32指令的第二部分T32b上执行。指令部分标识符被添加在位[34],并设置为“0”,并且边带位被添加在位[35],表明在临时将该块识别为T16指令时,该T16指令是否是异常的。在位[33:18]中的T32操作码的后半段是未被更改的。 
对于推测性地被识别为T32指令的第一部分T32a的块,预解码电路10将边带信息添加到该块的位[15:14]。指令部分标识符被添加在位[16]并设置为“1”,并且不完整的预解码标识符被添加在位[17],表明T 32指令是否跨越高速缓存行边界。 
因此,不管块是被识别为T16指令,还是被识别为T32b部分,都对该块执行相同的预解码操作。用于指令的抗错预解码格式也一致采用可用来传达(convey)异常指令标识符的额外位。 
将参考图16更加详细地描述图11的步骤202的过程,在该过程中, 块是由预解码电路10预解码的。在步骤250中,预解码电路10推测性地识别块表示哪一指令部分。在步骤254,预解码电路10检测该块是否已经被识别为T32指令的第一部分T32a。 
如果预解码电路10将该块识别为T32指令的第一部分T32a,则流程前进到步骤260,在步骤260中,预解码电路10检测T32指令是否是异常指令。在步骤262中,预解码电路10根据该T32指令是否是异常指令将连带信息添加到该块中。在步骤264中,预解码电路10以ID位的形式添加指令部分标识符,该指令部分标识符被添加在该块的位[16],并被设置为“1”。 
另一方面,如果在步骤254中,预解码电路10没有将块识别为T32a部分,则流程前进到步骤270。预解码电路10临时假设该块表示T16指令,并检测该T16指令是否是异常指令。然后,在步骤272中,不管该块是T16指令,还是T32指令的第二部分T32b,预解码电路10都将边带信息添加到该块中,表明T 32是否是异常指令。在步骤274,预解码电路10然后以ID位的形式添加指令部分标识符,该指令部分标识符被添加在块的位[16]并被设置为0。 
对于通过图16的流程图的两条路径,流程然后前进到步骤280,在步骤280中,由预解码电路10执行任何进一步的预解码操作。这可以包括例如添加关于图14讨论的操作以添加不完整的指令标识符。一旦任何进一步的预解码操作完成,在步骤284预解码的块然后被传递到高速缓存20。流程然后返回图11中的步骤204。 
在使用预解码电路时数据处理设备内可能出现的另一个问题是当特定的高速缓存行内存在混合的指令状态时。举一个具体例子,ARM处理器可能能够执行由英国的ARM有限公司开发的ARM,Thumb,ThumbEE或Jazelle指令集的指令,并且一个高速缓存行可能包括来自多于一个指令集的指令。 
在任一特定时间点,根据当前正被执行的指令属于哪个指令集,处理电路可以处在特定的处理器状态。因此,在一个时间点,处理电路可以处在ARM处理器状态,而在随后的时间点其可以分支到Thumb指令序列,并因此进入Thumb处理器状态。 
在预解码指令时,预解码电路在执行预解码时需要假设推测的处理器状态,并且该选择的推测的处理器状态之后一般会用于预解码通过处 理器系统接口5接收的整个高速缓存行的指令。在一个具体实施例中,推测的处理器状态被选择为在预解码电路执行预解码操作时处理器的状态。应认识到如果例如所选择的推测的处理器状态对于高速缓存行中的所有指令不是适当的处理器状态,则指令高速缓存20可以存储已经被破坏的预解码的指令。例如,如果在对特定的高速缓存行执行预解码操作时,处理器处在Thumb状态,而高速缓存行混合ARM指令和Thumb指令,则应认识到,ARM指令可能被不正确地预解码,对这些ARM指令产生被破坏的预解码指令。实际上,如果在一个高速缓存行中的最后指令是状态改变分支指令,并且下一高速缓存行已经受到预解码电路的预解码操作,则整个高速缓存行也可能是在错误的状态下被预解码的。 
尽管对经过预解码的每个半字作标记以表明用于该预解码的推测的处理器状态是可行的,但这会消耗指令高速缓存的指令数据RAM中的大量区域。由于高速缓存行混合状态的情况是罕见的,在一个实施例中,用高速缓存行被预解码时处理器所处的状态标记高速缓存行,这经证明是区域更有效的(area efficient)。因此,在一个实施例中,高速缓存的指令标记RAM中的每个条目(entry)可以被扩展为存储如图18中示意性显示的推测的处理器状态。本领域技术人员应理解,指令标记RAM中的每个条目一般存储地址部分480,并且通常存储一个或多个其它控制位,例如表明相关的高速缓存行是否是有效的有效位。如图18所示,对每个条目可以提供附加的两个位,以识别在对指令数据RAM中相应的高速缓存行上执行预解码操作时使用的推测的处理器状态485。 
图17更加详细地图解说明在指令标记RAM中使用这种扩展的标记RAM条目时,指令高速缓存20中提供的部件。如图17所示,当特定的高速缓存行的预解码的指令被存储在指令高速缓存的指令数据RAM 450的该高速缓存行中时,相关指令标记RAM 460中的相应条目被填充已经由预解码电路10输出的推测的处理器状态信息485和地址部分480。 
在处理器随后发出访问请求,想要从指令高速缓存20读取指令时,高速缓存使用地址比较电路464、状态比较电路468和命中/未命中(hit/miss)电路470执行查找操作。具体地,地址比较电路464确定由访问请求指定的地址是否与所选择的指令标记RAM 460内的条目中存储的任何地址部分匹配。在一个实施例中,指令高速缓存20被设置为n-通道成组相关式高速缓存,并且在一个具体实施例中采用如图19中 所示的双通道成组相关式高速缓存形式。因此,在这种实施例中,存在两个标记RAM 460-0和460-1,和相关联的两个数据RAM 450-0和450-1。对于每个高速缓存行492,在相关联的标记RAM中存在相应的条目490以存储在图18中示意性显示的信息。 
本领域技术人员应理解在处理电路发出访问请求时,地址的索引部分被用来识别指令高速缓存中的特定组(set),每个组包括每通道的一个高速缓存行,因此对于图19的例子,每个组包括两个高速缓存行。访问请求中指定的地址的标记部分然后与存储在每个标记RAM中相应条目的地址部分480进行比较,并且相应地对于图19的例子,地址比较逻辑464会执行两个地址比较,即比较地址的标记部分和来自与地址的索引部分指定的组相关的每个标记RAM中的条目的地址部分480。 
而且,除了使用地址比较电路464执行地址比较之外,状态比较电路468还对当前处理器状态和标记RAM中那些被访问的条目中存储的推测的处理器状态485进行比较。命中/未命中电路470被设置成如果地址比较电路464识别到匹配,并且状态比较电路468也识别到匹配,则只检测命中条件,即如果想要访问的指令存在于指令高速缓存中,并且用来预解码该指令的推测的处理器状态与当前的处理器状态匹配,则才检测命中条件。 
如果发生命中条件,使多路转接器472输出从指令高速缓存的适当通道的数据RAM 450读出的指令,该指令由此被提供给解码电路30。 
如果没有检测到命中条件,则未命中信号通过路径474发出,使得从处理器系统接口5发出行填充请求。结果,指令的相关高速缓存行从存储器中被取出,并传递通过预解码电路10。 
应认识到存在两种类型的未命中条件。第一个条件是典型的条件,其中想要访问的指令目前不在指令高速缓存中,在这种情况中,来自预解码电路10的输出可以以正常方式被分配给指令高速缓存。对于之前讨论的双通道成组相关式高速缓存的例子,这会涉及到在其中一个通道清除并使无效高速缓存行的内容,并将新预解码的指令分配给该高速缓存行。不过目前可能会产生的另一未命中条件是在地址比较电路464检测到匹配时,即指令存在于高速缓存中,但状态比较电路468没有检测到匹配,因此,识别为相关的指令已经在假设错误的处理器状态下被预解码。在此情况中,高速缓存未命中造成从存储器中重新取出高速缓存 行,并将取出的指令重新传递通过预解码电路。尽管在一个实施例中,在这种情况下来自预解码电路10的输出会以与如上所述的完全相同方式被分配,但在可选实施例中,来自预解码电路10的输出会被优先分配给不同的通道(way)。这可以避免在高速缓存行包含来自多于一个指令集的指令的情况下可能出现的潜在“系统失效(thrashing)”问题。 
为了说明此系统失效问题,考虑这样一个例子,其中高速缓存行的第一部分包含Thumb指令,高速缓存行的第二部分包含ARM指令,一开始假设Thumb处理器的状态对整个高速缓存行进行预解码。应认识到,如果在处理电路处于ARM处理器状态时,访问ARM指令中的一个指令,则状态比较电路468会检测到推测的处理器状态(即Thumb状态)与当前的处理器状态(即,ARM状态)不匹配,因此,将执行上述的重新取出过程。这次,假设ARM处理器状态对整个高速缓存行进行预解码,这现在提供是访问请求对象的正确的预解码ARM指令。不过,如果来自预解码电路的这个输出用于重写以前的高速缓存行内容,则如果在稍后阶段,处于Thumb处理器状态的处理电路想要访问高速缓存行第一部分中的其中一个Thumb指令,则可以看到由于状态比较电路468会再次识别到推测的处理器状态和当前的处理器状态不匹配而再次检测到未命中条件。 
在这种情况下,通过将来自预解码电路10的输出分配给不同的高速缓存行,可以避免该问题,原因是它允许两种形式共存于高速缓存中。因此,考虑之前的例子,形成特定高速缓存行的预解码指令的相同指令集将作为在假设为Thumb处理器状态下被预解码的一系列预解码的指令被存储在一个高速缓存行中,并作为在假设为ARM处理器状态下被预解码的一系列预解码的指令在不同的通道被存储在另一高速缓存行中。 
尽管这会避免上述系统失效问题,但在清除和使无效高速缓存时,如果由于上述过程,每个物理地址处的指令已经被存储在多个高速缓存行中,则清除和使无效操作需要在该物理地址的多个高速缓存行上操作。 
图20图解说明一个实施例的上述预解码操作。在步骤500,预解码操作开始,之后在步骤504,处理电路的当前处理器状态被确定,并被设置为推测的处理器状态。之后,在步骤508,预解码操作由预解码电 路10使用推测的处理器状态来执行。然后在步骤510每个预解码的指令连同推测的处理器状态的指示一起被存储在高速缓存20中。 
图21示意性地图解说明了在接收到来自处理电路的访问请求时,由指令高速缓存20执行的过程。在步骤550,等待来自处理电路的访问请求,并且在接收到这种访问请求时,在步骤554中,使用由该访问请求指定的地址,在高速缓存中执行查找程序。 
在步骤558中,确定地址比较电路464是否已经检测到地址匹配,如果没有,则在步骤570中命中/未命中电路470生成未命中条件,使行填充操作发生。 
如果在步骤558中检测到地址匹配,则在步骤560中确定状态比较电路468是否已经检测到当前处理器状态和存储在相关指令标记RAM条目中的推测的处理器状态之间的匹配。如果匹配,则命中/未命中电路470生成命中信号,使匹配的预解码指令从相关的数据指令RAM 450通过多路转接器472输出到处理电路25的解码电路30。不过如果在步骤560中确定当前处理器状态与推测的处理器状态不匹配,则在步骤568中生成未命中条件,使行填充操作在与地址比较电路464检测的地址匹配的高速缓存通道不同的高速缓存通道(cache way)中进行。 
通常用来触发处理器状态变化的状态改变指令会引起到新地址(因此不同高速缓存行)的分支,该新地址包含在新的处理器状态下执行的第一指令。不过在可选实施例中,可能不是这种情况,因此,在状态改变指令后,待执行的下一指令可以是相同的高速缓存行中的下一指令。在这种情况下,在从指令高速缓存的取出包含多于一个的指令,并且在该取出中的一个指令(不是最后一个指令)是状态改变指令时可能会出现问题。在这种情况下,对于该取出会正确地出现“命中”,但在指令高速缓存含有只在一个状态下被预解码的高速缓存行的情况下,状态改变指令之后的所有指令将会被不正确地预解码。为了解决该问题,在一个实施例中,误差检测电路35被设置成侦察这种情况,以对状态改变指令之后的连续指令触发“状态误差”,并启动行填充或回送通过预解码过程。 
在ARM指令集和Thumb指令集之间的过渡中,由于状态改变指令是分支到新的高速缓存行的BLX类型的指令,所以该潜在问题不会出现。然而,在Thumb指令集和ThumbEE指令集之间的过渡中,由于状态改变 指令(ENTERX/LEAVEX)不使用分支,因此从新地址的取出不会被状态改变指令触发,所以会出现该问题。在这种情况下,上述的误差检测机制可以用来识别状态改变指令,对状态改变指令之后的连续指令触发“状态误差”,然后启动从紧接在状态改变指令之后的存储器地址中的新的取出。 
尽管在上述实施例中,预解码器电路已经与用来直接给处理电路25提供指令的一级指令高速缓存相关联,但在图22所示的可选实施例中,预解码电路10可以与存储指令和数据两者的组合高速缓存关联,例如二级高速缓存605。如此图中所示的,处理器系统接口5实际上与组合的二级高速缓存605通信,而不是直接与存储器通信,并且为了完整性,除了之前讨论的指令高速缓存20之外,一级数据高速缓存615也被示出。在这个实施例中,来自存储器的指令可以被路由通过预解码电路10,从而产生预解码的指令,以存储在组合的二级高速缓存605中。不过,从存储器中检索到二级高速缓存,或者从二级高速缓存写回到存储器中的数据会绕过预解码电路10。 
如图23所示,附加标识符630可以与每个高速缓存行关联以识别高速缓存行存储的是指令还是数据。除了每个标记RAM条目625中的推测的处理器状态位635和地址部分640之外,附加标识符也被添加,因此为相应的高速缓存行650识别该高速缓存行的内容是否是预解码的指令,或者是在执行那些指令时由处理电路使用的数据值。通过这种方法,指令/数据标识符630使已经经过预解码的那些高速缓存行能够被清楚地识别。因此,当在高速缓存中执行查找程序时,可以确定是否需要在查找程序期间对着当前的处理器状态检查推测的处理器状态,特别是这类检查仅对于存储预解码的指令的那些高速缓存行是必需的。 
从上述描述可以看出,通过在高速缓存中存储推测的处理器状态,稍后可能检测到预解码电路作出的推测的处理器状态的假设是错误的,并且因此,从高速缓存中读取的预解码的指令不应当被处理电路使用。这提供了一种对已经被预解码过程破坏的指令的某些情况进行检测的既简单、有效又节省功率的机制。 
图24图解说明了具有类似于以前描述的那些的形式的指令流水线。该指令流水线支持对应于三种不同指令集(即ARM指令,Thumb 32指令和Thumb 16指令)的指令的预解码和随后的处理操作的执行。已经认 识到许多常见的ARM指令共享或具有与同样存在于Thumb 32指令中的指令密切对应的功能性。通过使用ARM指令由预解码电路10预解码以形成存储在指令高速缓存20中的预解码的指令的系统,并使用共享格式来表示与相应的Thumb 32指令共享的功能性,可以利用该认知。因此,在存储于指令高速缓存20内的解码指令中,对应于ARM指令或Thumb32指令的各个预解码的指令将共享相同的格式来表示相同的功能性。由预解码电路10在ARM指令上执行的重新映射表示在预解码阶段的附加活动,该重新映射力图将ARM指令重新映射成以与Thumb 32指令相同的方式在预解码的指令中表示的形式,但是在指令被加载到指令高速缓存20中时该活动将被执行,而已经以这种方式被重新映射的预解码的指令一般从指令高速缓存20中被多次读取,并由系统的剩余部分执行。因此,重新映射所消耗的附加活动(能量)被分摊在重新映射的指令的多次使用上。 
从图24中显然可见,ARM指令重新映射成类似于预解码形式的Thumb32指令的形式使得Thumb 32解码电路45能够为大多数解码操作重新使用,关于最初是ARM指令的那些指令需要执行所述解码操作。这节省了解码电路中的门数,因此节省了能量。 
存在一些ARM指令,它们不与任何Thumb 32指令共享足够接近的功能性使得它们能够被重新映射为共享格式,对于该ARM指令解码电路可能已经提供在Thumb 32解码电路45中。关于这些仅ARM(ARM-only)指令,附加解码电路46被提供,并在识别这类仅ARM(ARM-only)指令时被切换使用。该仅ARM(ARM-only)解码电路46比传统的多指令集系统中所需的全部ARM解码电路块小得多。 
如之前描述的,预解码的指令长度为36位。原始ARM指令为32位指令。因此,预解码的指令中的附加位可以用来表示之前描述的如图25中所示的边带信号。对ARM指令以及其它指令提供相同的边带信号促进在解码电路45,50,46内进行更有效的解码。预解码的指令中的一位用来对仅ARM(ARM-only)指令作标记,对于该仅ARM(ARM-only)指令没有等价的Thumb 32指令,并且使用仅ARM(ARM-only)解码电路46为其进行解码,并由此生成适当的控制信号。该仅ARM(ARM-only)位被选择为在所有Thumb 32指令内具有固定值的那一位,并且在对应于ARM-only指令的预解码的指令内该ARM-only位被设置为相反值。 
ARM指令集的一个特征是每个指令都包括4位条件码,即代码N,C,Z和V。如图25所示,给这些条件码分配预解码的指令内与位位置16,17,34和35对应的位置。这些位位置在与Thumb 32指令对应的预解码的指令中通常用于其它目的,即识别位,不完整位和边带信号。假定ARM指令在存储器中被存储为32位对齐的字,则在预解码的指令内ARM指令不需要识别位和不完整位,只需要边带位的一个区域,从而为ARM指令释放预解码的指令内的位空间,以便表示条件码N,C,Z和V。Thumb32解码电路45可以容易被更改以响应于ARM指令的预解码的指令内的这些条件码,响应方式是根据关联的条件码值选通(gate)执行那些预解码的指令。如果与ARM指令对应的预解码的指令满足其条件码,则预解码的指令会被执行,并且会由此生成适当的控制信号。如果预解码的指令不满足其条件码,则预解码的指令不会被执行。 
图26图解说明都被解码为预解码的指令形式的Thumb 32ADC指令和ARM ADC指令的例子,其中共享功能性是以共享格式表示的。Thumb 32指令和ARM指令内对应的字段已经被赋予相同的名称。可以看出,虽然原始Thumb 32指令的格式和原始ARM指令的格式大不相同,然而它们还是包含几乎所有的相同字段,因此,在Thumb 32指令被预解码时,将ARM指令内的字段重新映射到预解码的指令内与那些字段的相同位置对应的位置是相对简单高效的。这种重新映射是由图24中所示的预解码电路10执行的。 
ARM指令包括在位位置[31:28]的4个条件码位。如之前讨论的,这些条件码被映射到预解码的指令内与ARM指令对应的位位置35,34,17和16。与ARM指令对应的预解码的指令仍包含在位位置[15:14]的边带信号,但由于ARM指令在存储器中是32位对齐的,因而这些边带信号将适用于全部的36位预解码的指令,并且由于高速缓存行是字对齐的,所以与跨越高速缓存行边界的指令相关的问题对ARM指令不会出现。同时注意到图26中预解码的指令内的位位置33。对于与Thumb 32指令和ARM指令对应的两个预解码的指令,该位位置33都示出为具有“应该为0”的值。该“应该为0”的值对应于Thumb 32指令内的位31。如果Thumb 32指令内的31位不是0,则这被定义为具有不可预知的行为。 
图27图解说明与预解码的指令内“应该为0”的值被设置为1相关 联的不可预知的行为是如何可以用来在预解码的指令内提供指令位空间,以表示不被任何Thumb 32指令共享的ARM指令的功能性。在图27的例子中,没有等价的Thumb 32指令的ARM指令是寄存器移位的寄存器变体(variant)中的ADC指令。在这个变体中,在ARM指令的位[11:8]指定的移位寄存器Rs存储表示移位量的值,该移位量会被应用到存储在两个输入源寄存器Rm,Rn中其中一个值。Thumb 32指令没有它们的ADC指令的寄存器移位的寄存器变体。图27的ARM指令内的剩余字段类似于图26中显示的那些字段。不过,ARM指令的寄存器移位的寄存器变体不包括立即(immediate)字段。对于图26的Thumb 32指令和ARM指令该立即字段被映射到预解码的指令内的位[32:30]和[23:22]。预解码的指令内的这个位空间可以被重新用来表示寄存器的寄存器标识符R s,所述寄存器存储图27的预解码的指令形式的ARM指令的寄存器移位的寄存器版本内的移位值。解码电路45被配置为通过在表示寄存器移位的寄存器变体ARM指令的ADC的预解码的指令中将“应该为0”的位33设置为值“1”来辨别(recognise)提供给其的预解码的指令具有该特定形式。 
这种行为可与在位位置13使用仅ARM(ARM-only)位进行对比,凭借这种行为对应于Thumb 32指令的不可预知的行为的位空间被重新用来表示仅ARM(ARM-only)变体指令。对于与任何Thumb 32指令相似性很少的并且为其提供仅ARM(ARM-only)解码电路46的指令,可以保留位位置13处的仅ARM(ARM-only)位。重新使用Thumb 32指令中对应于不可预知行为的位空间不仅保护了预解码的指令内的指令位空间,而且促进了重新使用解码电路45的共享部分内的相同的门。 
图28图解说明预解码电路10可以提供的另一特征。已经认识到Thumb 16指令序列可以包括指定与单个Thumb 32指令对应的组合功能性的相邻指令。预解码电路可以通过将相邻的Thumb 16指令预解码为与等价的Thumb 32指令对应的单个预解码的指令对此进行识别。与Thumb 32指令对应的单个预解码的指令会作为单个实体被发布到执行流水线,从而比两个单独的Thumb 16指令更加快速高效地执行。预解码电路10可以集中于数量相对少的普通情况,在这些情况下,两个相邻的Thumb 16指令可以被重新映射到Thumb 32指令的相应的预解码形式,以便平衡提供识别这种机会的附加电路的益处和代价。 
图29是示意性地图解说明在预解码电路内将ARM指令重新映射到Thumb 32指令的流程图。在步骤700,从存储器中取出高速缓存行。在步骤702,对要解码的第一指令是否来自ARM指令集作出确定。如果要被预解码的指令不是来自ARM指令集,则处理前进到步骤704,在步骤704执行根据Thumb 16指令或Thumb 32指令的预解码。 
如果在步骤702确定要解码的指令是ARM指令,则步骤706确定ARM指令是否可以被映射到T32格式的预解码的指令,以便用解码器的共享部分进行解码。如果ARM指令可以通过这种方式映射,则处理前进通过步骤707。如果ARM指令不能以这种方式被映射,则步骤709将ARM指令预解码为带仅ARM(ARM-only)位设置的预解码的指令,使得解码器的非共享部分将被使用。然后步骤708将预解码的指令存储在高速缓冲存储器20中。步骤710确定在取出的高速缓存行填充中是否有更多的指令需要预解码。如果有更多的这类指令,则处理返回步骤702,否则处理暂停(halt)。 
图30是示意性地图解说明两个Thumb 16指令是如何可以被重新映射到与单个Thumb 32指令对应的预解码的指令的流程图。在步骤712,从存储器中取出高速缓存行。在步骤714,对要解码的第一指令是否是Thumb 16指令作出确定。如果该指令不是Thumb 16指令,则处理前进到步骤716,在步骤716,根据ARM指令或Thumb 32指令的适当行为执行预解码。 
如果在步骤714确定取出的指令是Thumb 16指令,则步骤718读取下一个Thumb 16指令,并且步骤720识别这两个相邻的Thumb 16指令是否对应于一个Thumb 32指令。 
如果在步骤720确定这两个相邻的Thumb 16指令不与一个Thumb 32指令对应,则步骤722为两个单独的Thumb 16指令生成预解码的指令。不过,如果在步骤720确定这两个相邻的Thumb 16指令确实与一个Thumb 32指令对应,则步骤724生成与等价的Thumb 32指令对应的预解码的指令,这与步骤722生成的两个单独的Thumb 16指令相反。 
步骤726将预解码的指令存储到指令高速缓存20中。然后步骤728确定被取出的高速缓存行中是否有更多的指令需要预解码。如果有更多的这类指令,则处理返回步骤714。 
图31图解说明与可以在预解码电路10内执行以识别分支指令,并 提前终止预解码操作的处理对应的流程图。如果遇到将采纳(taken)或预测会采纳的分支指令,则由于该分支(或预测的采纳分支)之后的指令很可能不被执行,花费在这种预解码上的能量会被浪费,所以提前终止预解码会是能量有效的。在步骤730,从存储器中取出高速缓存行。在步骤732,预解码电路10识别正被预解码的指令是否是采纳分支(taken branch)。如果被预解码的指令是采纳分支(例如,无条件分支(跳转)),则处理终止。如果在步骤732确定指令不是采纳分支,则在步骤734中预解码该指令。然后步骤736将预解码的指令存储在指令高速缓存20中,并且步骤738确定高速缓存行中是否有更多的指令需要预解码。如果有更多的这类指令,则处理返回步骤732。 
应认识到,由图29,图30和图31的流程图所示的过程被示出为顺序的、相对于彼此是独立的过程。本领域技术人员会认识到在使用预解码电路10执行这些过程时,这些过程可以以不同的步骤次序发生或某些步骤可以并行执行。而且,单独在图29,图30和图31中图解说明的过程在实际中很可能至少部分是并行执行的。本技术包括所有这些各种各样的可选方案。 
尽管本文已经描述了具体的实施例,但显然本发明并不局限于此,在本发明的范围内可以作出许多修改和增加。例如,在不偏离本发明的范围的情况下,可以将所附从属权利要求的特征和独立权利要求的特征进行各种组合。 

Claims (16)

1.用于处理数据的设备,包括:
预解码电路,其响应于从存储器中取出的程序指令来对所述程序指令执行预解码处理,从而形成预解码的指令;
高速缓冲存储器,其耦合到所述预解码电路,以存储所述预解码的指令;
解码电路,其响应于从所述高速缓冲存储器中读取的预解码的指令来生成控制信号;和
处理电路,其响应于所述控制信号以执行由所述预解码的指令指定的处理操作;其中
所述程序指令来自多个不同的指令集;
所述预解码电路将来自第一指令集的程序指令和来自第二指令集的程序指令映射到具有共享格式以表示共享功能性的预解码的指令,所述第一指令集和所述第二指令集的所述程序指令具有所述共享功能性并还具有某些不被共享的功能性;和
所述解码电路的共享部分生成所述控制信号以关于所述共享功能性控制所述处理电路;
其中具有所述共享格式的所述预解码的指令包括一个或多个位字段,该一个或多个位字段用来表示不被来自所述第一指令集和所述第二指令集的程序指令共享的所述功能性。
2.根据权利要求1所述的设备,其中来自所述第一指令集的程序指令包括条件码,来自所述第二指令集的程序指令不包括条件码,并且所述一个或多个位字段用来表示来自所述第一程序指令集的程序指令的条件码。
3.根据权利要求1所述的设备,其中来自所述第一指令集的程序指令是固定长度的指令,来自所述第二指令集的程序指令是可变长度的指令,其包括具有高位部分和低位部分的至少一些程序指令,并且所述一个或多个位字段用来识别来自所述第二指令集的至少一些程序指令的高位部分和低位部分。
4.根据权利要求1所述的设备,其中所述第二指令集的至少一些程序指令具有不可预知的行为,并且相应的预解码的指令用来表示具有不与所述第二指令集的任何程序指令共享的功能性的所述第一指令集的程序指令。
5.根据权利要求4所述的设备,其中具有不与所述第二指令集的任何程序指令共享的功能性的所述第一指令集的所述程序指令包括寄存器移位的寄存器变体指令,所述寄存器移位的寄存器变体指令指定被存储在移位了第二寄存器中指定的量的第一寄存器内的值。
6.根据权利要求1所述的设备,其中预解码的指令内与所述第一指令集中的指令对应的位字段被用于对指令做标记,针对该指令,没有等价的所述第二指令集的指令,并且,使用了所述解码电路的不共享部分。
7.根据权利要求1所述的设备,其中所述多个指令集包括第三指令集,并且所述预解码电路响应于具有与所述第二指令集的单个指令对应的组合功能的所述第三指令集的相邻取出的程序指令来生成与所述单个指令对应的预解码的指令。
8.根据权利要求1所述的设备,其中所述预解码电路响应于与重定向程序流对应的程序指令的检测,来终止当前的程序指令流的预解码。
9.一种处理数据的方法,包括以下步骤:
对从存储器中取出的程序指令执行预解码操作,以形成预解码的指令;
将所述预解码的指令存储在高速缓冲存储器中;
响应于从所述高速缓冲存储器中读取的预解码的指令来生成控制信号;和
响应于所述控制信号,执行由所述预解码的指令指定的处理操作;其中
所述程序指令来自多个不同的指令集;
执行预解码操作的所述步骤将来自第一指令集的程序指令和来自第二指令集的程序指令映射到具有共享的格式来表示共享功能性的预解码的指令,所述第一指令集和所述第二指令集的所述程序指令具有所述共享功能性并还具有某些不被共享的功能性;和
生成所述控制信号的所述步骤使用解码电路的共享部分来生成所述控制信号,从而关于所述共享功能性控制处理电路;其中具有所述共享格式的所述预解码的指令包括一个或多个位字段,该一个或多个位字段用来表示不被来自所述第一指令集和所述第二指令集的程序指令共享的所述功能性。
10.根据权利要求9所述的方法,其中来自所述第一指令集的程序指令包括条件码,来自所述第二指令集的程序指令不包括条件码,并且所述一个或多个位字段用来表示来自所述第一指令集的程序指令的条件码。
11.根据权利要求9所述的方法,其中来自所述第一指令集的程序指令是固定长度的指令,来自所述第二指令集的程序指令是可变长度的指令,其包括具有高位部分和低位部分的至少一些程序指令,并且所述一个或多个位字段用来识别来自所述第二指令集的至少一些程序指令的高位部分和低位部分。
12.根据权利要求9所述的方法,其中所述第二指令集的至少一些程序指令具有不可预知的行为,并且相应的预解码的指令用来表示具有不与所述第二指令集的任何程序指令共享的功能性的所述第一指令集的程序指令。
13.根据权利要求12所述的方法,其中具有不与所述第二指令集的任何程序指令共享的功能性的所述第一指令集的所述程序指令包括寄存器移位的寄存器变体指令,所述寄存器移位的寄存器变体指令指定被存储在移位了第二寄存器中指定的量的第一寄存器内的值。
14.根据权利要求9所述的方法,其中预解码的指令内与所述第一指令集中的指令对应的位字段被用于对指令做标记,针对该指令,没有等价的所述第二指令集的指令,并且,使用了所述解码电路的不共享部分。
15.根据权利要求9所述的方法,其中所述多个指令集包括第三指令集,并且所述预解码电路响应于具有与所述第二指令集的单个指令对应的组合功能的所述第三指令集的相邻取出的程序指令来生成与所述单个指令对应的预解码的指令。
16.根据权利要求9所述的方法,其中所述预解码步骤响应于与重定向程序流对应的程序指令的检测,来终止当前的程序指令流的预解码。
CN2009100061112A 2008-01-23 2009-01-23 处理数据的方法和设备 Active CN101493762B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US12/010,312 US8347067B2 (en) 2008-01-23 2008-01-23 Instruction pre-decoding of multiple instruction sets
US12/010312 2008-01-23

Publications (2)

Publication Number Publication Date
CN101493762A CN101493762A (zh) 2009-07-29
CN101493762B true CN101493762B (zh) 2013-05-22

Family

ID=40230796

Family Applications (1)

Application Number Title Priority Date Filing Date
CN2009100061112A Active CN101493762B (zh) 2008-01-23 2009-01-23 处理数据的方法和设备

Country Status (4)

Country Link
US (1) US8347067B2 (zh)
JP (1) JP5424653B2 (zh)
CN (1) CN101493762B (zh)
GB (1) GB2456859B (zh)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20120159127A1 (en) * 2010-12-16 2012-06-21 Microsoft Corporation Security sandbox
CN102426516A (zh) * 2011-09-29 2012-04-25 杭州中天微系统有限公司 基于两级片上缓存的可变长度指令集的预解码装置
WO2013132767A1 (ja) 2012-03-09 2013-09-12 パナソニック株式会社 プロセッサ、マルチプロセッサシステム、コンパイラ、ソフトウェアシステム、メモリ制御システムおよびコンピュータシステム
US8819342B2 (en) * 2012-09-26 2014-08-26 Qualcomm Incorporated Methods and apparatus for managing page crossing instructions with different cacheability
CN103309645B (zh) * 2013-04-27 2015-09-16 李朝波 一种在计算机数据处理指令中附加跳转功能的方法及cpu模块
US10223118B2 (en) * 2016-03-24 2019-03-05 Qualcomm Incorporated Providing references to previously decoded instructions of recently-provided instructions to be executed by a processor
CN106547488B (zh) * 2016-10-21 2019-04-19 国家计算机网络与信息安全管理中心 一种混合缓存管理方法
US10684856B2 (en) 2017-07-11 2020-06-16 International Business Machines Corporation Converting multiple instructions into a single combined instruction with an extension opcode
CN111628845B (zh) * 2017-09-01 2022-12-06 惠州市德赛西威汽车电子股份有限公司 一种提高数据传输效率的方法
GB2577738B (en) * 2018-10-05 2021-02-24 Advanced Risc Mach Ltd An apparatus and method for providing decoded instructions
FR3097345B1 (fr) * 2019-06-13 2021-06-25 Stmicroelectronics Grand Ouest Sas Procede de gestion du fonctionnement d’une unite de calcul capable de fonctionner avec des instructions de tailles differentes et circuit integre correspondant
US11204768B2 (en) 2019-11-06 2021-12-21 Onnivation Llc Instruction length based parallel instruction demarcator
CN115938455A (zh) * 2021-08-16 2023-04-07 长鑫存储技术有限公司 一种存储器测试方法、设备及装置
US20240036866A1 (en) * 2022-07-28 2024-02-01 Texas Instruments Incorporated Multiple instruction set architectures on a processing device

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1147306A (zh) * 1994-05-03 1997-04-09 先进Risc机器有限公司 多指令集映射
US6081884A (en) * 1998-01-05 2000-06-27 Advanced Micro Devices, Inc. Embedding two different instruction sets within a single long instruction word using predecode bits
CN1851639A (zh) * 2005-04-22 2006-10-25 Mips技术公司 用于对指令进行再编码的方法与装置
US20070033383A1 (en) * 2005-08-05 2007-02-08 Arm Limited Multiple instruction set decoding
US20070260854A1 (en) * 2006-05-04 2007-11-08 Smith Rodney W Pre-decoding variable length instructions

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0476626A (ja) 1990-07-13 1992-03-11 Toshiba Corp マイクロコンピュータ
GB2289353B (en) * 1994-05-03 1997-08-27 Advanced Risc Mach Ltd Data processing with multiple instruction sets
US5761490A (en) 1996-05-28 1998-06-02 Hewlett-Packard Company Changing the meaning of a pre-decode bit in a cache memory depending on branch prediction mode
US6009512A (en) * 1997-10-27 1999-12-28 Advanced Micro Devices, Inc. Mechanism for forwarding operands based on predicated instructions
US6304963B1 (en) 1998-05-14 2001-10-16 Arm Limited Handling exceptions occuring during processing of vector instructions
US6253287B1 (en) * 1998-09-09 2001-06-26 Advanced Micro Devices, Inc. Using three-dimensional storage to make variable-length instructions appear uniform in two dimensions
US6314509B1 (en) 1998-12-03 2001-11-06 Sun Microsystems, Inc. Efficient method for fetching instructions having a non-power of two size
EP1050799A1 (en) 1999-05-03 2000-11-08 STMicroelectronics S.A. Execution of a computer program
US6560694B1 (en) 2000-01-14 2003-05-06 Advanced Micro Devices, Inc. Double prefix overrides to provide 16-bit operand size in a 32/64 operating mode
US20020004897A1 (en) 2000-07-05 2002-01-10 Min-Cheng Kao Data processing apparatus for executing multiple instruction sets
US6820194B1 (en) 2001-04-10 2004-11-16 Mindspeed Technologies, Inc. Method for reducing power when fetching instructions in a processor and related apparatus
EP1387252B1 (en) * 2002-07-31 2019-02-13 Texas Instruments Incorporated Instruction prefix to indicate system commands
US6952754B2 (en) 2003-01-03 2005-10-04 Intel Corporation Predecode apparatus, systems, and methods
US20040225840A1 (en) * 2003-05-09 2004-11-11 O'connor Dennis M. Apparatus and method to provide multithreaded computer processing
GB2402764B (en) * 2003-06-13 2006-02-22 Advanced Risc Mach Ltd Instruction encoding within a data processing apparatus having multiple instruction sets
US7415638B2 (en) 2004-11-22 2008-08-19 Qualcomm Incorporated Pre-decode error handling via branch correction
US7769983B2 (en) * 2005-05-18 2010-08-03 Qualcomm Incorporated Caching instructions for a multiple-state processor
GB2435116B (en) * 2006-02-10 2010-04-07 Imagination Tech Ltd Selecting between instruction sets in a microprocessors
US7509481B2 (en) 2006-03-03 2009-03-24 Sun Microsystems, Inc. Patchable and/or programmable pre-decode
US7711927B2 (en) 2007-03-14 2010-05-04 Qualcomm Incorporated System, method and software to preload instructions from an instruction set other than one currently executing
US7676659B2 (en) 2007-04-04 2010-03-09 Qualcomm Incorporated System, method and software to preload instructions from a variable-length instruction set with proper pre-decoding

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1147306A (zh) * 1994-05-03 1997-04-09 先进Risc机器有限公司 多指令集映射
US6081884A (en) * 1998-01-05 2000-06-27 Advanced Micro Devices, Inc. Embedding two different instruction sets within a single long instruction word using predecode bits
CN1851639A (zh) * 2005-04-22 2006-10-25 Mips技术公司 用于对指令进行再编码的方法与装置
US20070033383A1 (en) * 2005-08-05 2007-02-08 Arm Limited Multiple instruction set decoding
US20070260854A1 (en) * 2006-05-04 2007-11-08 Smith Rodney W Pre-decoding variable length instructions

Also Published As

Publication number Publication date
GB2456859B (en) 2012-01-04
US8347067B2 (en) 2013-01-01
GB0821520D0 (en) 2008-12-31
GB2456859A (en) 2009-07-29
JP5424653B2 (ja) 2014-02-26
JP2009176303A (ja) 2009-08-06
CN101493762A (zh) 2009-07-29
US20090187742A1 (en) 2009-07-23

Similar Documents

Publication Publication Date Title
CN101493762B (zh) 处理数据的方法和设备
US6216206B1 (en) Trace victim cache
US5761712A (en) Data memory unit and method for storing data into a lockable cache in one clock cycle by previewing the tag array
CN101694613B (zh) 不对准存储器存取预测
US6101577A (en) Pipelined instruction cache and branch prediction mechanism therefor
JP3798404B2 (ja) 2レベルの分岐予測キャッシュによる分岐予測
US7925866B2 (en) Data processing apparatus and method for handling instructions to be executed by processing circuitry
WO2001097043A1 (en) A translation lookaside buffer flush filter
CN103309644A (zh) 用于微处理器的转译地址高速缓存
WO2007019001A1 (en) Call return stack way prediction repair
US8037286B2 (en) Data processing apparatus and method for instruction pre-decoding
US5893146A (en) Cache structure having a reduced tag comparison to enable data transfer from said cache
US5794027A (en) Method and apparatus for managing the execution of instructons with proximate successive branches in a cache-based data processing system
US5890006A (en) Apparatus for extracting instruction specific bytes from an instruction
US6061775A (en) Apparatus and method for predicting a first microcode instruction of a cache line and using predecode instruction data to identify instruction boundaries and types
US7747839B2 (en) Data processing apparatus and method for handling instructions to be executed by processing circuitry
EP1005675B1 (en) A data memory unit configured to store data in one clock cycle and method for operating same
US6134650A (en) Apparatus and method for predicting a first scanned instruction as microcode instruction prior to scanning predecode data
EP4127917B1 (en) Fetch stage handling of indirect jumps in a processor pipeline
EP0919027B1 (en) A delayed update register for an array
EP0912930B1 (en) A functional unit with a pointer for mispredicted branch resolution, and a superscalar microprocessor employing the same
EP1015980B1 (en) A data cache capable of performing store accesses in a single clock cycle
WO1998002806A1 (en) A data address prediction structure utilizing a stride prediction method
KR100742002B1 (ko) 캐시 메모리 장치, 및 이를 포함하는 프로세서 및 컴퓨터시스템
EP0912929B1 (en) A data address prediction structure and a method for operating the same

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant