1/* 2 * Copyright (c) 2014 The University of Wisconsin 3 * 4 * Copyright (c) 2006 INRIA (Institut National de Recherche en 5 * Informatique et en Automatique / French National Research Institute 6 * for Computer Science and Applied Mathematics) 7 * 8 * All rights reserved. --- 53 unchanged lines hidden (view full) --- 62class LTAGE: public TAGE 63{ 64 public: 65 LTAGE(const LTAGEParams *params); 66 67 // Base class methods. 68 void squash(ThreadID tid, void *bp_history) override; 69 |
70 void regStats() override; 71 |
72 private: 73 // Prediction Structures 74 // Loop Predictor Entry 75 struct LoopEntry 76 { 77 uint16_t numIter; 78 uint16_t currentIter; 79 uint16_t currentIterSpec; 80 uint8_t confidence; 81 uint16_t tag; 82 uint8_t age; 83 bool dir; 84 85 LoopEntry() : numIter(0), currentIter(0), currentIterSpec(0), 86 confidence(0), tag(0), age(0), dir(0) { } 87 }; 88 |
89 // more provider types 90 enum { 91 LOOP = LAST_TAGE_PROVIDER_TYPE + 1 92 }; 93 |
94 // Primary branch history entry 95 struct LTageBranchInfo : public TageBranchInfo 96 { 97 uint16_t loopTag; 98 uint16_t currentIter; 99 100 bool loopPred; 101 bool loopPredValid; --- 77 unchanged lines hidden (view full) --- 179 * @param bp_history Wrapping pointer to TageBranchInfo (to allow 180 * storing derived class prediction information in the 181 * base class). 182 * @post bp_history points to valid memory. 183 */ 184 void squash( 185 ThreadID tid, bool taken, void *bp_history) override; 186 |
187 /** 188 * Update the stats 189 * @param taken Actual branch outcome 190 * @param bi Pointer to information on the prediction 191 * recorded at prediction time. 192 */ 193 void updateStats(bool taken, TageBranchInfo* bi) override; 194 |
195 const unsigned logSizeLoopPred; 196 const unsigned loopTableAgeBits; 197 const unsigned loopTableConfidenceBits; 198 const unsigned loopTableTagBits; 199 const unsigned loopTableIterBits; 200 const unsigned logLoopTableAssoc; 201 const uint8_t confidenceThreshold; 202 const uint16_t loopTagMask; 203 const uint16_t loopNumIterMask; 204 205 LoopEntry *ltable; 206 207 int8_t loopUseCounter; 208 unsigned withLoopBits; |
209 210 // stats 211 Stats::Scalar loopPredictorCorrect; 212 Stats::Scalar loopPredictorWrong; |
213}; 214 215#endif // __CPU_PRED_LTAGE |