CN1376977A - 选择性存取不同指令缓冲阶层的装置及方法 - Google Patents
选择性存取不同指令缓冲阶层的装置及方法 Download PDFInfo
- Publication number
- CN1376977A CN1376977A CN02107189.6A CN02107189A CN1376977A CN 1376977 A CN1376977 A CN 1376977A CN 02107189 A CN02107189 A CN 02107189A CN 1376977 A CN1376977 A CN 1376977A
- Authority
- CN
- China
- Prior art keywords
- instruction
- stratum
- branch
- pointer
- microprocessor
- 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.)
- Granted
Links
- 239000000872 buffer Substances 0.000 title claims abstract description 158
- 238000000034 method Methods 0.000 title claims description 55
- 238000006073 displacement reaction Methods 0.000 claims description 55
- 230000008569 process Effects 0.000 description 37
- 230000001276 controlling effect Effects 0.000 description 17
- 230000000875 corresponding effect Effects 0.000 description 13
- 238000010586 diagram Methods 0.000 description 10
- 230000009471 action Effects 0.000 description 6
- 230000006870 function Effects 0.000 description 5
- 235000003642 hunger Nutrition 0.000 description 5
- 239000011159 matrix material Substances 0.000 description 5
- 238000000354 decomposition reaction Methods 0.000 description 4
- 238000012937 correction Methods 0.000 description 3
- 238000012545 processing Methods 0.000 description 3
- 230000005540 biological transmission Effects 0.000 description 2
- 238000006243 chemical reaction Methods 0.000 description 2
- 238000013461 design Methods 0.000 description 2
- 230000004044 response Effects 0.000 description 2
- 230000008901 benefit Effects 0.000 description 1
- 230000002596 correlated effect Effects 0.000 description 1
- 238000001514 detection method Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 238000012797 qualification Methods 0.000 description 1
- 230000000630 rising effect Effects 0.000 description 1
- 230000037351 starvation Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3804—Instruction prefetching for branches, e.g. hedging, branch folding
- G06F9/3806—Instruction prefetching for branches, e.g. hedging, branch folding using address prediction, e.g. return stack, branch history buffer
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30145—Instruction analysis, e.g. decoding, instruction word fields
- G06F9/30149—Instruction analysis, e.g. decoding, instruction word fields of variable length instructions
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3802—Instruction prefetching
- G06F9/3816—Instruction alignment, e.g. cache line crossing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/38—Concurrent instruction execution, e.g. pipeline or look ahead
- G06F9/3818—Decoding for concurrent execution
- G06F9/382—Pipelined decoding, e.g. using predecoding
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Advance Control (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
一种分支控制装置,适用于一微处理器,此分支控制装置包括:一指令缓冲器,具有数个阶层,用以暂存自指令快取区接收的指令字节的快取线。一多任务器,是在指令缓冲器中的三个阶层中选取一底层阶层,以提供至指令格式化逻辑,其中此多任务器所选取的阶层,是依据一分支指针、一指令涵盖指针及一进位指针而进行选取,其中分支指针是用以指示微处理器目前是否分支至分支目标地址快取区所提供的目标地址,而分支指针及目标地址目前是储存于相关联的阶层中,其中此阶层是包含因目标地址而被快取的分支指令。涵盖指针是指出目前被格式化的指令是否涵盖横跨两个快取线,而进位指针则是指出目前被格式化指令是否占据目前被格式化的指令缓冲器阶层的最后字节位置。
Description
技术领域
本发明是有关于一种分支目标地址在管线微处理器进行快取的领域,且特别是有关于一种在微处理器因分支目标地址快取命中而进行分支(branch)后,将正确的指令格式提供至指令格式化逻辑的装置及方法。
背景技术
管线微处理器(pipelined microprocessor)包括多重的管路阶层,在程序指令执行中,每一个阶层会展现一个不同的函数需求。典型的管线阶层函数是指令撷取(fetch)、指令译码、指令执行、内存存取以及结果写回(result write-back)。
其中,指令撷取阶层是在目前的执行程序中撷取下一个指令,而此下一个指令基本上是下一个循序内存地址的指令,然而,在发生分支(taken branch)指令的情况下,下一个指令是由分支指令所指定的内存地址中的指令,一般称此内存地址为分支目标地址(branch targetaddress)。指令撷取阶层从指令快取区中撷取的指令,目前如果不在此指令快取区中,则会自机器的阶层式内存(memory hierarchy)中较高层次的指令高速缓存中撷取,例如从较高阶层高速缓存或是从系统内存中撷取得到,而指令撷取阶层撷取到的指令会提供给下一个阶层的指令译码阶层处理。
指令译码阶层包括指令译码逻辑,用以对从指令撷取阶层接收的指令字节进行译码。在处理器支持不同指令长度的情况下,例如x86结构处理器,一个指令译码阶层的功能,会分割指令字节流以格式化指令,其中格式化指令流(a stream of instructions)包括决定每一个指令的长度,比方说,指令格式化逻辑从指令撷取阶层接收尚未辨识的指令字节流,进而对此指令字节流进行格式化,或分析为个别的字节群组,其中每一个位群组是一个指令,而这些指令所组成的程序即是可使处理器进行执行的指令。另外,指令译码阶层也包含转换宏指令,例如x86指令,为由剩余的管线(pipeline)进行执行的微指令(micro-instruction)。
指令执行阶层包括执行逻辑,是执行从指令译码阶层接收的已格式化及译码的指令,其中执行逻辑是操作从处理器的缓存器组及/或内存回收的数据。而写回阶层,是将执行逻辑所产生的结果储存至处理器的缓存器组。
管线处理器的一个重要观念,是使每一个阶层的处理器忙碌于函数被设计时的工作,假设指令译码阶层已准备要译码下一个指令,但指令撷取阶层尚未提供其所需的指令字节时,则处理器在效能上就会变糟。而为了防止指令译码阶层的饥饿(starvation),普遍性的解决方法是:在指令快取区及指令格式化逻辑之间,放置一个指令缓冲器。指令撷取阶层会尝试在指令缓冲器中保持数个指令的字节,以使指令译码阶层有指令字节可进行译码,不至有饥饿情形发生。
一般来说,指令快取区一次会提供一个指令字节的快取线(cacheline),通常为16或32字节,而指令撷取阶层会自指令快取区中撷取一个或多个快取线,进而将快取线储存至指令缓冲器中。当指令译码阶层准备译码一个指令时,会自指令缓冲器中存取指令字节,而不是在指令快取区中等待。
此指令快取区提供一个指令字节用的快取线,可由撷取地址(fetchaddress)进行选取,其中撷取地址是由指令撷取阶层将的提供给指令快取区。在正常的程序运作中,由于在预期的情况下会循序性地执行程序指令,因此撷取地址会单因快取线的大小而增加,且增加后的撷取地址会被指作为下一个循序撷取地址。然而,如果有一个分支指令(branch instruction)被指令译码逻辑译码,且此分支指令发生(或预期发生),则撷取地址会更新为分支指令的目标地址(以快取线大小计算下),而不是被更新为下一个循序撷取地址。
然而,在撷取地址被更新至分支目标地址的时候,指令缓冲器可能在分支指令后,随着下一个循序指令的指令字节而移位。因为当分支情况发生时,在分支指令后的指令不会被译码及执行。而程序本身在执行时,是需要对在分支目标地址上的指令进行执行,而不是对在分支指令后的下一个循序指令进行执行,因此在程序的循序指令流为典型的预期情况时,指令缓冲器中的指令字节错误的预先撷取(ppre-fetch)。而为了补救这个错误,处理器必须在分支指令后,清除(flush)掉所有的指令字节,包括在指令缓冲器中的指令字节。
但在发生分支指令后,立即清除指令缓冲器会产生极高的代价,因为指令译码阶层会持续饥饿,直到指令缓冲器从指令快取区中重新移植过。而一个可解决此问题的方法是:在译码分支指令前先进行分支。此可以由使用一个分支目标地址快取区(branch target addresscache;简称BTAC)来实现,此BTAC快取(cache)包含先前已执行分支指令的指令快取线的撷取地址,以及与其相关的目标地址。
此指令快取区撷取地址是应用于BTAC,本质上相似于撷取地址对于指令快取区的应用。在包含分支指令快取线的指令快取区撷取地址情况中,快取线是提供给指令缓冲器。此外,如果撷取地址命中(hit)BTAC,BTAC会提供一个相关的分支目标地址,如果分支指令命中BTAC是预期发生的,则指令快取撷取地址会被更新为由BTAC提供的目标地址。
因为指令快取区会一次提供一条指令集的快取线提供至指令缓冲器,因此在分支指令后,快取线中可能仍会有指令字节存在。而在分支指令后的这些指令字节不应被执行。然而,指令缓冲器不会一次全被清除掉(如上所述,在没有BTAC的处理器中会被清除掉),因为可能直到现在尚未被译码的指令缓冲器中,仍有有效指令存在。特别是,分支指令本身(即任何在快取线中优先于分支指令的指令字节)必须被译码及执行。
可是,在分支指令仍在指令缓冲器中且尚未被格式化的情况下,在指令缓冲器中接续于分支指令的指令的位置也不得而知,这是因为分支指令在快取线中的长度及位置在分支指令被格式化前无法得知,因此在指令缓冲器中的分支指令的位置未知。据此,在分支指令后的指令的位置也无法得知。
此外,也可能在分支指令译码前,包含分支的目标指令的快取线会被储存至指令缓冲器中,而在快取线中,处于目标指令前的指令字节不会被执行,更复杂点的,分支指令可能会由多字节(multiple bytes)组成,而造成分支指令会涵盖横跨多个快取线。
一般说来,在管线微处理器的设计中,去设计指令格式逻辑,使的在处理器的循环周期中进行指令格式函数,是很困难的事,因此,尽可能在格式化指令字节上提供更多的循环周期,会比将指令字节自指令缓冲器中位移,更有助益。而如果是利用一个指令缓冲器使的尽可能提供时间,也是相当有助益的事,因为可让指令格式化逻辑格式化由指令缓冲器提供的指令字节。此外,利用微处理器中一个具有较大储存空间的指令缓冲器,以减少指令译码阶层饥饿的可能性,也很有帮助。特别是关于这一点在当微处理器管线处理指令的速度增加时会特别重要。这在与内存的存取时间,或是与撷取阶层在发生分支情况下,自指令快取区中撷取指令所需的时间有关的速度增加上尤其正确。
因此,在管线处理器中的分支控制装置是必须的,使得基于BTAC的指令快取撷取地址在利用上,可以与一个具有较大储存空间的指令缓冲器结合,而此具有较大储存空间的指令缓冲器可以提供有效的处理时间特性及适当的程序执行。
发明内容
本发明在管线处理器中提出一种分支控制装置,使得预先译码(pre-decode)BTAC的利用,可以与多字节宽度结合,而多重阶层指令缓冲器则提供指令译码逻辑,以增加格式化指令的时间。依据上述欲达成的目的,本发明的特征在于提供一微处理器,而此微处理器包括一个指令缓冲器,具有数个阶层,用以暂存自指令快取区接收的指令字节。此微处理器也包括一个分支指针,是关联于数个储存指针用的阶层,用以检测微处理器是否有分支到暂存于关联阶层中的分支指令的目标地址。微处理器也包含一个多任务器(multiplexer),耦接于指令缓冲器,依据与分支指针相关联的阶层,选择其中的一个阶层。
本发明另在微处理器中也提供一种预先译码阶层,此预先译码阶层包括一个指令缓冲器,至少具有阶层A、B以及C,用以暂存指令字节。此预先译码阶层也包括一个多任务器,耦接于指令缓冲器,用以选择阶层A、B及C其中的一个阶层以提供至指令格式化逻辑。预先译码阶层也包含一分支指针,耦接于多任务器,依据呈现于阶层A的分支指令以指示微处理器是否发生分支。预先译码阶层也包含一涵盖指针(wrap indicator),耦接于多任务器,指出被指令格式化逻辑格式化的指令是否涵盖横跨阶层A及B,以进一步格式化指令。其中,多任务器依据分支指针及涵盖指针,从阶层A、B及C中选择其中的一个阶层以提供给指令格式化逻辑。
本发明又提供一种分支控制装置,适用于微处理器。此分支控制装置包括指令缓冲器,具有第一、第二及第三阶层,用以暂存自指令快取区接收的第一、第二及第三快取线,其中,第一及第二快取线各自包含分支指令的一部份,而第三快取线则是包含分支指令的目标指令。分支控制装置也包括一分支目标地址快取区(branch target addresscache;简称BTAC),耦接于指令缓冲器,输出一个指针,以显示第三快取线是由BTAC所提供的分支指令的目标地址自指令快取区中选取得到。分支控制装置也包括一多任务器,耦接指令缓冲器与指令格式化逻辑,用以选取第一、第二及第三阶层中的一个阶层,以提供至指令格式化逻辑,其中,多任务器会在选取第一及第二阶层后,依据BTAC输出的指针及指令格式化逻辑判断的分支指令长度,选取第三阶层。
本发明又再提出一种暂存指令字节以提供至指令格式化逻辑的方法,适用于一微处理器。此方法包括储存一分支指针,以判断处理器是否有分支于相对应于指令缓冲器的第一快取线,接着,产生第一快取线的第一指令长度,然后,依据第一指令的长度,判断第一指令是否涵盖超过第一快取线,此方法也包括依据分支指针及上述的判断步骤,选取储存于指令缓冲器的第二快取线以格式化第二指令。
本发明具有的一个优点是使多重字节宽度的指令缓冲器在连接预先译码BTAC时,可以在多数情况中,达到零分支代价,因为本发明是在将指令缓冲器中的阶层提供给指令格式化逻辑后,才进行阶层位移(shift),而不是先位移指令缓冲器的已格式化阶层,再提供最底层的阶层予指令格式化逻辑。而由位移阶层的减少,本发明可以将有效的周期时间数量,增加于指令格式化逻辑在格式化目前的指令上。
附图说明
图1是依据本发明的包含一分支控制装置的一管线微处理器的一方框图;
图2是本发明依据图1关于位移指令缓冲器的一流程图;
图3是本发明依据图1关于指令缓冲器在阶层选择上的一流程图;以及
图4A-4F是本发明依据图1及图3关于选取指令缓冲器阶层为例的一数据表。
附图标记说明:
100:微处理器
102:指令快取区
104、174:缓存器
106:阶层置换多任务器
108:字节智能型排列多任务器(byte-wise alignment mux)
112:指令缓冲器
114:指令格式化逻辑
116:分支目标地址快取区(BTAC)
118、128:多任务器
122:控制逻辑
124:增加器
126:阶层
132、138:目标地址
134:命中讯号(HIT signal)
136:理论性分支信息(SBI signal)
142、144、146、148、166:数据总线
152:撷取地址
154、156、168:控制讯号
158:现行指针
162:次一循序撷取地址
164:分解目标地址
172:指令长度
176:与门
178:比较器
184:现行指针缓存器
186:BWRAP讯号
188:移位讯号
192、193:BTAC分支指针
194:涵盖讯号(fwrap signal)
196:进位讯号
198:和(sum)
步骤202至步骤228为本发明一实施例的一实施步骤
步骤302至步骤326为本发明另一实施的一实施步骤
具体实施方式
请参照图1,其是依照本发明一实施例的一种包含分支控制装置的管线微处理器100的一部分方框图。在本实施例中,微处理器100包括一x86结构处理器,而在本实施例中,微处理器100包含一13-阶层管线,包括指令撷取阶层、多重指令快取存取阶层、指令格式化阶层、指令译码或转换阶层、缓存器存取阶层、地址计算阶层、多重数据快取存取阶层、多重执行阶层、储存阶层及写回阶层。
微处理器100包括指令快取区102,用以快取指令字节,经由数据总线166自内存中接收这些指令字节,而指令快取区102包括储存指令字节用的快取线矩阵,此快取线矩阵是由撷取地址152来进行索引,即撷取地址152是在矩阵中选择其中一条快取线,而指令快取区102会经由数据总线142输出被选取的指令字节的快取线。
在本实施例中,指令快取区102包含一个64KB的4-way集合关系型快取,具有每道(way)32-字节的快取线,在本实施例中,指令快取区102一次会提供已选取的指令字节的一半快取线,例如,在每两个间隔周期中,会提供16个字节。在本实施例中,指令快取区102是类似于美国专利案号09/849,736,名称为非实际的分支目标地址快取(SPECULATIVE BRANCH TARGET ADDRESS CACHE)(文件编号CNTR:2021)中所描述的指令快取区,其中此申请案与本发明具有共同的申请人(assignee),在此也将其申请标的并入本发明作参考。
微处理器100也包含分支目标地址快取区(branch target addresscache;以下简称BTAC)116,此BTAC 116接收指令快取区102的撷取地址152,BTAC 116包括储存元素的矩阵,用以快取目前已执行的分支指令及其相关分支目标地址的撷取地址,而储存的元素也包括其它关于分支指令的理论性分支信息,作为快取的目标地址,特别是,所储存的元素包括多重字节分支指令是否涵盖横跨两个指令快取线的指针。撷取地址152会指向位于BTAC 116中储存元素的矩阵,以选择其中的一个储存元素。
BTAC 116会由撷取地址152,从被选取的储存元素中,输出一个目标地址132及理论性分支信息(speculative branch information;以下简称SBI)136。在本实施例中,SBI 136包括分支指令长度,位于快取线中的分支指令位置,分支指令为呼叫(call)或返回(return)指令,以及分支指令预期发生与否,这些皆在美国专利案号09/849,736,名称为非实际的分支目标地址快取(SPECULATIVE BRANCH TARGETADDRESS CACHE)中有所描述,在此将其申请标的也并入本发明的参考。
BTAC 116也输出一个命中讯号(HIT signal)134,用以指示撷取地址152是否命中BTAC 116,在本实施例中,BTAC 116是类似于上述参考的美国专利案中描述的BTAC,其中,BTAC 116是一个非实际的BTAC,因为微处理器100在指令快取区102提供的指令快取线被译码前,会分支连结到BTAC 116所提供的目标地址132,不论目前在撷取地址选取的快取线中的分支指令是否为已知状态,因此,理论上,微处理器100会分支连结到BTAC 116所提供的目标地址132,即使目前分支指令可能不存在于撷取地址选取以作为命中BTAC 116的快取线中。
BTAC 116也输出一个BWRAP讯号186,用以确认分支指令是否涵盖横跨两个快取线,其中,BWRAP讯号186的值是BTAC 116在分支指令执行后,随着分支指令目标地址而快取得到的,但BWRAP讯号186的值在仅显示上次分支指令是否涵盖横跨快取线的情况下,是非实际的值。然而,如在上述参考的美国专利案中所描述的,在本实施例中,在上次所执行的分支指令或快取线的撷取地址152是虚拟别名的状况中,快取线会被进行修正。
微处理器100也包括控制逻辑122,上述的HIT讯号134、SBI 136以及BWRAP讯号186皆是当作输入讯号输入至控制逻辑122,以下会对控制逻辑122的操作进行更详细的描述。
微处理器100也包括一个多任务器118,此多任务器118在其输入端至少接收三个地址,且会选取其中一个输入地址作为输出至指令快取区102的撷取地址152,以响应从控制逻辑122传送的控制讯号168。多任务器118会自BTAC 116接收目标地址132,也会接收次一循序撷取地址162,此次一循序撷取地址162,为依循指令快取区102的快取线大小而增加,且会由增加器124所接收的撷取地址152以提供至多任务器118。
多任务器118也接收一个分解目标地址(resolved target address)164,由微处理器100中的执行逻辑所提供,此执行逻辑依据分支指令的完整译码来计算分解目标地址164。如果微处理器100在分支连结到BTAC 116提供的目标地址132后,经判断发觉其所分支连结到的地址是错误的,则微处理器100会进行错误修正,由清除(flush)管线以及分支连结至分解目标地址164或是快取线的撷取地址,包括接续于分支指令的指令地址,来进行修正。在本实施例中,如果微处理器100推测判断出在目前的快取线142中没有分支指令,则微处理器100会由清除管线以及分支连结至包括分支指令本身指令地址的快取线撷取地址,来修正错误,此错误修正描述于美国专利案号09/849,658,名称为侦测及修正错误的非实际分支目标地址快取分支的装置、系统及方法(APPARATUS,SYSTEM AND METHOD FOR DETECTING ANDCORRECTING ERRONEOUS SPECULATIVE BRANCH TARGETADDRESS CACHE BRANCHES)(文件编号CNTR:2022),此案与本发明具有相同的申请人,在此将其申请标的并入本案作参考。
在本实施例中,多任务器118也接收其它来自于分支预测元素预测的目标地址,例如一个呼叫/返回堆栈以及一个分支目标缓冲器(branch target buffer;简称BTB),其中BTB是依据分支指令指针,快取间接分支指令的目标地址。多任务器118会选择性地使BTAC 116提供的目标地址因呼叫/返回堆栈及BTB提供的目标地址而无效,此在美国专利案号09/849,799,名称为依据分支指令型态由第二预测器使非实际的分支目标地址快取选择性无效(SPECULATIVE BRANCHTARGET ADDRESS VACHE WITH SELECTIVE OVERRIDE BYSECONDARY PREDICTOR BASED ON BRANCH INTRUCTIONTYPE)(文件编号CNTR:2052),此案与本发明具有相同的申请人,在此将申请标的并入本案作参考。
微处理器100也包括一指令缓冲器112,此指令缓冲器112包括数个阶层、或缓存器,会集体或个别地称为阶层126,以储存自指令快取区102经数据总线142传送的指令字节。在本实施例中,指令缓冲器112会自指令快取区102中一次接收16-字节的快取线,在本实施例中,指令缓冲器112的阶层126是16-字节宽,在本实施例中,指令缓冲器112包含一个由8阶层所组成的128-字节缓冲空间,每个阶层用以储存16个指令字节。图1仅显示指令缓冲器112的较低4层阶层,最底层阶层记为阶层A 126A,下一个阶层是在阶层A 126A的上的阶层B126B,再下一个阶层是在阶层B 126B的上的阶层C 126C,再下下一个阶层是在阶层C 126C的上的阶层D 126D。
指令缓冲器112是由一个具有顶层及底层的先进先出(first-in-first-out)移位缓存器所组成,会自指令快取区102接收指令字节储存于顶层,然后将阶层126移出底层。指令缓冲器112可以一次自底层移出一个或两个阶层126,也就是说,指令缓冲器112可以在一个时脉周期中移出阶层A 126A,或是在一个时脉周期中将阶层A126A及阶层B 126B一起移出。控制逻辑122会提供一个移位讯号,即是用以判断移出指令缓冲器112的阶层126数目,以下将会详述。当指令快取区102提供一个快取限制指令缓冲器112,则快取线会被置入最接近指令缓冲器112底层的未使用阶层126。
微处理器100也包括数个缓存器174,每一个缓存器174储存自BTAC 116传送的目标地址132,每一个缓存器174连接于相对应于指令缓冲器112中的阶层126。图1中即显示连结于阶层126A~D的4个缓存器174A~D,储存于缓存器174的目标地址是被BTAC 116用来预测储存在相连的阶层126中的分支指令。
微处理器100也包括数个缓存器104,每一个缓存器104用以储存自控制逻辑122传送的BTAC分支指针192,每一个缓存器104是对应连接于数个指令缓冲器112的阶层126以及目标地址缓存器174,图1即绘示4个缓存器104A~D对应连接阶层126A~D及目标地址缓存器174A~D,其中,储存于缓存器104的BTAC分支指针192,用以确认微处理器100是否会如推测般,分支连结到自BTAC 116传送且储存于相对应缓存器174的目标地址,进而推测目前相对应阶层126中的分支指令。如果BTAC 116在确认拥有HIT讯号且预期分支指令发生的情况下,微处理器100会分支连结至BTAC 116所提供的目标地址132,在本实施例中,BTAC 116会在SBI 136中提供一个预期讯号,无论分支指令是否会发生,其中一个存在于缓存器104的BTAC分支指针会被提供以作为输出至控制逻辑122的输出讯号193。
在本实施例中,控制讯号122会输出一个16-位值的BTAC分支指针,以储存于缓存器104且会被作为输出讯号193提供至控制逻辑122,这16位(bits)相对应于阶层126的16字节(bytes),其中具有真值(true value)的位会指出在阶层126中相对应的字节,作为分支指令的第一字节,用以使微处理器100可分支连结至BTAC 116所提供的目标地址132。
微处理器100也包括一个具有3-输入端的阶层置换多任务器106,此阶层置换多任务器106是经由数据总线144A~C,接收自指令缓冲器112分别传送的关于指令字节的三个阶层126A~C。阶层置换多任务器106会依据控制逻辑122产生的控制讯号154,自三个阶层126A~C选择其中一个阶层,关于阶层置换多任务器106的操作将会详述于下。
在本实施例中,每一个数据总线144A~C都是26-字节宽,数据总线144A~C会分别提供阶层126A~C 16个字节,另外,会提供上一个阶层前10个字节做映像(shadow)。以数据总线144A为例,数据总线144A会提供阶层A 126A 16个字节[0∶15],此外,阶层A 126A的16个字节[0∶15]中的前10个字节[0∶9]会提供给阶层B 126B。
在x86处理器中的指令长度是可变动的,且可能会变为11个字节长,因此,一个11-字节的指令在其第一字节的是阶层A 126A最后一个字节位置的情况下,指令的最后10个字节会是在阶层B 126B的前10个字节位置。进一步地说,由所提供的16-字节及上一个阶层的10-字节映像,阶层置换多任务器106会提供足够的指令字节,以确保目前至少有一个完整的x86指令会被数据总线144A~C其中的一所选取,不管在26-字节的数据总线144中的下一个指令是从何处开始。
微处理器100也包括一个字节智能型排列多任务器(byte-wisealignment mux)108,此字节智能型排列多任务器108所接收的指令字节,是阶层置换多任务器106经由数据总线146自其中的一个总线144A~C选取得到。在本实施例中,字节智能型排列多任务器108包括一组多任务器,用以排列自阶层置换多任务器106接收的指令字节,使得下一个字节被格式化,例如,下一个被格式化指令的第一个字节,会被输出在11-字节的数据总线148的第一字节线上。字节智能型排列多任务器108依据控制逻辑122产生的控制讯号156来排列字节,控制逻辑122则是依据现行指针(current pointer)讯号158来产生控制讯号156,其中现行指针讯号158会指向下一个被格式化指令的第一字节。
举例来说,假设最后一个被格式化指令的最后一个字节是在数据总线146的字节3中,则下一个被格式化指令的第一字节会是在数据总线146的字节4中。字节智能型排列多任务器108会从数据总线146排列字节,使得数据总线146的字节4会被提供于数据总线148的字节0上,数据总线146的字节5会被提供于数据总线148的字节1上,直至四次上升排列,使得字节14被提供于数据总线148的字节10为止。
微处理器100也包括指令格式化逻辑114,是接收指令缓冲器112经由数据总线148传送的指令字节,此指令格式化逻辑114会检查,或审视,指令缓冲器112的阶层126以及相关的映像内容,这些内容是由阶层置换多任务器106所选取,以及由字节智能型排列多任务器108进行排列。指令格式化逻辑114会将接收到的指令字节进行格式化,或分析,为指令,特别是,指令格式化逻辑114会决定指令的字节大小。指令格式化逻辑114会提供已格式化指令给剩余的微处理器100管线,用以更进一步的译码及执行,而指令缓冲器112为了减少指令格式化逻辑114饥饿的可能性,会暂存指令字节。
指令格式化逻辑114会经由控制讯号172,提供目前已格式化的指令长度。在本实施例中,指令长度172包括4个位,会由控制逻辑172(改为122)产生的控制讯号188,来控制指令缓冲器112的移位,即,控制讯号188会为指令缓冲器112供应如移位计数的服务,而控制逻辑122也会利用移位计数188来控制指令字节至指令缓冲器112的加载。
在本实施例中,指令格式化逻辑114可以在每个处理器100的时脉周期中格式化多重指令,而指令长度讯号172会显示多重格式化指令的指令长度和(sum)。在本实施例中,指令长度讯号172上所显示的最大和(sum)是15字节。
也就是,阶层置换多任务器106会提供一个装置,让指令格式化逻辑114可以得到最适的指令字节阶层126,用以格式化而不需指令缓冲器112位移已格式化的阶层126。然后,自指令缓冲器112位移一个阶层126的时间,就会从提供阶层126至指令格式化逻辑114所减少的时间而来,而这对微处理器在时脉的时间上是相当有助益的。
微处理器100也包括缓存器184,用以储存及输出现行指针158,此现行指针158用以确认在指令缓冲器112阶层126中的位置,是目前被指令格式化逻辑114格式化的指令,也即现行指针158会指向被指令格式化逻辑114格式化指令的第一字节。另,现行指针158也会被提供给控制逻辑122,而控制逻辑122会利用现行指针158产生控制讯号154、156及188。在本实施例中,现行指针158包括4个位,用以确认任一16字节是在其中的一指令缓冲器112的阶层126中。
微处理器100也包括加法器182,用以接收指令长度172及现行指针158,以及产生它们的和(sum)198。如果下一个指令是循序的,例如目前被格式化指令不是一个发生的分支指令,则指令长度172及现行指针158的和198即是次一指针198,或是指向下一个被格式化指令的指针。
次一指针198是提供给多任务器128,而此多任务器128也接收储存于其中一个缓存器174的目标地址的较低4个位,且缓存器174是关联于阶层置换多任务器106所选取的阶层126。如果BTAC分支指针193显示目前格式化指令并非一发生分支指令,则控制逻辑122会控制多任务器128去选取次一指针198,但如果BTAC分支指针193显示目前格式化指令是一发生分支指令,则控制逻辑122会控制多任务器128选择自缓存器174传送的目标地址138,即分支指令会使微处理器100分支连结到BTAC116所提供的目标地址132。其中,多任务器128的输出会储存于现行指针缓存器184中。
加法器182也会产生进位讯号(carry signal)196,而进位讯号196在现行指针158及指令长度172的和为真时会产生一个进位,特别是,进位讯号196会显示目前格式化指令的一个字节是否有占据现阶层126的最后一个字节。举例来说,假设目前格式化指令是开始于选取阶层126的字节13,例:现行指针158是0xD,然后假设指令格式化逻辑114决定目前格式化指令有一个3字节的指令长度172,例:此指令占据阶层126的字节13、14及15是阶层126的最后3个字节,而在本例中,现行指针158及指令长度172的和为0x10,因此,加法器182产生的次一指针198即会是0x0,且进位196会是1,或真值。
相比之下,假设目前格式化指令是开始于字节12,即指令会占据阶层126字节位置12、13及14,但不是字节位置15。在这个情况中,和是0xF,因此,次一指针198是0xF,而进位196的值是0,或伪值。进位讯号196是提供至控制逻辑122,而控制逻辑122会利用进位讯号196产生控制讯号154、156及188。
微处理器100也包括比较器(comparator)178,用以接收次一指针198及将次一指针198与0进行比较,如果次一指针198不等于0,则比较器178会输出真值(true value),但如果次一指针198等于0,则比较器178会输出伪值(false value)。
比较器178输出的值会提供给与门(AND gate)176,且与门176也会接收进位讯号196。另,与门176输出的讯号是一个涵盖讯号(fwrapsignal)194,用以显示目前格式化指令所涵盖的阶层126是否如指令格式化逻辑114所决定的。举例来说,假设目前被格式化指令是开始于所选取阶层126的字节13,例现行指针158是0xD,然后假设指令格式化逻辑114决定目前格式化指令有一个3字节的指令长度172,假设此指令占据阶层126的字节13、14及15是阶层126的最后3个字节。在此例中,现行指针158及指令长度172的和为0x10,因此,加法器182产生的次一指针198即会是0x0,进位196是1,或真值。而由于次一指针198等于0(非不等于0),则比较器178的输出值为伪值(false value),接下来,由于与门176的其中一个输入讯号(即比较器178的输出讯号)为伪值,因此涵盖讯号194会是伪值。
相比之下,假设目前格式化指令是开始于字节14,即假设指令的前两个字节占据阶层中的后两个字节位置,而指令的最后一个字节会占据下一个阶层上的第一字节位置。在这种情况中,和是0x11,因此,次一指针198是0x1,而进位196的值为真,由于次一指针198不等于0,即非并不等于0,因此比较器178的输出值为真值(true value),接下来,由于比较器178的输出讯号为真且进位讯号196也为真,因此涵盖讯号194也为真。
涵盖讯号(fwrap signal)194会提供至控制逻辑122,而控制逻辑122会利用涵盖讯号194产生控制讯号154、156及188。由于涵盖讯号194是依据指令字节在阶层126中译码而来,因此涵盖讯号194会提供一个真实指示于格式化指令是否有涵盖横跨于两个指令缓冲器112阶层126,相比之下,BWRAP讯号186是在指令译码前产生出来,因此BWRAP讯号186会提供一个非实际指示于分支指令是否有涵盖横跨两个快取线。
请参考图2,是本发明依据图1关于指令缓冲器112动作的流程图,此流程开始于步骤202。
在步骤202中,图1中的次一循序撷取地址162是由图1的多任务器118选取,作为图1的撷取地址152,以提供给图1的指令快取区102及图1的BTAC 116。接着,流程程序自步骤202至步骤204。
在步骤204中,指令快取区102会输出快取线于图1的数据总线142,此快取线是由步骤202提供的撷取地址所选取。接着,流程程序自步骤204至步骤206。
在步骤206中,经由步骤204的指令快取区所输出的已选取快取线,会被储存于指令缓冲器112,且此快取线是储存在接近指令缓冲器112底层的第一未使用阶层126。此已选取快取线包括一个分支指令,为BTAC 116快取的目标地址。接着,流程程序自步骤206至步骤208。
在判断步骤208中,控制逻辑122会判断BTAC 116的分支是否发生,即,控制逻辑122会检测BTAC HIT讯号134,以判断撷取地址152对在步骤202的BTAC 116是否发生命中情形,以及与BTAC 116输出的目标地址132有关联的分支指令,是否有预期性的发生。如果没有,则流程会返回步骤202以撷取下一个循序快取线,否则流程会进行至步骤212。
在步骤212中,目标地址132会由BTAC 116输出以储存在其中一个缓存器174,此缓存器174是与步骤206分支指令所储存的阶层126有关联。另外,控制逻辑122会输出一个具有真值的BTAC分支指针192,此BTAC分支指针192是储存在其中一个缓存器104,而此缓存器104是与步骤206分支指令储存的阶层126有关联。在本实施例中,BTAC分支指针192中的位与阶层126分支指令的第一字节有关联,此位值为真,表示微处理器100会分支连结到将在步骤224中发生且由BTAC 116所提供的目标地址132。接着,流程从步骤212至判断步骤214继续进行。
在判断步骤214中,控制逻辑122会判断BTAC 116是否预期分支指令会涵盖横跨快取线,也就是,图1的控制逻辑122会判断图1的BWRAP讯号是否为真,如果是,则流程会进入步骤216,否则流程会进入步骤224。
在步骤216中,次一循序撷取地址162会提供至指令快取区102。如果流程进到步骤216,而目前只有分支指令的第一部份储存在步骤206的指令缓冲器112的快取线中,则此情形会由步骤214中的BWRAP讯号186来表示,也就是说,这个分支指令字节的第二部份还没有被指令快取区102输出以储存至指令缓冲器112内。因此,有必要在分支指令的第二部分被指令快取区102输出以储存在指令缓冲器112后,才可将BTAC 116所提供的目标地址132应用于指令缓冲区102中。流程自步骤216至步骤218继续进行。
在步骤218中,指令快取区102输出由步骤216提供的次一循序撷取地址162所选取的快取线,所输出的快取线包括非实际BWRAP讯号186所指示的分支指令第二部份。流程自步骤218至步骤222继续进行。
在步骤222中,包含分支指令第二部分的快取线,是储存于指令缓冲器112中,其中,包含分支指令第二部分的快取线储存于指令缓冲器112的阶层126中,而紧连的上一层阶层126中,则是包含分支指令的第一部分。流程自步骤222至步骤224继续进行。
在步骤224中,多任务器118选取BTAC 116提供的目标地址132。作为下一个指令快取区102的撷取地址152,在此,整个分支指令已储存于指令缓冲器112中。如果,流程是从判断步骤214至步骤224,则分支指令是包含在指令缓冲器112中的一个阶层126,如果,流程是从步骤222至步骤224,则分支指令是包含在指令缓冲器112中两个紧邻的阶层126。流程自步骤224至步骤226继续进行。
在步骤226中,指令快取区102输出的快取线,是由目标地址132因应步骤224的指令快取区102而选取,所选取的快取线,包括分支指令的目标指令,或指令集。流程自步骤226至步骤228继续进行。
在步骤228中,包含目标指令的快取线是储存于指令缓冲器112中,其中,包含目标指令的快取线会储存于指令缓冲器112的阶层126中,而紧接在上一层的阶层126是包含整个分支指令或是分支指令的第二部分,则是依据分支指令是否涵盖横跨多重快取线而定。流程自步骤228返回至步骤202进行。
请参考图3,是本发明依据图1的指令缓冲器112的阶层126的选择的一流程图。流程开始于步骤302。
在步骤302中,图1的指令格式化逻辑114,格式化图1指令缓冲器112的阶层A 126A中的指令,而指令格式化逻辑114是对图1的现行指针158指向的指令进行格式化,且会产生指令在图1的指令长度172。流程自步骤302至步骤304进行。
在步骤304中,图1的加法器182会将指令长度172加向现行指针158,以产生图1的次一指针198及图1的进位讯号196,且与门176会产生图1的涵盖讯号(fwrap signal)194。另外,储存于缓存器104A的BTAC分支指针会被输出在图1的BTAC分支指针讯号193上。流程自步骤304至步骤306进行。
在判断步骤306中,控制逻辑122会判断步骤302的格式化指令,是否为图2步骤224微处理器100分支连结的分支指令,即,控制逻辑122会判断步骤304的BTAC分支指针193是否为真。在本实施例中,控制逻辑122会判断在BTAC分支指针193中,与现行指针158相对应的位是否为真,如果不是,则流程会进到判断步骤308,否则流程会进行到判断步骤316。
在判断步骤308中,控制逻辑122会判断进位讯号196是否为真,如果不是,则流程会进到步骤312,否则流程会进行到步骤314。
在步骤312中,控制逻辑122会产生控制讯号154,以控制图1的阶层置换多任务器106选取阶层A 126A,使阶层A 126A提供于数据总线146中,进一步让指令格式化逻辑114进行格式化。另外,控制逻辑122会在移位讯号188上产生0的值。流程自步骤312至步骤324进行。
在步骤314中,控制逻辑122产生控制讯号154以控制图1的阶层置换多任务器106选取阶层B 126B,使阶层B 126B提供于数据总线146中,以进一步让指令格式化逻辑114进行格式化。另外,控制逻辑122会在移位讯号188上产生1的值。流程自步骤314至步骤324进行。
在判断步骤316中,控制逻辑122会判断图1的涵盖讯号194是否为真,如果不为真,则流程进入步骤318,否则,流程进入步骤322。
在步骤318中,控制逻辑122产生控制讯号154以控制图1的阶层置换多任务器106选取阶层B 126B,使阶层B 126B提供于数据总线146中,以进一步让指令格式化逻辑114进行格式化。另外,控制逻辑122会在移位讯号188上产生1的值。接着,流程自步骤318至步骤324进行。
在步骤322中,控制逻辑122会产生控制讯号154,以控制图1的阶层置换多任务器106选取阶层C 126C,以提供于数据总线146上,作为指令格式化逻辑114格式化的用。此外,控制逻辑122还会产生值为2的移位讯号188。接着,流程自步骤322至步骤324进行。
在步骤324中,对现行指针158进行更新,即,图1的多任务器128会选取图1的次一指针198或是目标地址138,且会储存选取的值于缓存器184中。如果流程是由步骤312或314而来,则多任务器128会选取次一指针198,否则,多任务器128会选取目标地址138。另外,指令格式化逻辑114会格式化已更新现行指针158指向的指令,其中,已更新现行指针158所在的阶层,由步骤312、314、318或322的阶层置换多任务器106选取而得。流程自步骤324至步骤326进行。
在步骤326中,指令缓冲器112会在312、314、318或322的步骤中,位移移位讯号188确认的阶层数目,使得阶层A又可再次位于指令缓冲器112的底层,且指令缓冲器112会在阶层置换多任务器106选取适当的阶层126以提供指令格式化逻辑114后,才位移确认的阶层数目。
请合并参考图4A~F,一同作为图4来参考,是本发明的图1依据图3的指令缓冲器112阶层126选取的6个数据表例子。在图4的每个数据表中包括4列,相对应于指令缓冲器112的阶层A~D 126A~D,且以这些阶层名称为卷标,每一个数据表包括16行,相对应每个阶层126的16个位位置,从左而右分别标示0至15。在数据表中的每个单位(cell)不是空白的,就是被移植关于指令字节的内容。有三个不同的指令常被用来说明:3-字节ADD(x86加法指令)、4-字节SUB(x86减法指令)及2-字节JCC(x86条件式跳跃指令、或是分支指令),每个指令的字节会以括号圈住数字来标示相对应的指令字节。例如,“SUB[2]”表示为第3字节,是SUB指令的字节2。
这6个不同的数据表即是说明6个关于目前格式化指令的不同组合内容,包括分支/非分支、涵盖讯号194真/伪值,以及进位讯号196真/伪值。在每个情形中,现行指针158、指令长度172、BTAC分支指针193及目标地址138较低4个位的初始条件值皆为确定的值。此外,次一指针198、进位讯号196及涵盖讯号194的值,在每个状况中,由图1的控制装置从初始条件值产生而来,而由阶层置换多任务器106选取的指令缓冲器112阶层,以及由控制逻辑122产生的移位讯号值188,皆会在每个情况中,显示于响应初始条件值及所产生的值中。虽然在图4的实施例中,字节因此大印地安格式(big-endian)存放,但在其它的实施例中,微处理器100可为小印地安(little-endian)的微处理器100,在图4中会显示字节的相反编号。
图4A即是说明状况1,目前格式化指令是一个非分支指令(non-branch),并没有涵盖横跨两个指令缓冲器112阶层,且也没有占据阶层的最后一个字节,3-字节的ADD指令是位于阶层A 126A的字节8~10,而4-字节的SUB指令是位于阶层A 126A的字节11~14。现行指针158的值为8,指向ADD指令的第一字节,且由指令格式化逻辑114在图3的步骤302中所产生的指令长度172为3,BTAC分支指针193在图3的步骤304所输出的值为伪(false),另外,由于目前格式化指令并非分支指令,因此在步骤324输出的目标地址138是非可应用的值。
在图3的步骤304中,由加法器182产生的次一指针198的值为11,加法器182产生的进位讯号196的值为伪,且由与门176产生的涵盖讯号194也为伪值。因为目前格式化指令是一个非分支指令,并不会占据其阶层的最后字节,因此下一个被指令格式化逻辑114格式化的指令,会开始于与目前格式化指令相同的阶层。接着,控制逻辑122会控制阶层置换多任务器106选择阶层A 126A,且位移0个阶层,这个动作是对应图3的步骤312。
图4B即是说明状况2,目前格式化指令是一个非分支指令(non-branch),并没有涵盖横跨两个指令缓冲器112阶层,但却占据阶层的最后一个字节。其中,3-字节的ADD指令是位于阶层A 126A的字节13~15,而4-字节的SUB指令是位于阶层B 126B的字节0~3。现行指针158的值为13,指向ADD指令的第一字节,且由指令格式化逻辑114在图3的步骤302中所产生的指令长度172为3,而BTAC分支指针193在步骤304所输出的值为伪(false),另外,由于目前格式化指令并非分支指令,因此在步骤324输出的目标地址138是非可应用的值。
在图3的步骤304中,由加法器182产生的次一指针198的值为0,加法器182产生的进位讯号196的值为真,且由与门176产生的涵盖讯号194是为伪值。因为目前格式化指令是一个会占据其阶层的最后字节的非分支指令,因此下一个被指令格式化逻辑114格式化的指令会开始于目前被格式化指令的上一层阶层。接着,控制逻辑122会控制阶层置换多任务器106选择阶层B 126B,且位移1个阶层,这个动作是对应图3的步骤314。
图4C即是说明状况3,目前格式化指令是一个非分支指令(non-branch),此非分支指令涵盖横跨两个指令缓冲器112阶层,且占据阶层的最后一个字节。其中,3-字节的ADD指令的前两个字节是位于阶层A 126A的字节14~15,而3-字节的ADD指令的第三字节是位于阶层B 126B的字节0,另,4-字节的SUB指令是位于阶层B 126B的字节1~4。现行指针158的值为14,指向ADD指令的第一字节,且由指令格式化逻辑114在图3的步骤302中所产生的指令长度172为3,而BTAC分支指针193在步骤304所输出的值为伪(false),另外,由于目前格式化指令并非分支指令,因此在步骤324输出的目标地址138是非可应用的值。
在图3的步骤304中,由加法器182产生的次一指针198的值为1,加法器182产生的进位讯号196的值为真,与门176产生的涵盖讯号194也为真值。因为目前格式化指令是一个会占据其阶层的最后字节的非分支指令,因此下一个被指令格式化逻辑114格式化的指令会开始于目前被格式化的指令的上一层阶层。接着,控制逻辑122会控制阶层置换多任务器106选择阶层B 126B,且位移1个阶层,这个动作是对应图3的步骤314。
图4D是说明状况4,目前格式化指令是一个分支(branch)指令,并没有涵盖横跨两个指令缓冲器112阶层,且也没有占据阶层的最后一个字节,2-字节的JCC指令是位于阶层A 126A的字节7~8,而4-字节的SUB指令是分支指令的目标指令,位于阶层B 126B的字节11~14。现行指针158的值为7,指向JCC指令的第一字节,且由指令格式化逻辑114在图3的步骤302中所产生的指令长度172为2,另外,由于阶层A 126A的字节7包含JCC指令的第一字节,且此分支指令是目前BTAC 116分支的指令,因此,BTAC分支指针193的位7在图3的步骤304所输出的值为真(true),而在步骤324输出的目标地址138是11,用以指向目标指令。
在图3的步骤304中,由加法器182产生的次一指针198的值为9,然而,由于BTAC分支指针193的值为真,因此多任务器128会选择值为11的目标地址138。而加法器182产生的进位讯号196的值为伪,且由与门176产生的涵盖讯号194也为伪值。另外,虽然目前格式化指令是一个没有涵盖横跨两个指令缓冲器112阶层的分支指令,但下一个被指令格式化逻辑114格式化的指令,即目标指令,却会开始于目前被格式化指令的上一层阶层。接着,控制逻辑122会控制阶层置换多任务器106选择阶层B 126B,且位移1个阶层,这个动作是对应图3的步骤318。
图4E是说明状况5,即目前格式化指令是一个分支指令,并没有涵盖横跨两个指令缓冲器112阶层,但却占据阶层的最后一个字节。其中,2-字节的JCC指令是位于阶层A 126A的字节14~15,而4-字节的SUB指令是分支指令的目标指令,位于阶层B 126B的字节11~14。现行指针158的值为14,指向JCC指令的第一字节,且由指令格式化逻辑114在步骤302中所产生的指令长度172为2,另外,由于阶层A126A的字节14包含JCC指令的第一字节,且此分支指令是目前BTAC116分支的指令,因此,BTAC分支指针193的位14在步骤304所输出的值为真(true),而在步骤324输出的目标地址138是11,用以指向目标指令。
在图3的步骤304中,由加法器182产生的次一指针198的值为0,然而,由于BTAC分支指针193的值为真,因此多任务器128会选择值为11的目标地址138。而加法器182产生的进位讯号196的值为真,但由与门176产生的涵盖讯号194是为伪值。另外,虽然目前格式化指令是一个没有涵盖横跨两个指令缓冲器112阶层的分支指令,但下一个被指令格式化逻辑114格式化的指令,即目标指令,却会开始于目前被格式化指令的上一层阶层。接着,控制逻辑122会控制阶层置换多任务器106选择阶层B 126B,且位移1个阶层,这个动作是对应图3的步骤318。
图4F即是说明状况6,目前格式化指令是一个分支指令,且涵盖横跨两个指令缓冲器112阶层。其中,2-字节的JCC指令的前一个字节是位于阶层A 126A的字节15,而2-字节的JCC指令的第二字节是位于阶层B 126B的字节0,另,4-字节的SUB指令是此分支指令的目标指令,位于阶层C 126C的字节11~14。现行指针158的值为15,指向JCC指令的第一字节,且由指令格式化逻辑114在图3的步骤302中所产生的指令长度172为2,另外,由于阶层A 126A的字节15包含JCC指令的第一字节,且此分支指令是目前BTAC 116分支的指令,因此,BTAC分支指针193的位15在步骤304所输出的值为真(true),而在步骤324输出的目标地址138是11,用以指向目标指令。
在图3的步骤304中,由加法器182产生的次一指针198的值为1,然而,由于BTAC分支指针193的值为真,因此多任务器128会选择值为11的目标地址138。而加法器182产生的进位讯号196的值为真,且由与门176产生的涵盖讯号194也为真。因为目前格式化指令是一个涵盖横跨两个指令缓冲器112阶层的分支指令,因此下一个被指令格式化逻辑114格式化的指令,即目标指令,会开始于目前格式化指令的上两层阶层。接着,控制逻辑122会控制阶层置换多任务器106选择阶层C 126C,且位移2个阶层,这个动作是对应图3的步骤322。
虽然本发明已以实施例说明如上,然其并非用以限定本发明,举例来说,指令缓冲器的宽度及储存空间是可变换的,也就是说,本发明可以使用较大宽度及储存空间的指令缓冲器进行操作。
任何熟悉此技术者,在不脱离本发明的精神和范围内,当可作各种的更动与润饰,因此本发明的保护范围当以权利要求书为准。
Claims (50)
1.一种微处理器,其特征为:包括:
一指令缓冲器,包括复数个阶层,用以暂存自一指令快取区接收的指令字节;
一分支指针,关联每一该些阶层,用以储存一指针,该指针用以检测该微处理器是否有分支到暂存于关联的该阶层中一分支指令的一目标地址;以及
一多任务器,耦接该指令缓冲器,依据与该些阶层其中的一相关联的该分支指针,选择该些阶层其中之一。
2.如权利要求1所述的微处理器,其特征为:其中该多任务器提供所选取的该阶层至一指令格式化逻辑。
3.如权利要求2所述的微处理器,其特征为:其中该指令缓冲器包括该些阶层的一底层阶层。
4.如权利要求3所述的微处理器,其特征为:其中该指令格式化逻辑是判断在该底层阶层中一指令的长度。
5.如权利要求4所述的微处理器,其特征为:其中该多任务器依据与该底层阶层相关的该分支指针,选取阶层其中之一。
6.如权利要求5所述的微处理器,其特征为:还包括:
一涵盖指针,耦接该多任务器,依据该指令长度,显示该指令是否有涵盖超过该底层阶层。
7.如权利要求6所述的微处理器,其特征为:其中如果该分支指针指出该微处理器发生分支,则该多任务器会依据该涵盖指针是否指示该分支指令涵盖超过该底层阶层,以选取阶层其中之一。
8.如权利要求7所述的微处理器,其特征为:其中如果该分支指针指出该微处理器有发生分支,且该涵盖指针也指出该分支指令是涵盖超过该底层阶层,则该多任务器会选取该底层阶层上两层阶层的其中之一。
9.如权利要求8所述的微处理器,其特征为:其中该指令缓冲器会位移两个阶层。
10.如权利要求8所述的微处理器,其特征为:其中如果该分支指针指出该微处理器有发生分支,且该涵盖指针指出该分支指令并未涵盖超过该底层阶层,则该多任务器会选取该底层阶层上层阶层其中之一。
11.如权利要求10所述的微处理器,其特征为:其中指令缓冲器会位移其中一个该阶层。
12.如权利要求10所述的微处理器,其特征为:还包括:
一进位指针,耦接该多任务器,依据该指令长度,显示该指令的一字节是否占据该底层阶层的一最后字节。
13.如权利要求12所述的微处理器,其特征为:其中如果该分支指针指出该微处理器并无发生分支,则该多任务器会依据该进位指针是否指出该指令占据该底层阶层的该最后字节,来选取阶层其中之一。
14.如权利要求13所述的微处理器,其特征为:其中如果该分支指针指出该微处理器并无发生分支,且该进位指针指出该指令占据该底层阶层的该最后字节,则该多任务器会选取该底层阶层上层的其中的一阶层。
15.如权利要求14所述的微处理器,其特征为:其中该指令缓冲器会位移该些阶层的其中之一。
16.如权利要求14所述的微处理器,其特征为:其中如果该分支指针指出该微处理器并无发生分支,且该进位指针也指出该指令并未占据该底层阶层的该最后字节,则该多任务器会选取该底层阶层。
17.如权利要求16所述的微处理器,其特征为:其中该指令缓冲器不位移任何阶层。
18.如权利要求1所述的微处理器,其特征为:还包括:
一分支目标地址快取区,耦接以接收该指令快取区的一撷取地址,用以提供该分支指令的该目标地址至该指令快取区,以作为一次一撷取地址。
19.如权利要求18所述的微处理器,其特征为:其中该分支目标地址快取区会提供该指令快取撷取地址是否命中于该分支目标地址快取区的一指令。
20.如权利要求19所述的微处理器,其特征为:还包括:
一控制逻辑,耦接该多任务器,依据该指令快取撷取地址是否命中该分支目标地址快取区的该指示,以殖入该分支指针。
21.一种预先译码阶层,适用于一微处理器,其特征为:该预先译码阶层包括:
一指令缓冲器,包括至少阶层A、B及C,用以暂存指令字节;
一多任务器,耦接该指令缓冲器,用以选取该些阶层A、B及C的其中之一,以提供至一指令格式化逻辑;
一分支指针,耦接该多任务器,用以依据呈现于该阶层A的一分支指令,指示该微处理器是否发生分支;以及
一涵盖指针,耦接该多任务器,用以指示被该指令格式化逻辑格式化的一指令,是否涵盖横跨该些阶层A及B;
其中该多任务器会依据该分支指针及该涵盖指针,选取该些阶层A、B及C其中之一,以提供至该指令格式化逻辑。
22.如权利要求21所述的预先译码阶层,其特征为:还包括一加法器,耦接该多任务器,该加法器包括:
一第一输入端,用以接收一指针,该指针是指向该阶层A中的该指令的一位置;
一第二输入端,是自该指令格式化逻辑接收该指令的一长度;
一第一输出端,用以指示该第一及该第二接收该指针及该长度的一和;以及
一第二输出端,用以指出该和的一进位。
23.如权利要求22所述的预先译码阶层,其特征为:其中该涵盖指针只在该进位为真值及该和不等于0的情况下,显示出真值。
24.如权利要求23所述的预先译码阶层,其特征为:其中该多任务器在该分支指针指示为真及该涵盖指针指示为真的情况下,会选取该阶层C。
25.如权利要求24所述的预先译码阶层,其特征为:其中该指令缓冲器会在该多任务器选取阶层C后,位移该阶层A及B。
26.如权利要求23所述的预先译码阶层,其特征为:其中该多任务器会在该分支指针指示为真及该涵盖指针指示为伪的情况下,选取该阶层B。
27.如权利要求26所述的预先译码阶层,其特征为:其中该指令缓冲器在该多任务器选取该阶层B后,位移该阶层A。
28.如权利要求23所述的预先译码阶层,其特征为:其中该多任务器在该分支指针指示为伪及该第二输出端指示为真的情况下,选取该阶层B。
29.如权利要求28所述的预先译码阶层,其特征为:其中该指令缓冲器在该多任务器选取该阶层B后,即位移该阶层A。
30.如权利要求23所述的预先译码阶层,其特征为:其中该多任务器在该分支指针指示为伪及该第二输出端指示为伪的情况下,选取该阶层A。
31.如权利要求30所述的预先译码阶层,其特征为:其中该指令缓冲器在该多任务器选取该阶层A后,不会位移该些阶层A、B及C的任一阶层。
32.如权利要求21所述的预先译码阶层,其特征为:其中该多任务器也将被选取的该些阶层A、B及C其中的一提供至该指令格式化逻辑,而被选取的其中的一该些阶层A、B及C会具有上层该些阶层A、B及C其中之一的一映像部分。
33.如权利要求32所述的预先译码阶层,其特征为:其中该指令包括一可变长度指令。
34.如权利要求33所述的预先译码阶层,其特征为:其中该可变长度指令包括一x86指令。
35.如权利要求34所述的预先译码阶层,其特征为:其中该映像部分包括至少10指令字节。
36.一种分支控制装置,适用于一微处理器,其特征为:包括:
一指令缓冲器,包括一第一、一第二及一第三阶层,用以暂存自一指令快取区接收的一第一、一第二及一第三快取线,该第一及该第二快取线分别包括部分的一分支指令,该第三快取线包括该分支指令的一目标指令;
一分支目标地址快取区(BTAC),耦接该指令缓冲器,用以输出一指示,指示已由该分支目标地址快取区提供的该分支指令的一目标地址,从该指令快取区中选取该第三快取线;以及
一多任务器,耦接于该指令缓冲器及一指令格式化逻辑之间,是自该第一、该第二及该第三阶层选取其中之一,以提供至该指令格式化逻辑;
其中该多任务器选取该第一阶层后选取该第三阶层,依据该分支目标地址快取区输出的该指示及该指令格式化逻辑所判断该分支指令的一长度而来。
37.如权利要求36所述的分支控制装置,其特征为:还包括:一指针至该第一阶层,用以确认该分支指令的一起始地址。
38.如权利要求37所述的分支控制装置,其特征为:还包括:
一加法器,用以产生该分支指令的该指针及该长度之一和;
其中该和指出包含部分该分支指令的该第一及该第二快取线。
39.如权利要求38所述的分支控制装置,其特征为:其中该多任务器所选取的该第三快取线,是依据该分支指令的该指针及该长度的该和,以及该分支目标地址快取区输出的该指示。
40.如权利要求38所述的分支控制装置,其特征为:还包括:
一第二多任务器,耦接该指针,用以选取该和及该目标地址,其中之一,以作为一次一指针。
41.一种暂存指令字节以提供至指令格式化逻辑的方法,适用于一微处理器,其特征为:该暂存指令字节以提供至指令格式化逻辑的方法包括:
一储存指示步骤,其中储存的该指示,是关于该微处理器是否分支连结至相对应的一第一快取线,其中该第一快取线是储存于一指令缓冲器中;
一产生第一指令长度步骤,产生一第一指令的一长度,其中该第一指令位于储存该指令缓冲器的该第一快取线中;
一判断步骤,是依据该第一指令的该长度,判断该第一指令是否涵盖超过该第一快取线;以及
一选取步骤,是依据该指示及该判断步骤,选取储存于该指令缓冲器的一第二快取线以格式化一第二指令。
42.如权利要求41所述的暂存指令字节以提供至指令格式化逻辑的方法,其特征为:其中如果该指示指出该微处理器有发生分支且该第一指令是涵盖超过该第一快取线,则该第二快取线是位于该第一快取线上的两个该快取线。
43.如权利要求42所述的暂存指令字节以提供至指令格式化逻辑的方法,其特征为:还包括:在该选取步骤后,自该指令缓冲器中位移该第一快取线及该第一快取线上的一该快取线。
44.如权利要求41所述的暂存指令字节以提供至指令格式化逻辑的方法,其特征为:其中如果该指示指出该微处理器有发生分支且该第一指令并未涵盖超过该第一快取线,则该第二快取线是位于该第一快取线上的一个该快取线。
45.如权利要求44所述的暂存指令字节以提供至指令格式化逻辑的方法,其特征为:还包括:在该选取步骤后,自该指令缓冲器中位移该第一快取线。
46.如权利要求41所述的暂存指令字节以提供至指令格式化逻辑的方法,其特征为:还包括:判断在该第一指令中的一字节是否占据该指令缓冲器中的该第一快取线的一最后字节位置。
47.如权利要求46所述的暂存指令字节以提供至指令格式化逻辑的方法,其特征为:其中如果该指示指出该微处理器尚未发生分支且该第一指令的该字节占据该第一快取线的该最后字节位置,则该第二快取线是位于该第一快取线上的一个该快取线。
48.如权利要求47所述的暂存指令字节以提供至指令格式化逻辑的方法,其特征为:还包括:在该选取步骤后,自该指令缓冲器中位移该第一快取线。
49.如权利要求46所述的暂存指令字节以提供至指令格式化逻辑的方法,其特征为:其中如果该指示指出该微处理器尚未发生分支且该第一指令的该字节并未占据该第一快取线的该最后字节位置,则该第二快取线是该第一快取线。
50.如权利要求49所述的暂存指令字节以提供至指令格式化逻辑的方法,其特征为:还包括:在该选取步骤后,不自该指令缓冲器中位移任一该第一快取线。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US09/898,832 US6823444B1 (en) | 2001-07-03 | 2001-07-03 | Apparatus and method for selectively accessing disparate instruction buffer stages based on branch target address cache hit and instruction stage wrap |
US09/898,832 | 2001-07-03 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1376977A true CN1376977A (zh) | 2002-10-30 |
CN1279442C CN1279442C (zh) | 2006-10-11 |
Family
ID=25410095
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN02107189.6A Expired - Lifetime CN1279442C (zh) | 2001-07-03 | 2002-03-14 | 选择性存取不同指令缓冲阶层的装置及方法 |
Country Status (3)
Country | Link |
---|---|
US (2) | US6823444B1 (zh) |
CN (1) | CN1279442C (zh) |
TW (1) | TW530205B (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1310137C (zh) * | 2003-04-23 | 2007-04-11 | 智慧第一公司 | 缓冲指令及其较晚产生相关信息的装置及方法 |
CN100397365C (zh) * | 2003-01-14 | 2008-06-25 | 智权第一公司 | 解决分支目标地址快取中死结提取条件的装置与方法 |
CN103235715A (zh) * | 2013-03-27 | 2013-08-07 | 青岛中星微电子有限公司 | 一种片上系统SoC命令处理的方法、装置及芯片 |
Families Citing this family (27)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7200740B2 (en) * | 2001-05-04 | 2007-04-03 | Ip-First, Llc | Apparatus and method for speculatively performing a return instruction in a microprocessor |
US7707397B2 (en) * | 2001-05-04 | 2010-04-27 | Via Technologies, Inc. | Variable group associativity branch target address cache delivering multiple target addresses per cache line |
US6886093B2 (en) * | 2001-05-04 | 2005-04-26 | Ip-First, Llc | Speculative hybrid branch direction predictor |
US7165168B2 (en) * | 2003-01-14 | 2007-01-16 | Ip-First, Llc | Microprocessor with branch target address cache update queue |
US20020194461A1 (en) * | 2001-05-04 | 2002-12-19 | Ip First Llc | Speculative branch target address cache |
US7165169B2 (en) * | 2001-05-04 | 2007-01-16 | Ip-First, Llc | Speculative branch target address cache with selective override by secondary predictor based on branch instruction type |
US6895498B2 (en) | 2001-05-04 | 2005-05-17 | Ip-First, Llc | Apparatus and method for target address replacement in speculative branch target address cache |
US7134005B2 (en) * | 2001-05-04 | 2006-11-07 | Ip-First, Llc | Microprocessor that detects erroneous speculative prediction of branch instruction opcode byte |
US7203824B2 (en) * | 2001-07-03 | 2007-04-10 | Ip-First, Llc | Apparatus and method for handling BTAC branches that wrap across instruction cache lines |
US6823444B1 (en) * | 2001-07-03 | 2004-11-23 | Ip-First, Llc | Apparatus and method for selectively accessing disparate instruction buffer stages based on branch target address cache hit and instruction stage wrap |
US7162619B2 (en) * | 2001-07-03 | 2007-01-09 | Ip-First, Llc | Apparatus and method for densely packing a branch instruction predicted by a branch target address cache and associated target instructions into a byte-wide instruction buffer |
US7234045B2 (en) * | 2001-07-03 | 2007-06-19 | Ip-First, Llc | Apparatus and method for handling BTAC branches that wrap across instruction cache lines |
US7159097B2 (en) * | 2002-04-26 | 2007-01-02 | Ip-First, Llc | Apparatus and method for buffering instructions and late-generated related information using history of previous load/shifts |
US7185186B2 (en) * | 2003-01-14 | 2007-02-27 | Ip-First, Llc | Apparatus and method for resolving deadlock fetch conditions involving branch target address cache |
US7152154B2 (en) * | 2003-01-16 | 2006-12-19 | Ip-First, Llc. | Apparatus and method for invalidation of redundant branch target address cache entries |
US7143269B2 (en) * | 2003-01-14 | 2006-11-28 | Ip-First, Llc | Apparatus and method for killing an instruction after loading the instruction into an instruction queue in a pipelined microprocessor |
US7178010B2 (en) * | 2003-01-16 | 2007-02-13 | Ip-First, Llc | Method and apparatus for correcting an internal call/return stack in a microprocessor that detects from multiple pipeline stages incorrect speculative update of the call/return stack |
US7237098B2 (en) * | 2003-09-08 | 2007-06-26 | Ip-First, Llc | Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence |
US20050278513A1 (en) * | 2004-05-19 | 2005-12-15 | Aris Aristodemou | Systems and methods of dynamic branch prediction in a microprocessor |
US20060200655A1 (en) * | 2005-03-04 | 2006-09-07 | Smith Rodney W | Forward looking branch target address caching |
US7461307B2 (en) * | 2005-05-06 | 2008-12-02 | Lsi Corporation | System and method for improving transition delay fault coverage in delay fault tests through use of an enhanced scan flip-flop |
US20070074004A1 (en) | 2005-09-28 | 2007-03-29 | Arc International (Uk) Limited | Systems and methods for selectively decoupling a parallel extended instruction pipeline |
US20080243047A1 (en) * | 2007-03-27 | 2008-10-02 | Babaev Eilaz P | Ultrasound wound care device |
US7840786B2 (en) * | 2007-04-16 | 2010-11-23 | Advanced Micro Devices, Inc. | Techniques for storing instructions and related information in a memory hierarchy |
US7975132B2 (en) * | 2009-03-04 | 2011-07-05 | Via Technologies, Inc. | Apparatus and method for fast correct resolution of call and return instructions using multiple call/return stacks in the presence of speculative conditional instruction execution in a pipelined microprocessor |
US9317293B2 (en) | 2012-11-28 | 2016-04-19 | Qualcomm Incorporated | Establishing a branch target instruction cache (BTIC) entry for subroutine returns to reduce execution pipeline bubbles, and related systems, methods, and computer-readable media |
CN107026711A (zh) * | 2016-12-23 | 2017-08-08 | 阿里巴巴集团控股有限公司 | Base64解码方法及装置 |
Family Cites Families (91)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4200927A (en) * | 1978-01-03 | 1980-04-29 | International Business Machines Corporation | Multi-instruction stream branch processing mechanism |
US4181942A (en) * | 1978-03-31 | 1980-01-01 | International Business Machines Corporation | Program branching method and apparatus |
US4860197A (en) * | 1987-07-31 | 1989-08-22 | Prime Computer, Inc. | Branch cache system with instruction boundary determination independent of parcel boundary |
US5193205A (en) * | 1988-03-01 | 1993-03-09 | Mitsubishi Denki Kabushiki Kaisha | Pipeline processor, with return address stack storing only pre-return processed address for judging validity and correction of unprocessed address |
US5142634A (en) * | 1989-02-03 | 1992-08-25 | Digital Equipment Corporation | Branch prediction |
US5226126A (en) * | 1989-02-24 | 1993-07-06 | Nexgen Microsystems | Processor having plurality of functional units for orderly retiring outstanding operations based upon its associated tags |
US5163140A (en) * | 1990-02-26 | 1992-11-10 | Nexgen Microsystems | Two-level branch prediction cache |
JPH0820950B2 (ja) * | 1990-10-09 | 1996-03-04 | インターナショナル・ビジネス・マシーンズ・コーポレイション | マルチ予測型分岐予測機構 |
WO1992006426A1 (en) * | 1990-10-09 | 1992-04-16 | Nexgen Microsystems | Method and apparatus for parallel decoding of instructions with branch prediction look-up |
US5394530A (en) * | 1991-03-15 | 1995-02-28 | Nec Corporation | Arrangement for predicting a branch target address in the second iteration of a short loop |
US5961629A (en) * | 1991-07-08 | 1999-10-05 | Seiko Epson Corporation | High performance, superscalar-based computer system with out-of-order instruction execution |
US5832289A (en) * | 1991-09-20 | 1998-11-03 | Shaw; Venson M. | System for estimating worst time duration required to execute procedure calls and looking ahead/preparing for the next stack operation of the forthcoming procedure calls |
CA2124333A1 (en) * | 1992-02-27 | 1993-09-02 | John A. Saba | Cpu having pipelined instruction unit and effective address calculation unit with retained virtual address capability |
US5313634A (en) * | 1992-07-28 | 1994-05-17 | International Business Machines Corporation | Computer system branch prediction of subroutine returns |
US5434985A (en) * | 1992-08-11 | 1995-07-18 | International Business Machines Corporation | Simultaneous prediction of multiple branches for superscalar processing |
JP3057934B2 (ja) * | 1992-10-30 | 2000-07-04 | 日本電気株式会社 | 共有バス調停機構 |
US5463748A (en) * | 1993-06-30 | 1995-10-31 | Intel Corporation | Instruction buffer for aligning instruction sets using boundary detection |
US5623614A (en) * | 1993-09-17 | 1997-04-22 | Advanced Micro Devices, Inc. | Branch prediction cache with multiple entries for returns having multiple callers |
ES2138051T3 (es) * | 1994-01-03 | 2000-01-01 | Intel Corp | Metodo y aparato para la realizacion de un sistema de resolucion de bifurcaciones en cuatro etapas en un procesador informatico. |
US5604877A (en) * | 1994-01-04 | 1997-02-18 | Intel Corporation | Method and apparatus for resolving return from subroutine instructions in a computer processor |
TW253946B (en) * | 1994-02-04 | 1995-08-11 | Ibm | Data processor with branch prediction and method of operation |
GB2287111B (en) * | 1994-03-01 | 1998-08-05 | Intel Corp | Method for pipeline processing of instructions by controlling access to a reorder buffer using a register file outside the reorder buffer |
US5530825A (en) * | 1994-04-15 | 1996-06-25 | Motorola, Inc. | Data processor with branch target address cache and method of operation |
US5623615A (en) * | 1994-08-04 | 1997-04-22 | International Business Machines Corporation | Circuit and method for reducing prefetch cycles on microprocessors |
US5706491A (en) * | 1994-10-18 | 1998-01-06 | Cyrix Corporation | Branch processing unit with a return stack including repair using pointers from different pipe stages |
US5606682A (en) * | 1995-04-07 | 1997-02-25 | Motorola Inc. | Data processor with branch target address cache and subroutine return address cache and method of operation |
US5687360A (en) * | 1995-04-28 | 1997-11-11 | Intel Corporation | Branch predictor using multiple prediction heuristics and a heuristic identifier in the branch instruction |
US5968169A (en) * | 1995-06-07 | 1999-10-19 | Advanced Micro Devices, Inc. | Superscalar microprocessor stack structure for judging validity of predicted subroutine return addresses |
US5867701A (en) * | 1995-06-12 | 1999-02-02 | Intel Corporation | System for inserting a supplemental micro-operation flow into a macroinstruction-generated micro-operation flow |
US5752069A (en) * | 1995-08-31 | 1998-05-12 | Advanced Micro Devices, Inc. | Superscalar microprocessor employing away prediction structure |
US5634103A (en) * | 1995-11-09 | 1997-05-27 | International Business Machines Corporation | Method and system for minimizing branch misprediction penalties within a processor |
US5864707A (en) * | 1995-12-11 | 1999-01-26 | Advanced Micro Devices, Inc. | Superscalar microprocessor configured to predict return addresses from a return stack storage |
US5734881A (en) * | 1995-12-15 | 1998-03-31 | Cyrix Corporation | Detecting short branches in a prefetch buffer using target location information in a branch target cache |
US5828901A (en) * | 1995-12-21 | 1998-10-27 | Cirrus Logic, Inc. | Method and apparatus for placing multiple frames of data in a buffer in a direct memory access transfer |
US5964868A (en) * | 1996-05-15 | 1999-10-12 | Intel Corporation | Method and apparatus for implementing a speculative return stack buffer |
US5805877A (en) * | 1996-09-23 | 1998-09-08 | Motorola, Inc. | Data processor with branch target address cache and method of operation |
US5850543A (en) * | 1996-10-30 | 1998-12-15 | Texas Instruments Incorporated | Microprocessor with speculative instruction pipelining storing a speculative register value within branch target buffer for use in speculatively executing instructions after a return |
KR100240591B1 (ko) * | 1996-11-06 | 2000-03-02 | 김영환 | 분기명령어의 효율적인 처리를 위한 브랜치 타겟 버퍼 및 그를 이용한 분기 예측방법 |
US6088793A (en) * | 1996-12-30 | 2000-07-11 | Intel Corporation | Method and apparatus for branch execution on a multiple-instruction-set-architecture microprocessor |
DE69734093D1 (de) * | 1996-12-31 | 2005-10-06 | Metaflow Technologies Inc | System zur Ausführung von Gleitkommaoperationen |
US5850532A (en) * | 1997-03-10 | 1998-12-15 | Advanced Micro Devices, Inc. | Invalid instruction scan unit for detecting invalid predecode data corresponding to instructions being fetched |
TW357318B (en) * | 1997-03-18 | 1999-05-01 | Ind Tech Res Inst | Branching forecast and reading device for unspecified command length extra-purity pipeline processor |
US6122729A (en) * | 1997-05-13 | 2000-09-19 | Advanced Micro Devices, Inc. | Prefetch buffer which stores a pointer indicating an initial predecode position |
US5872946A (en) * | 1997-06-11 | 1999-02-16 | Advanced Micro Devices, Inc. | Instruction alignment unit employing dual instruction queues for high frequency instruction dispatch |
US6073230A (en) * | 1997-06-11 | 2000-06-06 | Advanced Micro Devices, Inc. | Instruction fetch unit configured to provide sequential way prediction for sequential instruction fetches |
US6157988A (en) * | 1997-08-01 | 2000-12-05 | Micron Technology, Inc. | Method and apparatus for high performance branching in pipelined microsystems |
US6185676B1 (en) * | 1997-09-30 | 2001-02-06 | Intel Corporation | Method and apparatus for performing early branch prediction in a microprocessor |
US5978909A (en) * | 1997-11-26 | 1999-11-02 | Intel Corporation | System for speculative branch target prediction having a dynamic prediction history buffer and a static prediction history buffer |
US6041405A (en) * | 1997-12-18 | 2000-03-21 | Advanced Micro Devices, Inc. | Instruction length prediction using an instruction length pattern detector |
US5931944A (en) * | 1997-12-23 | 1999-08-03 | Intel Corporation | Branch instruction handling in a self-timed marking system |
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 |
US5974543A (en) * | 1998-01-23 | 1999-10-26 | International Business Machines Corporation | Apparatus and method for performing subroutine call and return operations |
US5881260A (en) * | 1998-02-09 | 1999-03-09 | Hewlett-Packard Company | Method and apparatus for sequencing and decoding variable length instructions with an instruction boundary marker within each instruction |
US6151671A (en) * | 1998-02-20 | 2000-11-21 | Intel Corporation | System and method of maintaining and utilizing multiple return stack buffers |
US6108773A (en) * | 1998-03-31 | 2000-08-22 | Ip-First, Llc | Apparatus and method for branch target address calculation during instruction decode |
US6256727B1 (en) * | 1998-05-12 | 2001-07-03 | International Business Machines Corporation | Method and system for fetching noncontiguous instructions in a single clock cycle |
US6260138B1 (en) * | 1998-07-17 | 2001-07-10 | Sun Microsystems, Inc. | Method and apparatus for branch instruction processing in a processor |
US6122727A (en) * | 1998-08-24 | 2000-09-19 | Advanced Micro Devices, Inc. | Symmetrical instructions queue for high clock frequency scheduling |
US6134654A (en) * | 1998-09-16 | 2000-10-17 | Sun Microsystems, Inc. | Bi-level branch target prediction scheme with fetch address prediction |
US6279106B1 (en) * | 1998-09-21 | 2001-08-21 | Advanced Micro Devices, Inc. | Method for reducing branch target storage by calculating direct branch targets on the fly |
US6279105B1 (en) * | 1998-10-15 | 2001-08-21 | International Business Machines Corporation | Pipelined two-cycle branch target address cache |
US6170054B1 (en) * | 1998-11-16 | 2001-01-02 | Intel Corporation | Method and apparatus for predicting target addresses for return from subroutine instructions utilizing a return address cache |
US6175897B1 (en) * | 1998-12-28 | 2001-01-16 | Bull Hn Information Systems Inc. | Synchronization of branch cache searches and allocation/modification/deletion of branch cache |
US6601161B2 (en) * | 1998-12-30 | 2003-07-29 | Intel Corporation | Method and system for branch target prediction using path information |
US6233676B1 (en) * | 1999-03-18 | 2001-05-15 | Ip-First, L.L.C. | Apparatus and method for fast forward branch |
US6314514B1 (en) * | 1999-03-18 | 2001-11-06 | Ip-First, Llc | Method and apparatus for correcting an internal call/return stack in a microprocessor that speculatively executes call and return instructions |
EP1050810A1 (en) * | 1999-05-03 | 2000-11-08 | STMicroelectronics SA | A computer system comprising multiple functional units |
US6321321B1 (en) * | 1999-06-21 | 2001-11-20 | Vlsi Technology, Inc. | Set-associative cache-management method with parallel and single-set sequential reads |
US6457120B1 (en) * | 1999-11-01 | 2002-09-24 | International Business Machines Corporation | Processor and method including a cache having confirmation bits for improving address predictable branch instruction target predictions |
US6748441B1 (en) * | 1999-12-02 | 2004-06-08 | Microsoft Corporation | Data carousel receiving and caching |
US6560696B1 (en) * | 1999-12-29 | 2003-05-06 | Intel Corporation | Return register stack target predictor |
US6502185B1 (en) * | 2000-01-03 | 2002-12-31 | Advanced Micro Devices, Inc. | Pipeline elements which verify predecode information |
US6351796B1 (en) * | 2000-02-22 | 2002-02-26 | Hewlett-Packard Company | Methods and apparatus for increasing the efficiency of a higher level cache by selectively performing writes to the higher level cache |
US6754808B1 (en) * | 2000-09-29 | 2004-06-22 | Intel Corporation | Valid bit generation and tracking in a pipelined processor |
US7165169B2 (en) * | 2001-05-04 | 2007-01-16 | Ip-First, Llc | Speculative branch target address cache with selective override by secondary predictor based on branch instruction type |
US20020194461A1 (en) * | 2001-05-04 | 2002-12-19 | Ip First Llc | Speculative branch target address cache |
US7200740B2 (en) * | 2001-05-04 | 2007-04-03 | Ip-First, Llc | Apparatus and method for speculatively performing a return instruction in a microprocessor |
US6886093B2 (en) * | 2001-05-04 | 2005-04-26 | Ip-First, Llc | Speculative hybrid branch direction predictor |
US6895498B2 (en) * | 2001-05-04 | 2005-05-17 | Ip-First, Llc | Apparatus and method for target address replacement in speculative branch target address cache |
US7134005B2 (en) * | 2001-05-04 | 2006-11-07 | Ip-First, Llc | Microprocessor that detects erroneous speculative prediction of branch instruction opcode byte |
US7165168B2 (en) | 2003-01-14 | 2007-01-16 | Ip-First, Llc | Microprocessor with branch target address cache update queue |
US6823444B1 (en) * | 2001-07-03 | 2004-11-23 | Ip-First, Llc | Apparatus and method for selectively accessing disparate instruction buffer stages based on branch target address cache hit and instruction stage wrap |
US7203824B2 (en) * | 2001-07-03 | 2007-04-10 | Ip-First, Llc | Apparatus and method for handling BTAC branches that wrap across instruction cache lines |
US6898699B2 (en) * | 2001-12-21 | 2005-05-24 | Intel Corporation | Return address stack including speculative return address buffer with back pointers |
US7159097B2 (en) * | 2002-04-26 | 2007-01-02 | Ip-First, Llc | Apparatus and method for buffering instructions and late-generated related information using history of previous load/shifts |
US6968444B1 (en) * | 2002-11-04 | 2005-11-22 | Advanced Micro Devices, Inc. | Microprocessor employing a fixed position dispatch unit |
US7143269B2 (en) * | 2003-01-14 | 2006-11-28 | Ip-First, Llc | Apparatus and method for killing an instruction after loading the instruction into an instruction queue in a pipelined microprocessor |
US7152154B2 (en) * | 2003-01-16 | 2006-12-19 | Ip-First, Llc. | Apparatus and method for invalidation of redundant branch target address cache entries |
US7185186B2 (en) * | 2003-01-14 | 2007-02-27 | Ip-First, Llc | Apparatus and method for resolving deadlock fetch conditions involving branch target address cache |
US7178010B2 (en) * | 2003-01-16 | 2007-02-13 | Ip-First, Llc | Method and apparatus for correcting an internal call/return stack in a microprocessor that detects from multiple pipeline stages incorrect speculative update of the call/return stack |
US7237098B2 (en) * | 2003-09-08 | 2007-06-26 | Ip-First, Llc | Apparatus and method for selectively overriding return stack prediction in response to detection of non-standard return sequence |
-
2001
- 2001-07-03 US US09/898,832 patent/US6823444B1/en not_active Expired - Lifetime
- 2001-11-02 TW TW090127267A patent/TW530205B/zh not_active IP Right Cessation
-
2002
- 2002-03-14 CN CN02107189.6A patent/CN1279442C/zh not_active Expired - Lifetime
-
2004
- 2004-08-17 US US10/920,120 patent/US7159098B2/en not_active Expired - Lifetime
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100397365C (zh) * | 2003-01-14 | 2008-06-25 | 智权第一公司 | 解决分支目标地址快取中死结提取条件的装置与方法 |
CN1310137C (zh) * | 2003-04-23 | 2007-04-11 | 智慧第一公司 | 缓冲指令及其较晚产生相关信息的装置及方法 |
CN103235715A (zh) * | 2013-03-27 | 2013-08-07 | 青岛中星微电子有限公司 | 一种片上系统SoC命令处理的方法、装置及芯片 |
CN103235715B (zh) * | 2013-03-27 | 2016-08-03 | 青岛中星微电子有限公司 | 一种片上系统SoC命令处理的方法、装置及芯片 |
Also Published As
Publication number | Publication date |
---|---|
US7159098B2 (en) | 2007-01-02 |
CN1279442C (zh) | 2006-10-11 |
US6823444B1 (en) | 2004-11-23 |
US20050044343A1 (en) | 2005-02-24 |
TW530205B (en) | 2003-05-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1279442C (zh) | 选择性存取不同指令缓冲阶层的装置及方法 | |
CN1249575C (zh) | 提供分支指令与相关目标指令至指令缓冲区的装置及方法 | |
CN1147794C (zh) | 具有静态转移预测支持的去耦取指令-执行引擎 | |
CN1123826C (zh) | 预取由转移历史引导的指令/数据的方法和装置 | |
CN1310134C (zh) | 具有二级分支预测高速缓存的分支预测装置 | |
EP1513062B1 (en) | Apparatus, method and computer data signal for selectively overriding return stack prediction in response to detection of non-standard return sequence | |
US7234045B2 (en) | Apparatus and method for handling BTAC branches that wrap across instruction cache lines | |
US5758114A (en) | High speed instruction alignment unit for aligning variable byte-length instructions according to predecode information in a superscalar microprocessor | |
CN1581070A (zh) | 一种回应非标准返回序列的检测而选择性覆盖返回堆栈预测的装置及方法 | |
CN1864131A (zh) | 处置在基于跟踪缓存的处理器中的异常指令的系统及方法 | |
CN1513137A (zh) | 使用多重指令集的数据处理 | |
JP2001521241A (ja) | 分岐予測を迅速に特定するための命令キャッシュ内のバイト範囲に関連する分岐セレクタ | |
KR101048178B1 (ko) | 링크 스택 회로를 정정하는 방법 및 장치 | |
EP1439458A2 (en) | Apparatus and method for invalidating instructions in an instruction queue of a pipelined microprocessor | |
US5987235A (en) | Method and apparatus for predecoding variable byte length instructions for fast scanning of instructions | |
CN1206144A (zh) | 能够减少转移故障的具有小尺寸电路的流水线处理器 | |
CN1148656C (zh) | 面向线程的调试 | |
CN1149472C (zh) | 更名装置及处理器 | |
CN1304944C (zh) | 预先读取脱序执行指令的方法及处理器 | |
US5404471A (en) | Method and apparatus for switching address generation modes in CPU having plural address generation modes | |
US6289428B1 (en) | Superscaler processor and method for efficiently recovering from misaligned data addresses | |
CN1270234C (zh) | 处理涵盖跨越指令高速缓存线的分支目标地址高速区的分支的装置及方法 | |
US20010037444A1 (en) | Instruction buffering mechanism | |
CN1310137C (zh) | 缓冲指令及其较晚产生相关信息的装置及方法 | |
CN1558326A (zh) | 用于更正微处理器中的内部呼叫或返回堆栈的方法与装置 |
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 | ||
CX01 | Expiry of patent term | ||
CX01 | Expiry of patent term |
Granted publication date: 20061011 |