In a microprocessor, a method for processing instructions in a program including a branch instruction having a condition to be resolved, a first code section to be processed if the condition is resolved to be met, and a second code section to be processed if the condition is resolved to be not met, the method comprising the steps of:
- fetching the branch instruction;
- predicting whether the condition will be resolved to be met;
- determining whether the resolution of the condition is unlikely to be predicted accurately;
- and
- forking the program flow to speculatively process instructions from both the first and second code sections if the resolution of the condition is determined to be unlikely to be predicted accurately.