2bit_local.hh revision 1684
110037SARM gem5 Developers#ifndef __CPU_BETA_CPU_2BIT_LOCAL_PRED_HH__ 210037SARM gem5 Developers#define __CPU_BETA_CPU_2BIT_LOCAL_PRED_HH__ 314058Sgiacomo.travaglini@arm.com 410037SARM gem5 Developers// For Addr type. 510037SARM gem5 Developers#include "arch/alpha/isa_traits.hh" 610037SARM gem5 Developers#include "cpu/beta_cpu/sat_counter.hh" 710037SARM gem5 Developers 810037SARM gem5 Developersclass DefaultBP 910037SARM gem5 Developers{ 1010037SARM gem5 Developers public: 1110037SARM gem5 Developers /** 1210037SARM gem5 Developers * Default branch predictor constructor. 1310037SARM gem5 Developers */ 1410037SARM gem5 Developers DefaultBP(unsigned localPredictorSize, unsigned localCtrBits, 1510037SARM gem5 Developers unsigned instShiftAmt); 1610037SARM gem5 Developers 1710037SARM gem5 Developers /** 1810037SARM gem5 Developers * Looks up the given address in the branch predictor and returns 1910037SARM gem5 Developers * a true/false value as to whether it is taken. 2010037SARM gem5 Developers * @param branch_addr The address of the branch to look up. 2110037SARM gem5 Developers * @return Whether or not the branch is taken. 2210037SARM gem5 Developers */ 2310037SARM gem5 Developers bool lookup(Addr &branch_addr); 2410037SARM gem5 Developers 2510037SARM gem5 Developers /** 2610037SARM gem5 Developers * Updates the branch predictor with the actual result of a branch. 2710037SARM gem5 Developers * @param branch_addr The address of the branch to update. 2810037SARM gem5 Developers * @param taken Whether or not the branch was taken. 2910037SARM gem5 Developers */ 3010037SARM gem5 Developers void update(Addr &branch_addr, bool taken); 3110037SARM gem5 Developers 3210037SARM gem5 Developers private: 3310037SARM gem5 Developers 3410037SARM gem5 Developers /** Returns the taken/not taken prediction given the value of the 3510037SARM gem5 Developers * counter. 3610037SARM gem5 Developers */ 3710037SARM gem5 Developers inline bool getPrediction(uint8_t &count); 3810037SARM gem5 Developers 3910037SARM gem5 Developers /** Calculates the local index based on the PC. */ 4010037SARM gem5 Developers inline unsigned getLocalIndex(Addr &PC); 4110037SARM gem5 Developers 4210037SARM gem5 Developers /** Array of counters that make up the local predictor. */ 4310037SARM gem5 Developers SatCounter *localCtrs; 4410474Sandreas.hansson@arm.com 4510037SARM gem5 Developers /** Size of the local predictor. */ 4610037SARM gem5 Developers unsigned localPredictorSize; 4710037SARM gem5 Developers 4810037SARM gem5 Developers /** Number of bits of the local predictor's counters. */ 4910037SARM gem5 Developers unsigned localCtrBits; 5012234Sgabeblack@google.com 5110037SARM gem5 Developers /** Number of bits to shift the PC when calculating index. */ 5210037SARM gem5 Developers unsigned instShiftAmt; 5310037SARM gem5 Developers 5410037SARM gem5 Developers /** Mask to get index bits. */ 5510037SARM gem5 Developers unsigned indexMask; 5610037SARM gem5 Developers}; 5710037SARM gem5 Developers 5810037SARM gem5 Developers#endif // __CPU_BETA_CPU_2BIT_LOCAL_PRED_HH__ 5910037SARM gem5 Developers