Added counting code for return instructions

This commit is contained in:
Franz Fuchs
2021-06-22 18:01:32 +01:00
parent 8f45238b5d
commit 76cdc13a50
3 changed files with 43 additions and 0 deletions

View File

@@ -309,6 +309,10 @@ module mkCore#(CoreId coreId)(Core);
for(Integer i = 0; i < valueof(SupSize); i=i+1) begin
bags[i] <- mkSmallBag;
end
Vector#(SupSize, Bag#(16, CapMem, CapMem)) returnBags;
for(Integer i = 0; i < valueof(SupSize); i=i+1) begin
returnBags[i] <- mkSmallBag;
end
// We have two scoreboards: one conservative and other aggressive
// - Aggressive sb is checked at rename stage, so inst after rename may be issued early
@@ -436,6 +440,13 @@ module mkCore#(CoreId coreId)(Core);
end
return ret;
endmethod
method Bool checkReturnTarget(CapMem ppc);
Bool ret = False;
for(Integer j = 0; j < valueof(SupSize); j=j+1) begin
ret = ret || returnBags[j].isMember(ppc).v;
end
return ret;
endmethod
endinterface);
aluExe[i] <- mkAluExePipeline(aluExeInput);
// truly call fetch method to train branch predictor
@@ -696,6 +707,14 @@ module mkCore#(CoreId coreId)(Core);
end
endmethod
method Action updateReturnTargets(Vector#(SupSize, Maybe#(CapMem)) returnTargets);
for(Integer i = 0; i < valueof(SupSize); i=i+1) begin
if(returnTargets[i] matches tagged Valid .retTar) begin
returnBags[i].insert(retTar, retTar);
end
end
endmethod
`ifdef INCLUDE_TANDEM_VERIF
interface v_to_TV = map (toPut, v_f_to_TV);
`endif