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