I. Field of the Disclosure
The technology of the disclosure relates generally to branch prediction for instructions executed in a pipelined computer processor.
II. Background
Instruction pipelining is a processing technique whereby the throughput of computer instructions being executed by a processor may be increased by splitting the handling of each instruction into a series of steps. These steps are executed in an execution pipeline composed of multiple stages. Optimal processor performance may be achieved if all stages in an execution pipeline are able to process instructions concurrently. However, concurrent execution of instructions in an execution pipeline may be hampered by the presence of conditional branch instructions. Conditional branch instructions may redirect the flow of a program based on conditions evaluated when the conditional branch instructions are executed. As a result, the processor may have to stall the fetching of additional instructions until a conditional branch instruction has executed, resulting in reduced processor performance and increased power consumption.
One approach for maximizing processor performance involves utilizing a branch direction predictor circuit to predict whether a conditional branch instruction will be taken. The prediction of whether a conditional branch instruction will be taken can be based on branch prediction history of previous conditional branch instructions. Instructions corresponding to the predicted branch may then be fetched and speculatively executed by the processor. In the event of a mispredicted branch, the processor may incur a delay while the speculatively fetched instructions corresponding to the mispredicted branch are flushed from the execution pipeline, and the correct instructions are fetched.
Processor performance may be further maximized by utilizing a branch target prediction circuit to predict the target address of indirect branches. Subroutine return branch instructions are a specific form of indirect branches. Subroutine call and return branch instruction pairs are generally used in conjunction with a stack-based subroutine call standard. As a result, many conventional computer processors employ stack-based branch predictors. A stack-based branch predictor records a branch return address when a subroutine call branch instruction is observed (e.g., by using a PUSH operation to place the branch return address onto a stack). The stack-based branch predictor may then restore the branch return address as a target address prediction in a Last-In-First-Out (LIFO) order when a subroutine return branch instruction is observed (e.g., by using a POP operation to remove the branch return address from the stack).
However, conventional stack-based branch predictors are susceptible to corruption arising from speculative call and return branches. For example, a first subroutine call to subroutine A that is predicted to be taken results in the branch return address for subroutine A being placed in a stack. Based on the predicted execution of instructions in subroutine A, a subroutine return branch instruction for subroutine A is eventually encountered, and the branch return address for subroutine A is removed from the stack. A second subroutine call for subroutine B, also predicted to be taken, then causes the branch return address for subroutine B to be placed in the stack. If, at this point, it is determined that the execution flow within subroutine A was mispredicted, execution is rolled back to a point before the subroutine return branch instruction for subroutine A. When the subroutine return branch instruction for subroutine A is subsequently encountered in the corrected instruction stream, the branch return address for subroutine A is no longer available, as it has been overwritten in the stack with the branch return address for subroutine B. Similarly, issues may arise if the subroutine call to subroutine B is predicted not to be taken, but is subsequently determined to have been mispredicted
Aspects disclosed in the detailed description include branch prediction based on Least-Recently-Used (LRU)-class linked list branch predictors. Related apparatus, methods, and computer-readable media are also disclosed. As used herein, “LRU-class” and “LRU indicator” refer to the use of a replacement policy (such as Least-Recently-Used or Pseudo-Least-Recently-Used, as non-limiting examples) that is premised upon allocating least-recently-used predictor entries rather than a most-recently-used predictor entry. In this regard, a branch predictor circuit is provided. The branch predictor circuit comprises branch direction prediction logic, and further comprises a linked list comprising a plurality of predictor entries, each of which comprises a link address register. The branch predictor circuit also comprises a LRU indicator indicative of a relative age of each of the plurality of predictor entries of the linked list. The branch predictor circuit is configured to detect a first branch instruction corresponding to a subroutine call in an instruction stream. The branch predictor circuit is further configured to determine whether the first branch instruction is predicted to be taken based on the branch direction prediction logic. The branch predictor circuit is also configured to, responsive to determining that the first branch instruction is predicted to be taken, allocate a first least-recently-used predictor entry of the plurality of predictor entries of the linked list based on the LRU indicator. The branch predictor circuit is also configured to, further responsive to determining that the first branch instruction is predicted to be taken, store a sequential address for the first branch instruction in the link address register of the first least-recently-used predictor entry. By allocating a least-recently-used predictor entry rather than a most-recently-used predictor entry, the branch predictor circuit may decrease sensitivity to speculative corruption compared to conventional stack-based branch predictors.
In another aspect, a branch predictor circuit is provided. The branch predictor circuit comprises a means for detecting a first branch instruction corresponding to a subroutine call in an instruction stream. The branch predictor circuit further comprises a means for determining whether the first branch instruction is predicted to be taken. The branch predictor circuit also comprises a means for, responsive to determining that the first branch instruction is predicted to be taken, allocating a first least-recently-used predictor entry of a plurality of predictor entries of a linked list based on a LRU indicator indicative of relative time since last use of the plurality of predictor entries of the linked list. The branch predictor circuit additionally comprises a means for, further responsive to determining that the first branch instruction is predicted to be taken, storing a sequential address for the first branch instruction in a link address register of the first least-recently-used predictor entry.
In another aspect, a method for providing branch prediction is provided. The method comprises detecting a first branch instruction corresponding to a subroutine call in an instruction stream. The method further comprises determining whether the first branch instruction is predicted to be taken. The method also comprises, responsive to determining that the first branch instruction is predicted to be taken, allocating a first least-recently-used predictor entry of a plurality of predictor entries of a linked list based on a LRU indicator indicative of relative time since last use of the plurality of predictor entries of the linked list. The method additionally comprises, further responsive to determining that the first branch instruction is predicted to be taken, storing a sequential address for the first branch instruction in a link address register of the first least-recently-used predictor entry.
In another aspect, a non-transitory computer-readable medium is provided, having stored thereon computer executable instructions to cause a processor to detect a first branch instruction corresponding to a subroutine call in an instruction stream. The computer-executable instructions further cause the processor to determine whether the first branch instruction is predicted to be taken. The computer-executable instructions also cause the processor to, responsive to determining that the first branch instruction is predicted to be taken, allocate a first least-recently-used predictor entry of a plurality of predictor entries of a linked list based on a LRU indicator indicative of relative time since last use of the plurality of predictor entries of the linked list. The computer-executable instructions additionally cause the processor to, further responsive to determining that the first branch instruction is predicted to be taken, store a sequential address for the first branch instruction in a link address register of the first least-recently-used predictor entry.
With reference now to the drawing figures, several exemplary aspects of the present disclosure are described. The word “exemplary” is used herein to mean “serving as an example, instance, or illustration.” Any aspect described herein as “exemplary” is not necessarily to be construed as preferred or advantageous over other aspects.
Aspects disclosed in the detailed description include branch prediction based on Least-Recently-Used (LRU)-class linked list branch predictors. Related apparatus, methods, and computer-readable media are also disclosed. As used herein, “LRU-class” and “LRU indicator” refer to the use of a replacement policy (such as Least-Recently-Used or Pseudo-Least-Recently-Used, as non-limiting examples) that is premised upon allocating least-recently-used predictor entries rather than a most-recently-used predictor entry. In this regard, a branch predictor circuit is provided. The branch predictor circuit comprises branch direction prediction logic, and further comprises a linked list comprising a plurality of predictor entries, each of which comprises a link address register. The branch predictor circuit also comprises a LRU indicator indicative of relative time since last use of the plurality of predictor entries of the linked list. The branch predictor circuit is configured to detect a first branch instruction corresponding to a subroutine call in an instruction stream. The branch predictor circuit is further configured to determine whether the first branch instruction is predicted to be taken based on the branch direction prediction logic. The branch predictor circuit is also configured to, responsive to determining that the first branch instruction is predicted to be taken, allocate a first least-recently-used predictor entry of the plurality of predictor entries of the linked list based on the LRU indicator. The branch predictor circuit is also configured to, further responsive to determining that the first branch instruction is predicted to be taken, store a sequential address for the first branch instruction in the link address register of the first least-recently-used predictor entry. By allocating a least-recently-used predictor entry rather than a most-recently-used predictor entry, the branch predictor circuit may decrease sensitivity to speculative corruption compared to conventional stack-based branch predictors.
In this regard,
The computer processor 10 includes input/output circuits 14, an instruction cache 16, and a data cache 18. The computer processor 10 further comprises an execution pipeline 20, which includes a front-end circuit 22, an execution unit 24, and a completion unit 26. The computer processor 10 additionally includes registers 28, which comprise one or more general purpose registers (GPR) 30, a program counter 32, and a link register 34. In some aspects, such as those employing the ARM® ARM7™ architecture, the link register 34 is one of the GPRs 30, as shown in
In exemplary operation, the front-end circuit 22 of the execution pipeline 20 fetches instructions (not shown) from the instruction cache 16, which in some aspects may be an on chip Level 1 (L1) cache, as a non-limiting example. The fetched instructions are decoded by the front-end circuit 22 and issued to the execution unit 24. The execution unit 24 executes the issued instructions, and the completion unit 26 retires the executed instructions. In some aspects, the completion unit 26 may comprise a write-back mechanism that stores the execution results in one or more of the registers 28. It is to be understood that the execution unit 24 and/or the completion unit 26 may each comprise one or more sequential pipeline stages. It is to be further understood that instructions may be fetched and/or decoded in groups of more than one.
To improve performance, the computer processor 10 may employ branch prediction, the exemplary operation of which is now described. The front-end circuit 22 comprises one or more fetch/decode pipeline stages 36, which enable multiple instructions to be fetched and decoded concurrently. An instruction queue 38 for holding fetched instructions pending dispatch to the execution unit 24 is communicatively coupled to one or more of the fetch/decode pipeline stages 36. The instruction queue 38 is also communicatively coupled to the branch predictor circuit 12, which is configured to generate branch predictions (not shown) for conditional branch instructions that are encountered in the instruction queue 38. In the example of
A conventional branch predictor circuit (not shown) may employ a stack to track branch return addresses for branch instructions that are predicted to be taken. The conventional branch predictor circuit may record a sequential address as a branch return address when a predicted-taken branch instruction corresponding to a subroutine call is observed (e.g., by using a PUSH operation to place the sequential address onto the stack). As used herein, the “sequential address” refers to an address of a next instruction following the predicted-taken branch instruction in program order. The conventional branch predictor circuit may later restore a recorded sequential address as a target address prediction when a predicted-taken branch instruction corresponding to a subroutine return is observed (e.g., by using a POP operation to remove the sequential address from the stack).
However, because the stack effectively stores the sequential address in the most-recently-used entry in the stack, the conventional branch predictor circuit may be susceptible to corruption arising from speculative call and return branches. For example, a first predicted-taken subroutine call branch instruction to a subroutine A, results in the sequential address for subroutine A being placed in the stack. Based on the predicted execution of instructions in subroutine A, a subroutine return branch instruction for subroutine A is eventually encountered, and the sequential address for subroutine A is removed from the stack. A second subroutine call branch instruction for a subroutine B, also predicted to be taken, then causes the sequential address for subroutine B to be placed in the stack. At this point, it is determined that the execution flow within subroutine A was mispredicted, and execution is rolled back to a point before the subroutine return branch instruction for subroutine A. When the subroutine return branch instruction for subroutine A is encountered in the corrected instruction stream, the sequential address for subroutine A is no longer available, as it has been removed from the stack and replaced with the sequential address for subroutine B. Likewise, the stack may be corrupted if the first subroutine call branch instruction to subroutine B is incorrectly predicted not to be taken.
In this regard, the branch predictor circuit 12 of
To illustrate exemplary elements of the branch predictor circuit 12 of
The branch predictor circuit 12 also includes a LRU indicator 50. The LRU indicator 50 is used by the branch predictor circuit 12 to track a relative age of each of the predictor entries 46 of the linked list 44, and to allocate a least-recently-used predictor entry 46 to store a sequential address for a predicted-taken branch instruction corresponding to a subroutine call. The LRU indicator 50 may be generated and updated according to LRU replacement policies (e.g., Least-Recently-Used or Pseudo-Least-Recently-Used, as non-limiting examples) known in the art. As a non-limiting example, the LRU indicator 50 may comprise a plurality of bits 52, each of which is indicative of a relative age of one of the plurality of predictor entries 46. For instance, in some aspects using a Pseudo-Least-Recently-Used replacement policy, each of the plurality of bits 52 of the LRU indicator 50 may represent a node in a binary tree for tracking a least-recently-used predictor entry 46 in the linked list 44. The value of each of the plurality of bits 52 indicates whether the branch predictor circuit 12 should follow a left branch or a right branch of the binary tree to identify the least-recently-used predictor entry 46. To locate a least-recently-used predictor entry 46, the branch predictor circuit 12 may traverse the binary tree according to the values of the plurality of bits 52.
The branch predictor circuit 12 further includes a read pointer 54. The read pointer 54 indicates a current read position among the predictor entries 46 in the linked list 44. When a branch instruction corresponding to a subroutine return is observed by the branch predictor circuit 12, the appropriate return address for the subroutine return branch instruction may be accessed by retrieving the return address from the link address register 48 of the predictor entry 46 indicated by the read pointer 54.
Some aspects of the branch predictor circuit 12 may provide that the predictor entries 46 include restoration LRU indicators 56. As discussed in greater detail below with respect to
Referring now to
Upon allocation, the branch predictor circuit 60 stores a sequential address 82 for CALLA (referred to in this example as SEQA) in the link address register 70 corresponding to the predictor entry 68(0). The branch predictor circuit 60 also stores the current value of the read pointer 76 (i.e., 3) as the next-newest-entry pointer 74 corresponding to the predictor entry 68(0). The LRU indicator 78 is updated to a value of “1, 2, 3, 0,” indicating that the predictor entry 68(1) is now the least-recently-used entry in the linked list 66, and the predictor entry 68(0) is the most-recently-used entry. After the LRU indicator 78 is updated, the branch predictor circuit 60 stores the value of the LRU indicator 78 as the restoration LRU indicator 72 corresponding to the predictor entry 68(0). The branch predictor circuit 60 stores the current value of the read pointer 76 in the BIQ 62 as the recovery read pointer 84 for CALLA. The branch predictor circuit 60 then updates the read pointer 76 to point to the predictor entry 68(0) as the current read position for the linked list 66. These operations of the branch predictor circuit 60 may be considered analogous to a PUSH operation for a conventional stack, with the distinction that data is “pushed” into the least-recently-used entry rather than the most-recently-used entry.
Turning to
After allocation of the predictor entry 68(1), the branch predictor circuit 60 stores a sequential address 88 for CALLB (referred to in this example as SEQB) in the link address register 70 corresponding to the predictor entry 68(1). The current value of the read pointer 76 (i.e., 0) is stored as the next-newest-entry pointer 74 corresponding to the predictor entry 68(1). The LRU indicator 78 is updated to a value of “2, 3, 0, 1” indicating that the predictor entry 68(2) is now the least-recently-used entry in the linked list 66, and the predictor entry 68(1) is the most-recently-used entry. The value of the LRU indicator 78 is then stored as the restoration LRU indicator 72 corresponding to the predictor entry 68(1). The branch predictor circuit 60 stores the current value of the read pointer 76 in the BIQ 62 as the recovery read pointer 90 for CALLB, and then updates the read pointer 76 to point to the predictor entry 68(1) as the current read position for the linked list 66. Some aspects of the branch predictor circuit 60 may provide that the recovery read pointer 90 may further include an indicator (not shown) to indicate whether CALLB was detected as, e.g., a PUSH operation or a POP operation.
In
Referring now to
Upon allocation, the branch predictor circuit 60 stores a sequential address 96 for CALLC (referred to in this example as SEQC) in the link address register 70 corresponding to the predictor entry 68(2). The branch predictor circuit 60 also stores the current value of the read pointer 76 (i.e., 0) as the next-newest-entry pointer 74 corresponding to the predictor entry 68(2). The LRU indicator 78 is updated to a value of “3, 0, 1, 2,” indicating that the predictor entry 68(3) is now the least-recently-used entry in the linked list 66, and the predictor entry 68(2) is the most-recently-used entry. The branch predictor circuit 60 stores the updated value of the LRU indicator 78 as the restoration LRU indicator 72 corresponding to the predictor entry 68(2). The branch predictor circuit 60 stores the current value of the read pointer 76 in the BIQ 62 as the recovery read pointer 100 for CALLC, and then updates the read pointer 76 to point to the predictor entry 68(2) as the current read position for the linked list 66.
Turning to
To accomplish this, the branch predictor circuit 60 retrieves the recovery read pointer 90 associated with CALLB. In this example, the recovery read pointer 90 has a value of 0, indicating that the predictor entry 68(0) was the current read position within the linked list 66 prior to the misprediction of CALLB. The branch predictor circuit 60 then updates the read pointer 76 with the value of the recovery read pointer 90, and accesses the predictor entry 68(0) to retrieve the value of the restoration LRU indicator 72 corresponding to the predictor entry 68(0). The LRU indicator 78 is then updated with the value “1, 2, 3, 0,” indicating that after the predictor entry 68(0) was allocated, the predictor entry 68(1) was the least-recently-used entry in the linked list 66. At this point, the state of the branch predictor circuit 60 has been effectively reset to the state it would have been in had CALLB been correctly predicted. Processing of the instruction stream 64 then continues.
Note that in the example illustrated in
To illustrate exemplary operations for branch prediction using a LRU-class linked list branch predictor,
The branch predictor circuit 12 determines whether the first branch instruction 80 is predicted to be taken (block 104). If not, processing continues with the next instruction in the instruction stream 64 (block 106). However, if the branch predictor circuit 12 determines at block 104 that the first branch instruction 80 is predicted to be taken, the branch predictor circuit 12 allocates a first least-recently-used predictor entry 68(0) of a plurality of predictor entries 68 of a linked list 66 based on a LRU indicator 78 indicative of a relative age of each of the plurality of predictor entries 68 of the linked list 66 (block 108). As noted above, some aspects may provide that the LRU indicator 78 comprises a plurality of bits 52, and may represent nodes of a binary tree each indicating a relative age of one of the predictor entries 68. The branch predictor circuit 12 then stores a sequential address 82 for the first branch instruction 80 in a link address register 70 of the first least-recently-used predictor entry 68(0) (block 110). By allocating a least-recently-used entry rather than a most-recently-used entry, the branch predictor circuit 12 may decrease sensitivity to speculative corruption.
The branch predictor circuit 12 may update the LRU indicator 78 to represent a relative age of each of the plurality of predictor entries 68 of the linked list 66 (block 114). For example, the allocated predictor entry 68(0) may be indicated as the most-recently-used entry, while the next least-recently-used entry may be indicated by the LRU indicator 78. The branch predictor circuit 12 then stores an updated value of the LRU indicator 78 as a restoration LRU indicator 72 of the first least-recently-used predictor entry 68(0) (block 116). In some aspects, the restoration LRU indicator 72 may enable the branch predictor circuit 12 to restore a state of the branch predictor circuit 12 in the event of a mispredicted branch. The branch predictor circuit 12 stores a current value of the read pointer 76 indicative of a current read position in the linked list 66 in a branch information queue (BIQ) 62 as a recovery read pointer 84 associated with the first branch instruction 80 (block 118). The current value of the read pointer 76 may thus be available to the branch predictor circuit 12 for misprediction recovery. The branch predictor circuit 12 then updates the read pointer 76 to point to the first least-recently-used predictor entry 68(0) (block 118).
To illustrate further exemplary operations of the branch predictor circuit 12 for using the LRU-class linked list on a predicted-taken subroutine return,
The branch predictor circuit 12 then determines whether the second branch instruction 92 is predicted to be taken (block 124). If not, processing continues with the next instruction in the instruction stream 64 (block 126). However, if the branch predictor circuit 12 determines at block 124 that the second branch instruction 92 will be taken, the branch predictor circuit 12 accesses the predictor entry 68(1) indicated by the read pointer 76 among the plurality of predictor entries 68 (block 128). The branch predictor circuit 12 retrieves the sequential address 88 from the link address register 70 of the predictor entry 68(1) indicated by the read pointer 76 (block 130). The sequential address 88 may then be used as a target address for the second branch instruction 92. The branch predictor circuit 12 then updates the read pointer 76 with a value of the next-newest-entry pointer 74 of the predictor entry 68(1) indicated by the read pointer 76 (block 132).
The branch predictor circuit 12 further may access a predictor entry 68(0) indicated by the read pointer 76 among the plurality of predictor entries 68 (block 140). The branch predictor circuit 12 then updates the LRU indicator 78 to a value of the restoration LRU indicator 72 of the predictor entry 68(0) indicated by the read pointer 76 (block 142). In this manner, the branch predictor circuit 12 may be restored back to the state it would have been in had the mispredicted predicted-taken branch instruction 86 been predicted correctly. In this example, the restored state matches that the state prior to the mispredicted predicted-taken branch instruction 86.
To illustrate exemplary operations of the branch predictor circuit 12 of
In
The branch predictor circuit 12 next updates the linked list 66 to create an entry for the mispredicted predicted-not-taken branch instruction 86. The branch predictor circuit 12 allocates a second least-recently-used predictor entry 68(1) of the plurality of predictor entries 68(0)-68(3) of the linked list 66 based on the restoration LRU indicator 72 of the predictor entry 68(0) indicated by the recovery read pointer 90 (block 150). A sequential address 88 for the mispredicted predicted-not-taken branch instruction 86 is stored in the link address register 70 of the second least-recently-used predictor entry 68(1) (block 152). The branch predictor circuit 12 also updates the next-newest-entry pointer 74 of the second least-recently-used predictor entry 68(1) to a value of the recovery read pointer 90 (block 154).
The branch predictor circuit 12 then updates the read pointer 76 to point to the second least-recently-used predictor entry 68(1) (block 156). The LRU indicator 78 is updated to represent the relative age of each of the plurality of predictor entries 68(0)-68(3) of the linked list 66 (block 158). An updated value of the LRU indicator 78 is then stored as the restoration LRU indicator 72 of the second least-recently-used predictor entry 68(1) (block 160). At this point, the branch predictor circuit 12 has been restored to the state it would have been in had the mispredicted predicted-not-taken branch instruction 86 been predicted to be taken. Processing of the instruction stream 64 then continues.
Operations in
The next-newest-entry pointer 74 of the predictor entry 68(1) indicated by the recovery read pointer 98 is then accessed by the branch predictor circuit 12 (block 168). The branch predictor circuit 12 then updates the read pointer 76 to a value of the next-newest-entry pointer 74 of the predictor entry 68(1) indicated by the recovery read pointer 98 (block 170). To restore the LRU indicator 78, the branch predictor circuit 12 accesses a next-newest predictor entry 68(0) indicated by the read pointer 76 among the plurality of predictor entries 68(0)-68(3) (block 172). The LRU indicator 78 is then updated with a value of the restoration LRU indicator 72 of the next-newest predictor entry 68(0) (block 174).
Branch prediction using a LRU-class linked list branch predictor according to aspects disclosed herein may be provided in or integrated into any processor-based device. Examples, without limitation, include a set top box, an entertainment unit, a navigation device, a communications device, a fixed location data unit, a mobile location data unit, a mobile phone, a cellular phone, a computer, a portable computer, a desktop computer, a personal digital assistant (PDA), a monitor, a computer monitor, a television, a tuner, a radio, a satellite radio, a music player, a digital music player, a portable music player, a digital video player, a video player, a digital video disc (DVD) player, and a portable digital video player.
In this regard,
Other master and slave devices can be connected to the system bus 184. As illustrated in
The CPU(s) 178 may also be configured to access the display controller(s) 196 over the system bus 184 to control information sent to one or more displays 202. The display controller(s) 196 sends information to the display(s) 202 to be displayed via one or more video processors 204, which process the information to be displayed into a format suitable for the display(s) 202. The display(s) 202 can include any type of display, including but not limited to a cathode ray tube (CRT), a liquid crystal display (LCD), a plasma display, etc.
Those of skill in the art will further appreciate that the various illustrative logical blocks, modules, circuits, and algorithms described in connection with the aspects disclosed herein may be implemented as electronic hardware, instructions stored in memory or in another computer-readable medium and executed by a processor or other processing device, or combinations of both. The master and slave devices described herein may be employed in any circuit, hardware component, integrated circuit (IC), or IC chip, as examples. Memory disclosed herein may be any type and size of memory and may be configured to store any type of information desired. To clearly illustrate this interchangeability, various illustrative components, blocks, modules, circuits, and steps have been described above generally in terms of their functionality. How such functionality is implemented depends upon the particular application, design choices, and/or design constraints imposed on the overall system. Skilled artisans may implement the described functionality in varying ways for each particular application, but such implementation decisions should not be interpreted as causing a departure from the scope of the present disclosure.
The various illustrative logical blocks, modules, and circuits described in connection with the aspects disclosed herein may be implemented or performed with a processor, a Digital Signal Processor (DSP), an Application Specific Integrated Circuit (ASIC), a Field Programmable Gate Array (FPGA) or other programmable logic device, discrete gate or transistor logic, discrete hardware components, or any combination thereof designed to perform the functions described herein. A processor may be a microprocessor, but in the alternative, the processor may be any conventional processor, controller, microcontroller, or state machine. A processor may also be implemented as a combination of computing devices, e.g., a combination of a DSP and a microprocessor, a plurality of microprocessors, one or more microprocessors in conjunction with a DSP core, or any other such configuration.
The aspects disclosed herein may be embodied in hardware and in instructions that are stored in hardware, and may reside, for example, in Random Access Memory (RAM), flash memory, Read Only Memory (ROM), Electrically Programmable ROM (EPROM), Electrically Erasable Programmable ROM (EEPROM), registers, a hard disk, a removable disk, a CD-ROM, or any other form of computer readable medium known in the art. An exemplary storage medium is coupled to the processor such that the processor can read information from, and write information to, the storage medium. In the alternative, the storage medium may be integral to the processor. The processor and the storage medium may reside in an ASIC. The ASIC may reside in a remote station. In the alternative, the processor and the storage medium may reside as discrete components in a remote station, base station, or server.
It is also noted that the operational steps described in any of the exemplary aspects herein are described to provide examples and discussion. The operations described may be performed in numerous different sequences other than the illustrated sequences. Furthermore, operations described in a single operational step may actually be performed in a number of different steps. Additionally, one or more operational steps discussed in the exemplary aspects may be combined. It is to be understood that the operational steps illustrated in the flow chart diagrams may be subject to numerous different modifications as will be readily apparent to one of skill in the art. Those of skill in the art will also understand that information and signals may be represented using any of a variety of different technologies and techniques. For example, data, instructions, commands, information, signals, bits, symbols, and chips that may be referenced throughout the above description may be represented by voltages, currents, electromagnetic waves, magnetic fields or particles, optical fields or particles, or any combination thereof.
The previous description of the disclosure is provided to enable any person skilled in the art to make or use the disclosure. Various modifications to the disclosure will be readily apparent to those skilled in the art, and the generic principles defined herein may be applied to other variations without departing from the spirit or scope of the disclosure. Thus, the disclosure is not intended to be limited to the examples and designs described herein, but is to be accorded the widest scope consistent with the principles and novel features disclosed herein.
The present application claims priority to U.S. Provisional Patent Application Ser. No. 62/038,926 filed on Aug. 19, 2014 and entitled “BRANCH PREDICTION USING PSEUDO-LEAST-RECENTLY-USED (PLRU)-BASED LINKED LIST BRANCH PREDICTORS, AND RELATED CIRCUITS, METHODS, AND COMPUTER-READABLE MEDIA,” which is incorporated herein by reference in its entirety.
Number | Date | Country | |
---|---|---|---|
62038926 | Aug 2014 | US |