Source: https://patents.google.com/patent/US9921850B2/en
Timestamp: 2018-12-12 10:26:46
Document Index: 697882300

Matched Legal Cases: ['Application No. 11833310', 'Application No. 11833322', 'Application No. 2011857070', 'Application No. 11833310', 'Application No. 2011857070', 'Application No. 2011857070']

US9921850B2 - Instruction sequence buffer to enhance branch prediction efficiency - Google Patents
Instruction sequence buffer to enhance branch prediction efficiency Download PDF
US9921850B2
US9921850B2 US15353623 US201615353623A US9921850B2 US 9921850 B2 US9921850 B2 US 9921850B2 US 15353623 US15353623 US 15353623 US 201615353623 A US201615353623 A US 201615353623A US 9921850 B2 US9921850 B2 US 9921850B2
US15353623
US20170068544A1 (en )
A method for outputting alternative instruction sequences. The method includes tracking repetitive hits to determine a set of frequently hit instruction sequences for a microprocessor. A frequently miss-predicted branch instruction is identified, wherein the predicted outcome of the branch instruction is frequently wrong. An alternative instruction sequence for the branch instruction target is stored into a buffer. On a subsequent hit to the branch instruction where the predicted outcome of the branch instruction was wrong, the alternative instruction sequence is output from the buffer.
The present application is a continuation of U.S. patent application Ser. No. 13/879,365, filed Aug. 12, 2013 entitled “AN INSTRUCTION SEQUENCE BUFFER TO ENHANCE BRANCH PREDICTION EFFICIENCY,” naming Mohammad Abdallah as inventor, which claims foreign priority to Application Number PCT/US2011/055917 filed on Oct. 12, 2011, which is herein incorporated by reference in its entirety, and to provisional patent application 61/392,391 entitled “AN INSTRUCTION SEQUENCE BUFFER TO ENHANCE BRANCH PREDICTION EFFICIENCY,” filed on Oct. 12, 2011.
Embodiments of the present invention implement an algorithm (e.g., a method and an apparatus) that increases the efficiency of branch production processing of instruction sequences.
In one embodiment, the present invention is implemented as a method for outputting alternative instruction sequences. The method includes tracking repetitive hits to determine a set of frequently hit instruction sequences for a microprocessor. Where in a frequently miss-predicted branch instruction is identified, where in the predicted outcome of the branch instruction is frequently wrong. An alternative instruction sequence for the branch instruction target is stored into a buffer. On a subsequent hit to the branch instruction where the predicted outcome of the branch instruction was wrong, the alternative instruction sequence is output from the buffer.
FIG. 1 shows an exemplary sequence of instructions operated on by one embodiment of the present invention.
FIG. 2 shows the sequence instructions with the respective code segments for each branch illustrated in accordance with one embodiment of the present invention.
FIG. 3 shows a flow diagram of an apparatus used to output alternative instruction sequences for branches that are frequently hit and are frequently miss-predicted in accordance with one embodiment of the present invention.
FIG. 4 shows an overview flowchart of the steps of a process for outputting alternative instruction sequences in accordance with one embodiment of the present invention.
FIG. 5 shows a diagram of an instruction sequence buffer in accordance with one embodiment of the present invention.
FIG. 6 shows a diagram of an instruction sequence buffer that is used to store instruction sequences for reliably predictable branches that are frequently hit in accordance with one embodiment of the present invention.
FIG. 7 shows an overview flowchart of the steps of a process for outputting reliably predictable instruction sequences in accordance with one embodiment of the present invention.
FIG. 8 shows a diagram of an exemplary microprocessor pipeline in accordance with one embodiment of the present invention.
In one embodiment, the present invention implements an algorithm (e.g., a method and an apparatus) for outputting alternative instruction sequences for branches that are frequently hit and are frequently miss-predicted. The method includes tracking repetitive hits to a branch instruction to determine a set of frequently hit instruction sequences for a microprocessor. Then frequently miss-predicted branch instructions are identified, wherein the predicted outcome of the branch instruction is frequently wrong. An alternative instruction sequence for the branch instruction is stored into a buffer (e.g., an instruction sequence buffer). On a subsequent hit to the branch instruction where the predicted outcome of the branch instruction was wrong, the alternative instruction sequence is output from the buffer. The alternative instruction sequence thus saves the microprocessor pipeline from being flushed in its entirety. The alternative instruction sequence is provided directly from the buffer, as opposed to, for example, flushing the whole pipeline, accessing caches and assembling a new instruction sequence. FIG. 1 shows an exemplary sequence of instructions operated on by embodiments of the present invention. Subsequently, FIG. 2 shows a flow diagram of alternative instruction sequences produced by multiple levels of branches, and FIG. 3 shows an overview flowchart of the steps of a process for outputting alternative instruction sequences in accordance with one embodiment of the present invention.
In an alternative embodiment, dual use of the storage resources of the instruction sequence buffer is implemented. Instead of storing alternative instruction sequences for frequently hit in frequently miss predicted branches, the storage resources of the instruction sequence buffer are used to store instruction sequences for frequently hit and reliably predicted branches. Thus, instead of storing alternative instruction sequences for the taken case and the not taken case, the storage resources of the buffer 600 are used to store the instruction sequences of a frequently hit and reliably predictable branch and a number of the subsequent following branches. This alternative embodiment is shown and described in FIG. 6 below. The two embodiments can both exist together and share the same storage buffer but in a different manner.
FIG. 1 shows an exemplary sequence of instructions operated on by one embodiment of the present invention. As depicted in FIG. 1, the instruction sequence 100 comprises 16 instructions, proceeding from the top of FIG. 1 to the bottom. As can be seen in FIG. 1, the sequence 100 includes four branch instructions 101-104.
One objective of embodiments of the present invention is to output alternative instruction sequences for branches that are frequently hit and are frequently miss-predicted. The alternative instruction sequences are output as a means of greatly reducing the latency penalty of assembling an alternative instruction sequence from scratch. In accordance with different embodiments, these instructions can comprise native instructions (e.g., native instructions of the microprocessor architecture, such as x86 instructions, MIPS instructions, or the like). Alternatively, these instructions can comprise microcode. As described earlier, the more branches a sequence of instructions include, the more combinations and possible resulting sequences occur and need to be dealt with. This characteristic is illustrated in FIG. 2 below.
FIG. 2 shows the sequence instructions 100 with the respective code segments for each branch illustrated in accordance with one embodiment of the present invention. As described above, the more branches that are presented in a sequence of instructions, the more combinations and possibilities of sequences of instructions that need to be disambiguated.
This is illustrated in FIG. 2, which shows a first resulting sequence “1” that occurs if branch c1 is taken. As referred to herein, a branch is taken if the program execution flow moves to the target of the branch. This is indicated by the two digits within parenthesis at the end of each of the branch instructions. For example, branch c1 has a target of 11 and results in skipping the next 6 instructions. Similarly, branch c2 has a target of 10 and results in skipping the next 2 instructions, and so on.
Thus, a second resulting sequence “2” is shown, and occurs if branch c2 is taken. A third resulting sequence “3” is shown as occurring if branch c3 is taken. Similarly, the fourth resulting sequence “4” is shown as occurring if branch c4 is taken.
Embodiments of the present invention output alternative instruction sequences for branches that are frequently hit and are frequently miss-predicted. As shown in FIG. 2, a different instruction sequence occurs when any of the branches along the predicted instruction sequence is miss-predicted. Embodiments of the present invention advantageously store a number of these alternative instruction sequences in a buffer that is located very close to the decoder hardware. The stored alternative instruction sequences are output as a means of greatly reducing the latency penalty of assembling an alternative instruction sequence from scratch. This algorithm is further diagrammed below in FIG. 3.
FIG. 3 shows a flow diagram of an apparatus 300 used to output alternative instruction sequences for branches that are frequently hit and are frequently miss-predicted in accordance with one embodiment of the present invention. As depicted in FIG. 3, apparatus 300 includes a sequence predictor 301, a branch prediction table 302, and a sequence of stability counter 303.
In the FIG. 3 embodiment, the apparatus 300 functions by tracking repetitive hits to determine a set of frequently hit branches and their corresponding instruction sequences. These branches are illustrated as B0 through B8 in FIG. 3. As described above, a predicted instruction sequence is assembled based upon the branch predictions for the branches. Lines are shown connecting the first branch B0 to the following branches B1 and B5, and from B1 and B5 to their respective following branches B2, B4 and B6, and so on.
In the FIG. 3 embodiment, branches are analyzed three levels deep past the initial branch B0. Thus, for example, an alternative instruction sequence can be assembled from B0 to B1, to B2 and on to B3. Depending upon the size of the buffer, a greater or lesser number of levels of following branches can be analyzed and stored.
FIG. 4 shows an overview flowchart of the steps of a process 400 for outputting alternative instruction sequences in accordance with one embodiment of the present invention. Process 400 shows exemplary operating steps of, for example, an instruction fetch module of a microprocessor.
FIG. 5 shows a diagram of an instruction sequence buffer 500 in accordance with one embodiment of the present invention. As depicted in FIG. 5, the buffer 500 includes threes portions 501-503. The buffer 500 and the portions 501-503 show an example of embodiments of the present invention storing alternative instruction sequences for each of the possible following branches that flow from branch B0. For each of the branches B1 through B8, the possible resulting instruction sequences from each branch being taken or not taken are stored. For example, instruction sequences for branch B0 being taken (e.g., leading to B1) or not taken (e.g., leading to B5) are stored into the buffer 500. Similarly, instructions for branch B1 being taken (e.g., leading to B2) are not taken (e.g., leading to B4) are stored into the buffer 500, and so on for each of the following branches.
The FIG. 500 embodiment shows how the portions 501-503 include instruction sequences for both the taken case and the not taken case for each of the branches B0 through B8. For example, portion 501 shows instructions for the taken case stored on a first way of the portion on the left hand side. This is illustrated by the “T” at the top of the portion. Instructions for the not taken case are stored on the right hand side, as illustrated by the “NT” at the top of the portion. The taken and not taken cases represent two ways into which the buffer portion, or cache, can be indexed. This is illustrated as way 1 “W1” and way 2 “W2” at the top of the portion. These attributes are similarly illustrated for each of the other portions 502-503.
The lower portion of FIG. 5 illustrates the manner in which the buffer 500 is indexed. In the FIG. 5 embodiment, to access the alternative instruction sequences for both the taken and not taken cases for each of the following branches, the address of a given following branch is used to index the buffer 500. It should be noted that the alternative instruction sequences are stored within the portions 501-503 in an orthogonal manner. In other words, the alternative instruction sequences that can both possibly be taken from a given branch do not reside within the same portion. For example, as depicted in FIG. 5, the alternative instruction sequences for branch B1 and B5 can reside within the portion 501 because either the instruction sequence for branch B1 or branch B5 will occur. This is because branch B0 will either be taken or not taken. Thus there is no scenario in which instructions from both branch B1 and branch B5 will occur. Similarly, at the next level removed from branch B0, the alternative instruction sequences for branches B2, B4 and B6 can be stored within the portion 502. These alternative instruction sequences are mutually exclusive in that only one of the three can possibly be executed. Similarly, at the next level, portion 503 stores alternative instruction sequences for the branches B3, B7 and B8.
FIG. 6 shows a diagram of an instruction sequence buffer 600 that is used to store instruction sequences for reliably predictable branches that are frequently hit in accordance with one embodiment of the present invention. As illustrated in FIG. 6, the buffer 600 comprises four portions 601-604. Each of the portions 601-604 is coupled to respective compare logic components 611-614.
FIG. 6 illustrates an alternative use of the storage resources of the instruction sequence buffer. In the FIG. 6 embodiment, instead of storing alternative instruction sequences for frequently hit in frequently miss predicted branches, the storage resources are used to store instruction sequences for frequently hit and reliably predicted branches. Thus, instead of storing alternative instruction sequences for the taken case and the not taken case, the storage resources of the buffer 600 are used to store the instruction sequences of a frequently hit and reliably predictable branch and a number of the subsequent following branches.
It should be noted that the buffer 600 is essentially the same structure as the buffer 500 of FIG. 5. The difference is in the manner in which the buffer 600 is indexed. As described above, the buffer 600 is used to store reliably predictable instruction sequences that flow from multiple branches. The reliably predict the instruction sequences are stored in multiple ways, shown as way 1 “W1” and way 2 “W2” at the top of each of the portions 601-604. In one embodiment, the address of the branches (e.g., branch B1) are used to index into the cache. For example, in a scenario where a reliably predictable instruction sequence flows from B0 to B1 to B2 to B3, the address of the first following branch B1 is used to index the buffer 600 with the following branches B2 and B3 being used as tags. The following branches B2 and B3 would allow for the same index to be accessed via two different ways with two different tags (b2 and b3). In one embodiment, bits of the branch prediction (e.g., provided from the branch which in table 302) can also be used as tags. In one embodiment, a hash of the following branch B1 and its respective following branches B2 and B3 could be used to access the buffer 600.
The compare logic components 611-614 functions by comparing branch sequence predictions. The components 611-614 compare predictions with sequence hits to score the relative merit of the reliably predictable sequences. For example, if a reliably predictable sequence becomes not so strongly predictable for some reason, this component will cause it to be evicted from the buffer 600. In one embodiment, if the reliably predict will sequence becomes a frequently hit in frequently miss predicted sequence, the sequence is moved from the accessing and storing methodology illustrated in FIG. 6 to the accessing and storing methodology illustrated in FIG. 5.
FIG. 7 shows an overview flowchart of the steps of a process 700 for outputting reliably predictable instruction sequences in accordance with one embodiment of the present invention. Process 700 shows exemplary operating steps of, for example, an instruction fetch module of a microprocessor.
FIG. 8 shows a diagram of an exemplary microprocessor pipeline 800 in accordance with one embodiment of the present invention. The microprocessor pipeline 800 includes a fetch module 801 that implements the functionality of the process for identifying and extracting the instructions comprising an execution, as described above. In the FIG. 8 embodiment, the fetch module is followed by a decode module 802, an allocation module 803, a dispatch module 804, an execution module 805 and a retirement modules 806. It should be noted that the microprocessor pipeline 800 is just one example of the pipeline that implements the functionality of embodiments of the present invention described above. One skilled in the art would recognize that other microprocessor pipelines can be implemented that include the functionality of the decode module described above.
1. A method for outputting alternative instruction sequences, comprising:
tracking repetitive hits to determine a set of hit instruction sequences for a microprocessor that have been hit above or equal to a hit threshold, wherein the tracking comprises monitoring execution of branches to assemble the set of hit instruction sequences;
identifying a plurality of miss-predicted branch instructions, wherein a predicted outcome of each of the plurality of miss-predicted branch instructions is wrong above or equal to a miss-predicted threshold;
storing an alternative instruction sequence for each of the plurality of miss-predicted branch instructions into a buffer; and
on a subsequent hit to a miss-predicted branch instruction in the plurality of miss-predicted branch instructions where the predicted outcome of the miss-predicted branch instruction was wrong, outputting a corresponding alternative instruction sequence from the buffer.
2. The method of claim 1, wherein instructions in the microprocessor can be selected from a group consisting of: native instructions of an architecture of the microprocessor and microcode.
3. The method of claim 1, wherein alternative instruction sequences are stored a number of levels of following branches deep.
4. The method of claim 3, wherein the alternative instruction sequences are stored for taken and not taken conditions of the following branches.
5. The method of claim 1, wherein outputting the alternative instruction sequence from the buffer avoids causing a full flush of an instruction pipeline of the microprocessor.
6. The method of claim 1, wherein outputting the alternative instruction sequence from the buffer reduces a performance penalty from wrongly predicting a branch instruction.
7. The method of claim 1, wherein a tag structure is used to identify the set of hit instruction sequences.
8. A system for outputting alternative instruction sequences in a microprocessor, said system comprising:
a fetch module that accesses a plurality of instructions that comprise multiple branch instructions;
a buffer that stores alternative instruction sequences;
a sequence predictor operable to monitor execution of branches to assemble a set of hit instruction sequences from the plurality of instructions that have been hit above or equal to a hit threshold; and
a counter operable to accumulate repetitive hits to instruction sequences to identify a plurality of miss-predicted branch instructions, wherein a predicted outcome of each of the plurality of frequently miss-predicted branch instructions is wrong above or equal to a miss-predicted threshold;
wherein the fetch module stores an alternative instruction sequence for each of the plurality of branch instructions into the buffer; and
wherein on a subsequent hit to a miss-predicted branch instruction in the plurality of miss-predicted branch instructions where the predicted outcome of the miss-predicted branch instruction was wrong, the fetch module outputs a corresponding alternative instruction sequence from the buffer.
9. The system of claim 8, wherein the buffer is located in proximity to decoder hardware in the microprocessor.
10. The system of claim 8, wherein the sequence predictor is operable to predict an outcome of the branches in order to assemble the set of hit instruction sequences from the plurality of instructions.
11. The system of claim 8, wherein alternative instruction sequences are stored a number of levels of following branches deep.
12. The system of claim 11, wherein the alternative instruction sequences are stored for taken and not taken conditions of the following branches.
13. The system of claim 8, wherein outputting the alternative instruction sequence from the buffer avoids causing a full flush of an instruction pipeline of the microprocessor.
14. The system of claim 8, wherein outputting the alternative instruction sequence from the buffer reduces a performance penalty from wrongly predicting a branch instruction.
15. The system of claim 8, wherein the counter accumulates repetitive hits to a branch instruction until the miss-predicted threshold has been exceeded before classifying the branch instruction as a miss-predicted branch instruction.
16. A microprocessor that implements a method of identifying instructions, the microprocessor comprising:
a microprocessor pipeline;
a fetch module included in the microprocessor pipeline, wherein the fetch module accesses a plurality of instructions that comprise multiple branch instructions;
a buffer coupled to the fetch module;
wherein on a subsequent hit to a miss-predicted branch instruction in the plurality of miss-predicted branch instructions where the predicted outcome of the miss-predicted branch instruction was wrong, the fetch module outputs a corresponding alternative instruction sequence from the buffer of respective alternative instruction sequences are stored in the buffer.
17. The microprocessor of claim 16, wherein alternative instruction sequences are stored a number of levels of following branches deep, and wherein alternative instruction sequences are stored for taken and not taken conditions of the following branches.
18. The microprocessor of claim 16, wherein outputting the alternative instruction sequence from the buffer avoids causing a flush of an instruction pipeline of the microprocessor.
19. The microprocessor of claim 16, wherein outputting the alternative instruction sequence from the buffer reduces a performance penalty from wrongly predicting a branch instruction.
20. The microprocessor of claim 16, wherein the counter accumulates repetitive hits to a branch instruction until the miss-predicted threshold has been exceeded before classifying the branch instruction as a frequently miss-predicted branch instruction.
US15353623 2010-10-12 2016-11-16 Instruction sequence buffer to enhance branch prediction efficiency Active US9921850B2 (en)
US39239110 true 2010-10-12 2010-10-12
PCT/US2011/055917 WO2012051262A3 (en) 2010-10-12 2011-10-12 An instruction sequence buffer to enhance branch prediction efficiency
US201313879365 true 2013-08-12 2013-08-12
US15353623 US9921850B2 (en) 2010-10-12 2016-11-16 Instruction sequence buffer to enhance branch prediction efficiency
US15860469 US10083041B2 (en) 2010-10-12 2018-01-02 Instruction sequence buffer to enhance branch prediction efficiency
PCT/US2011/055917 Continuation WO2012051262A3 (en) 2010-10-12 2011-10-12 An instruction sequence buffer to enhance branch prediction efficiency
US13879365 Continuation US9678755B2 (en) 2010-10-12 2011-10-12 Instruction sequence buffer to enhance branch prediction efficiency
US201313879365 Continuation 2013-08-12 2013-08-12
US15860469 Continuation US10083041B2 (en) 2010-10-12 2018-01-02 Instruction sequence buffer to enhance branch prediction efficiency
US20170068544A1 true US20170068544A1 (en) 2017-03-09
US9921850B2 true US9921850B2 (en) 2018-03-20
ID=45938943
US13879365 Active 2033-03-20 US9678755B2 (en) 2010-10-12 2011-10-12 Instruction sequence buffer to enhance branch prediction efficiency
US15353623 Active US9921850B2 (en) 2010-10-12 2016-11-16 Instruction sequence buffer to enhance branch prediction efficiency
US15860469 Active US10083041B2 (en) 2010-10-12 2018-01-02 Instruction sequence buffer to enhance branch prediction efficiency
US (3) US9678755B2 (en)
EP (1) EP2628072B1 (en)
CN (2) CN107092467A (en)
WO (1) WO2012051262A3 (en)
JP4287799B2 (en) 2004-07-29 2009-07-01 富士通株式会社 Processor system and thread switching control method
US7475231B2 (en) 2005-11-14 2009-01-06 Texas Instruments Incorporated Loop detection and capture in the instruction queue
US7707396B2 (en) 2006-11-17 2010-04-27 International Business Machines Corporation Data processing system, processor and method of data processing having improved branch target address cache
US20150363201A1 (en) 2014-06-11 2015-12-17 International Business Machines Corporation Predicting indirect branches using problem branch filtering and pattern cache
CN104298488B (en) 2014-09-29 2018-02-23 上海兆芯集成电路有限公司 Loop predictor guidance circular buffer
US9875106B2 (en) 2014-11-12 2018-01-23 Mill Computing, Inc. Computer processor employing instruction block exit prediction
JP2018005488A (en) 2016-06-30 2018-01-11 富士通株式会社 Arithmetic processing unit and control method for arithmetic processing unit
Communication pursuant to Article 94(3) EPC for European Application No. 11833310, mailed Sep. 22, 2014, 5 pages.
Communication pursuant to Article 94(3) EPC for European Application No. 11833322.8, dated May 2, 2016, 4 pages.
Extended European Search Report for Application No. EP11833310, mailed Jan. 30, 2014, 4 pages.
Extended European Search Report for Application No. EP11833322, dated Feb. 11, 2014, 5 pages.
Final Office Action from U.S. Appl. No. 13/879,365, mailed Apr. 11, 2016, 12 pages.
Final Office Action from U.S. Appl. No. 13/879,365, mailed Dec. 38, 2015, 10 pages.
Final Office Action from U.S. Appl. No. 13/879,374, dated Mar. 11, 2016, 25 pages.
First Office Action and Search Report from foreign counterpart China Patent Application No. CN201180057525, dated Jan. 7, 2015, 25 pages.
First Office Action from foreign counterpart Chinese Patent Application No. 2011857070, mailed Jan. 13, 2016, 18 pages.
Intention to Grant a Patent for Application No. EP11833322, dated Mar. 22, 2017, 5 pages.
Intention to Grant a Patent for European Application No. 11833310, mailed May 4, 2016, 6 pages.
International Preliminary Report on Patentability for Application No. PCT/US2011/055917, mailed Apr. 16, 2013, 5 pages.
International Preliminary Report on Patentability for Application No. PCT/US2011/055943, dated Apr. 25, 2013, 5 pages.
International Search Report and Written Opinion for Application No. PCT/US2011/055917, mailed Apr. 27, 2012, 9 pages.
International Search Report and Written Opinion for Application No. PCT/US2011/055943, dated May 22, 2012, 6 pages.
Non-Final Office Action from U.S. Appl. No. 13/879,365, mailed Sep. 4, 2015, 16 pages.
Non-final Office Action from U.S. Appl. No. 13/879,374, dated Jul. 6, 2016, 26 pages.
Non-final Office Action from U.S. Appl. No. 13/879,374, dated Oct. 2, 2015, 44 pages.
Notice of Allowance from U.S. Appl. No. 13/879,365 mailed Oct. 20, 2016, 8 pages.
Notice of Allowance from U.S. Appl. No. 13/879,365, mailed Feb. 10, 2017, 11 pages.
Notice of Allowance from U.S. Appl. No. 13/879,365, mailed Jul. 6, 2016, 7 pages.
Notice of Allowance from U.S. Appl. No. 13/879,374, dated Apr. 5, 2017, 18 pages.
Notice of Allowance from U.S. Appl. No. 13/879,374, dated Dec. 21, 2016, 15 pages.
Notice of Allowance from U.S. Appl. No. 13/879,374, dated Jan. 39, 2017, 9 pages.
Notification to Grant Patent Right for Invention from foreign counterpart China Patent Application No. CN201180057525, dated May 5, 2016, 3 pages.
Patel, et al., "Improving Trace Cache Effectiveness with Branch Promotion and Trace Packing," Proceedings of the 25th annual international symposium on Computer architecture, Jun. 1998, pp. 262-271.
Ramirez, et al., "Fetching instruction streams," MICRO 35 Proceedings of the 35th annual ACM/IEEE international symposium on Microarchitecture, Nov. 18, 2002, pp. 371-382.
Second Office Action from foreign counterpart China Patent Application No. CN201180057525, dated Sep. 6, 2015, 21 pages.
Second Office Action from foreign counterpart Chinese Patent Application No. 2011857070, mailed Jun. 15, 2016, 22 pages.
Third Office Action from foreign counterpart China Patent Application No. CN201180057525, dated Jan. 13, 2016, 7 pages.
Third Office Action from foreign counterpart Chinese Patent Application No. 2011857070, mailed Oct. 27, 2016, 7 pages.
WO2012051262A2 (en) 2012-04-19 application
US9678755B2 (en) 2017-06-13 grant
US20170068544A1 (en) 2017-03-09 application
EP2628072B1 (en) 2016-10-12 grant
US20130311759A1 (en) 2013-11-21 application
US10083041B2 (en) 2018-09-25 grant
CN103282874A (en) 2013-09-04 application
CN107092467A (en) 2017-08-25 application
US20180121206A1 (en) 2018-05-03 application
EP2628072A4 (en) 2014-03-05 application
CN103282874B (en) 2017-03-29 grant
EP2628072A2 (en) 2013-08-21 application
WO2012051262A3 (en) 2012-06-14 application
US20070130450A1 (en) 2007-06-07 Unnecessary dynamic branch prediction elimination method for low-power
US20090138661A1 (en) 2009-05-28 Prefetch instruction extensions
US20030204705A1 (en) 2003-10-30 Prediction of branch instructions in a data processing apparatus