Lines Matching refs:bi

54                            TAGEBase::BranchInfo* bi)
56 if (bi->hitBank > 0) {
57 if (abs (2 * gtable[bi->hitBank][bi->hitBankIndex].ctr + 1) == 1) {
58 if (bi->longestMatchPred != taken) {
60 if (bi->altBank > 0) {
61 ctrUpdate(gtable[bi->altBank][bi->altBankIndex].ctr, taken,
64 if (bi->altBank == 0){
65 baseUpdate(branch_pc, taken, bi);
70 ctrUpdate(gtable[bi->hitBank][bi->hitBankIndex].ctr, taken,
74 if (abs (2 * gtable[bi->hitBank][bi->hitBankIndex].ctr + 1) == 1) {
75 gtable[bi->hitBank][bi->hitBankIndex].u = 0;
78 baseUpdate(branch_pc, taken, bi);
81 if ((bi->longestMatchPred != bi->altTaken) &&
82 (bi->longestMatchPred == taken) &&
83 (gtable[bi->hitBank][bi->hitBankIndex].u < (1 << tagTableUBits) -1)) {
84 gtable[bi->hitBank][bi->hitBankIndex].u++;
90 TAGEBase::BranchInfo* bi, int nrand)
101 int dep = bi->hitBank + a;
109 if (gtable[i][bi->tableIndices[i]].u == 0) {
110 gtable[i][bi->tableIndices[i]].tag = bi->tableTags[i];
111 gtable[i][bi->tableIndices[i]].ctr = taken ? 0 : -1;
169 MPP_TAGE::getUseAltIdx(TAGEBase::BranchInfo* bi, Addr branch_pc)
173 return 2 * ((hpc & ((numUseAltOnNa/2)-1)) ^ bi->longestMatchPred) +
174 ((bi->hitBank > (nHistoryTables / 3)) ? 1 : 0);
232 MPP_TAGE::isHighConfidence(TAGEBase::BranchInfo *bi) const
234 if (bi->hitBank > 0) {
235 return (abs(2 * gtable[bi->hitBank][bi->hitBankIndex].ctr + 1)) >=
238 int bim = (btablePrediction[bi->bimodalIndex] << 1)
239 + btableHysteresis[bi->bimodalIndex >> logRatioBiModalHystEntries];
299 StatisticalCorrector::BranchInfo* bi, bool bias) const
302 return ((truncated_pc << 1) + bi->predBeforeSC) & ((1 << logBias) - 1);
307 StatisticalCorrector::BranchInfo* bi) const
310 + bi->predBeforeSC) & ((1 << logBias) - 1);
315 StatisticalCorrector::BranchInfo* bi, int hitBank, int altBank) const
336 StatisticalCorrector::BranchInfo* bi)
349 bool cond_branch, StatisticalCorrector::BranchInfo* bi,
357 bi->predBeforeSC = prev_pred_taken;
361 getBiasLSUM(branch_pc, bi, lsum);
363 int thres = gPredictions(tid, branch_pc, bi, lsum, phist);
366 bi->lsum = lsum;
367 bi->thres = thres;
368 bi->scPred = (lsum >= 0);
370 if (pred_taken != bi->scPred) {
371 pred_taken = bi->scPred;
373 if (bi->highConf /* comes from tage prediction */) {
375 pred_taken = (firstH < 0) ? bi->scPred : prev_pred_taken;
377 pred_taken = (secondH < 0) ? bi->scPred : prev_pred_taken;
379 pred_taken = (thirdH < 0) ? bi->scPred : prev_pred_taken;
411 MultiperspectivePerceptronTAGE::getIndex(ThreadID tid, MPPTAGEBranchInfo &bi,
415 unsigned int g = spec.getHash(tid, bi.getPC(), bi.getPC() >> 2, index);
419 h ^= (bi.getPC() ^ (bi.getPC() >> 2));
436 MPPTAGEBranchInfo &bi) const
441 threadData[tid]->tables[i][getIndex(tid, bi, *specs[i], i)];
448 MPPTAGEBranchInfo &bi,
453 unsigned int idx = getIndex(tid, bi, *specs[i], i);
472 MPPTAGEBranchInfo &bi,
475 unsigned int hpc = (bi.getPC() ^ (bi.getPC() >> 2));
476 unsigned int pc = bi.getPC();
530 MPPTAGEBranchInfo *bi =
533 bp_history = (void *)bi;
534 bool pred_taken = tage->tagePredict(tid, instPC, true, bi->tageBranchInfo);
537 bi->lpBranchInfo, pred_taken, instShiftAmt);
539 bi->scBranchInfo->highConf = tage->isHighConfidence(bi->tageBranchInfo);
545 init_lsum += computePartialSum(tid, *bi);
548 bi->scBranchInfo, pred_taken, false /* bias_bit: unused */,
552 bi->predictedTaken = pred_taken;
553 bi->lpBranchInfo->predTaken = pred_taken;
560 bool taken, StatisticalCorrector::BranchInfo *bi, Addr corrTarget,
563 bool scPred = (bi->lsum >= 0);
565 if (bi->predBeforeSC != scPred) {
566 if (abs(bi->lsum) < bi->thres) {
567 if (bi->highConf) {
568 if (abs(bi->lsum) < bi->thres / 3) {
569 ctrUpdate(firstH, (bi->predBeforeSC == taken),
571 } else if (abs(bi->lsum) < 2 * bi->thres / 3) {
572 ctrUpdate(secondH, (bi->predBeforeSC == taken),
574 } else if (abs(bi->lsum) < bi->thres) {
575 ctrUpdate(thirdH, (bi->predBeforeSC == taken),
582 if ((scPred != taken) || ((abs(bi->lsum) < bi->thres))) {
589 unsigned indBias = getIndBias(branch_pc, bi, false);
590 unsigned indBiasSK = getIndBiasSK(branch_pc, bi);
595 gUpdates(tid, branch_pc, taken, bi, phist);
606 MPPTAGEBranchInfo *bi = static_cast<MPPTAGEBranchInfo*>(bp_history);
614 tage->squash(tid, taken, bi->tageBranchInfo, corrTarget);
615 if (bi->tageBranchInfo->condBranch) {
616 loopPredictor->squashLoop(bi->lpBranchInfo);
622 if (bi->isUnconditional()) {
624 bi->scBranchInfo, corrTarget);
625 tage->updateHistories(tid, instPC, taken, bi->tageBranchInfo, false,
628 tage->updateStats(taken, bi->tageBranchInfo);
629 loopPredictor->updateStats(taken, bi->lpBranchInfo);
630 statisticalCorrector->updateStats(taken, bi->scBranchInfo);
633 bi->tageBranchInfo->tagePred, bi->lpBranchInfo, instShiftAmt);
635 bool scPred = (bi->scBranchInfo->lsum >= 0);
637 ((abs(bi->scBranchInfo->lsum) < bi->scBranchInfo->thres))) {
638 updatePartial(tid, *bi, taken);
641 bi->scBranchInfo, corrTarget, false /* bias_bit: unused */,
645 tage->condBranchUpdate(tid, instPC, taken, bi->tageBranchInfo,
647 bi->predictedTaken, true);
649 updateHistories(tid, *bi, taken);
672 bi->scBranchInfo, corrTarget);
674 tage->updateHistories(tid, instPC, taken, bi->tageBranchInfo,
678 delete bi;
685 MPPTAGEBranchInfo *bi =
688 bp_history = (void *) bi;
695 MPPTAGEBranchInfo *bi = static_cast<MPPTAGEBranchInfo*>(bp_history);
696 delete bi;