Fix byte-enable merging tag logic in the cache (with help from

Alexandre).
Also adjust priority in CCall exceptions.
This commit is contained in:
jon
2020-05-12 12:24:15 +01:00
parent 26919154db
commit 854151978e
5 changed files with 15 additions and 18 deletions

View File

@@ -118,20 +118,10 @@ function LineInstOffset getLineInstOffset(Addr a);
endfunction
function Line getUpdatedLine(Line curLine, LineByteEn wrBE, Line wrLine);
// handle data merge
Vector#(LineSzBytes, Bit#(8)) newDataVec = mergeDataBE(curLine.data, wrLine.data, wrBE);
// handle tag merge
Vector#(CLineNumMemTaggedData, MemTag) curTagVec = curLine.tag;
Vector#(CLineNumMemTaggedData, MemTag) wrTagVec = wrLine.tag;
function MemTag getNewTag(Integer i);
let res = curTagVec[i];
if (pack(wrBE[i]) == ~0) res = wrTagVec[i];
return res;
endfunction
Vector#(CLineNumMemTaggedData, MemTag) newTagVec = genWith(getNewTag);
// compose updated line
return CLine { tag: newTagVec
, data: unpack(pack(newDataVec)) };
let curLineMem = clineToMemTaggedDataVector(curLine);
let wrLineMem = clineToMemTaggedDataVector(wrLine);
let newLineMem = zipWith3(mergeMemTaggedDataBE, curLineMem, wrLineMem, wrBE);
return memTaggedDataVectorToCline(newLineMem);
endfunction
// calculate tag