1. A method for performing branch prediction by a processor having an instruction pipeline, comprising: speculatively updating a fetch group history of a global history register, the global history register having the fetch group history and a branch history, wherein the fetch group history for each fetch group includes a single one-bit value indicating whether the fetch group includes a taken branch, and a branch counter, associated with each fetch group and separate from the fetch group history, stores the number of branches in each fetch group; fetching a fetch group of instructions; assigning a global history vector to the instructions of the fetch group, wherein: the global history vector is a value of the global history register when the instructions are fetched; predicting a direction of any branches in the fetch group using the global history vector and a predictor to create branch predictions; evaluating whether the fetch group contains a predicted taken branch; if the fetch group contains a predicted taken branch: flushing subsequently fetched instructions in the instruction pipeline following the predicted taken branch; repairing the global history register to the global history vector of the predicted taken branch; updating the fetch group history of the global history register based on the branch predictions; and if the fetch group does not contain a predicted taken branch: updating the branch history of the global history register with a branch history value for each branch in the fetch group based on the branch predictions by using a branch counter associated with the fetch group and the single one-bit value from the fetch group history associated with the fetch group to insert a single one-bit value for each branch of the fetch group as the branch history.