OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_43/] [or1ksim/] [bpb/] [branch_predict.c] - Diff between revs 997 and 1243

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 997 Rev 1243
Line 103... Line 103...
                if (bpb[entry].way[i].addr == addr)
                if (bpb[entry].way[i].addr == addr)
                        way = i;
                        way = i;
 
 
        /* Did we find our cached branch? */
        /* Did we find our cached branch? */
        if (way >= 0) { /* Yes, we did. */
        if (way >= 0) { /* Yes, we did. */
                mstats.bpb.hit++;
                or1k_mstats.bpb.hit++;
 
 
                for (i = 0; i < BPB_WAYS; i++)
                for (i = 0; i < BPB_WAYS; i++)
                        if (bpb[entry].way[i].lru)
                        if (bpb[entry].way[i].lru)
                                bpb[entry].way[i].lru--;
                                bpb[entry].way[i].lru--;
                bpb[entry].way[way].lru = BPB_USTATES - 1;
                bpb[entry].way[way].lru = BPB_USTATES - 1;
 
 
                if (bpb[entry].way[way].taken / (BPB_PSTATES / 2) == taken)
                if (bpb[entry].way[way].taken / (BPB_PSTATES / 2) == taken)
                        mstats.bpb.correct++;
                        or1k_mstats.bpb.correct++;
                else
                else
                        mstats.bpb.incorrect++;
                        or1k_mstats.bpb.incorrect++;
 
 
                if (taken && (bpb[entry].way[way].taken < BPB_PSTATES - 1))
                if (taken && (bpb[entry].way[way].taken < BPB_PSTATES - 1))
                        bpb[entry].way[way].taken++;
                        bpb[entry].way[way].taken++;
                else
                else
                if (!taken && (bpb[entry].way[way].taken))
                if (!taken && (bpb[entry].way[way].taken))
Line 125... Line 125...
        }
        }
        else {  /* No, we didn't. */
        else {  /* No, we didn't. */
                int minlru = BPB_USTATES - 1;
                int minlru = BPB_USTATES - 1;
                int minway = 0;
                int minway = 0;
 
 
                mstats.bpb.miss++;
                or1k_mstats.bpb.miss++;
 
 
                for (i = 0; i < BPB_WAYS; i++)
                for (i = 0; i < BPB_WAYS; i++)
                        if (bpb[entry].way[i].lru < minlru)
                        if (bpb[entry].way[i].lru < minlru)
                                minway = i;
                                minway = i;
 
 
Line 204... Line 204...
                if (btic[entry].way[i].addr == targetaddr)
                if (btic[entry].way[i].addr == targetaddr)
                        way = i;
                        way = i;
 
 
        /* Did we find our cached branch? */
        /* Did we find our cached branch? */
        if (way >= 0) { /* Yes, we did. */
        if (way >= 0) { /* Yes, we did. */
                mstats.btic.hit++;
                or1k_mstats.btic.hit++;
 
 
                for (i = 0; i < BTIC_WAYS; i++)
                for (i = 0; i < BTIC_WAYS; i++)
                        if (btic[entry].way[i].lru)
                        if (btic[entry].way[i].lru)
                                btic[entry].way[i].lru--;
                                btic[entry].way[i].lru--;
                btic[entry].way[way].lru = BTIC_USTATES - 1;
                btic[entry].way[way].lru = BTIC_USTATES - 1;
        }
        }
        else {  /* No, we didn't. */
        else {  /* No, we didn't. */
                int minlru = BTIC_USTATES - 1;
                int minlru = BTIC_USTATES - 1;
                int minway = 0;
                int minway = 0;
 
 
                mstats.btic.miss++;
                or1k_mstats.btic.miss++;
 
 
                for (i = 0; i < BTIC_WAYS; i++)
                for (i = 0; i < BTIC_WAYS; i++)
                        if (btic[entry].way[i].lru < minlru)
                        if (btic[entry].way[i].lru < minlru)
                                minway = i;
                                minway = i;
 
 

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.