2bit_local.hh revision 1684
17375Sgblack@eecs.umich.edu#ifndef __CPU_BETA_CPU_2BIT_LOCAL_PRED_HH__
27375Sgblack@eecs.umich.edu#define __CPU_BETA_CPU_2BIT_LOCAL_PRED_HH__
37375Sgblack@eecs.umich.edu
47375Sgblack@eecs.umich.edu// For Addr type.
57375Sgblack@eecs.umich.edu#include "arch/alpha/isa_traits.hh"
67375Sgblack@eecs.umich.edu#include "cpu/beta_cpu/sat_counter.hh"
77375Sgblack@eecs.umich.edu
87375Sgblack@eecs.umich.educlass DefaultBP
97375Sgblack@eecs.umich.edu{
107375Sgblack@eecs.umich.edu  public:
117375Sgblack@eecs.umich.edu    /**
127375Sgblack@eecs.umich.edu     * Default branch predictor constructor.
137375Sgblack@eecs.umich.edu     */
147375Sgblack@eecs.umich.edu    DefaultBP(unsigned localPredictorSize, unsigned localCtrBits,
157375Sgblack@eecs.umich.edu              unsigned instShiftAmt);
167375Sgblack@eecs.umich.edu
177375Sgblack@eecs.umich.edu    /**
187375Sgblack@eecs.umich.edu     * Looks up the given address in the branch predictor and returns
197375Sgblack@eecs.umich.edu     * a true/false value as to whether it is taken.
207375Sgblack@eecs.umich.edu     * @param branch_addr The address of the branch to look up.
217375Sgblack@eecs.umich.edu     * @return Whether or not the branch is taken.
227375Sgblack@eecs.umich.edu     */
237375Sgblack@eecs.umich.edu    bool lookup(Addr &branch_addr);
247375Sgblack@eecs.umich.edu
257375Sgblack@eecs.umich.edu    /**
267375Sgblack@eecs.umich.edu     * Updates the branch predictor with the actual result of a branch.
277375Sgblack@eecs.umich.edu     * @param branch_addr The address of the branch to update.
287375Sgblack@eecs.umich.edu     * @param taken Whether or not the branch was taken.
297375Sgblack@eecs.umich.edu     */
307375Sgblack@eecs.umich.edu    void update(Addr &branch_addr, bool taken);
317375Sgblack@eecs.umich.edu
327375Sgblack@eecs.umich.edu  private:
337375Sgblack@eecs.umich.edu
347375Sgblack@eecs.umich.edu    /** Returns the taken/not taken prediction given the value of the
357375Sgblack@eecs.umich.edu     *  counter.
367375Sgblack@eecs.umich.edu     */
377375Sgblack@eecs.umich.edu    inline bool getPrediction(uint8_t &count);
387375Sgblack@eecs.umich.edu
397375Sgblack@eecs.umich.edu    /** Calculates the local index based on the PC. */
407375Sgblack@eecs.umich.edu    inline unsigned getLocalIndex(Addr &PC);
417375Sgblack@eecs.umich.edu
427375Sgblack@eecs.umich.edu    /** Array of counters that make up the local predictor. */
437375Sgblack@eecs.umich.edu    SatCounter *localCtrs;
447378Sgblack@eecs.umich.edu
457378Sgblack@eecs.umich.edu    /** Size of the local predictor. */
467382Sgblack@eecs.umich.edu    unsigned localPredictorSize;
477375Sgblack@eecs.umich.edu
487384Sgblack@eecs.umich.edu    /** Number of bits of the local predictor's counters. */
497384Sgblack@eecs.umich.edu    unsigned localCtrBits;
507384Sgblack@eecs.umich.edu
517375Sgblack@eecs.umich.edu    /** Number of bits to shift the PC when calculating index. */
527375Sgblack@eecs.umich.edu    unsigned instShiftAmt;
537375Sgblack@eecs.umich.edu
547375Sgblack@eecs.umich.edu    /** Mask to get index bits. */
557375Sgblack@eecs.umich.edu    unsigned indexMask;
567375Sgblack@eecs.umich.edu};
577375Sgblack@eecs.umich.edu
587375Sgblack@eecs.umich.edu#endif // __CPU_BETA_CPU_2BIT_LOCAL_PRED_HH__
597375Sgblack@eecs.umich.edu