Interference in a branch history table of a microprocessor is reduced by
methods and apparatus which predict the outcome of branch instructions
(taken or not taken) through a combination of static and dynamic
prediction techniques. Static prediction information (e.g., a compiler
hint) may be stored in instruction memory, and dynamic prediction
information is stored in a branch history table. A branch prediction
results from an exclusive OR of static and dynamic prediction information.
After execution of a branch instruction, an indication as to whether a
branch was taken or not taken is exclusively ORed with the static
prediction information for the branch instruction, and the result of this
exclusive OR is used to update an appropriate entry in the branch history
table. Using the methods and apparatus disclosed herein, two well-behaved
branches may share an entry in a branch history table, yet not interfere
with one another (even when the two well-behaved branches include one
which is mostly taken, and one which is mostly not taken).
L'interférence dans une table d'histoire de branche d'un microprocesseur est réduite par les méthodes et les appareils qui prévoient les résultats des instructions de branchement (prises ou non prises) par une combinaison des techniques statiques et dynamiques de prévision. L'information statique de prévision (par exemple, un conseil de compilateur) peut être stockée dans la mémoire d'instruction, et l'information dynamique de prévision est stockée dans une table d'histoire de branche. Une prévision de branche résulte de l'information exclusive OU statique et dynamique de prévision. Après exécution d'une instruction de branchement, une indication de savoir si une branche a été prise ou non pris est exclusivement ORed avec l'information statique de prévision pour l'instruction de branchement, et le résultat de cette exclusivité OU est employée pour mettre à jour une entrée appropriée dans la table d'histoire de branche. En utilisant les méthodes et l'appareil a révélé ci-dessus, deux branches polies peuvent partager une entrée dans une table d'histoire de branche, pourtant ne pas interférer entre eux (même lorsque les deux branches polies incluent un qui est la plupart du temps pris, et une qui ne sont pas la plupart du temps prises).