Allocate the correct number of global registers

Fix fault formating and code for traps
fix a couple of bugs in the decoder
Cleanup/fix page table entry code
Implement more mmaped iprs, fix numbered tlb insertion code, add function to dump tlb contents
Don't panic if we differ from legion on a tcc instruction because of where legion prints its data and where we print our data

src/arch/sparc/faults.cc:
    Fix fault formating and code for traps
src/arch/sparc/intregfile.hh:
    allocate the correct number of global registers
src/arch/sparc/isa/decoder.isa:
    fix a couple of bugs in the decoder: wrasi should write asi not ccr, done/retry should get hpstate from htstate
src/arch/sparc/pagetable.hh:
    cleanup/fix page table code
src/arch/sparc/tlb.cc:
    implement more mmaped iprs, fix numbered insertion  code, add function to dump tlb contents
src/arch/sparc/tlb.hh:
    add functions to write TagAccess register on tlb miss and to dump all tlb entries for debugging
src/cpu/exetrace.cc:
    dump tlb entries on error, don't consider differences the cycle we take a trap to be bad.

--HG--
extra : convert_revision : d7d771900f6f25219f3dc6a6e51986d342a32e03
This commit is contained in:
Ali Saidi
2006-12-09 18:00:40 -05:00
parent ed22eb781d
commit 81a00fdcfe
7 changed files with 194 additions and 89 deletions

View File

@@ -393,12 +393,13 @@ Trace::InstRecord::dump(ostream &outs)
if(shared_data->cleanwin != thread->readMiscReg(MISCREG_CLEANWIN))
diffCleanwin = true;
if (diffPC || diffCC || diffInst || diffRegs || diffTpc ||
if ((diffPC || diffCC || diffInst || diffRegs || diffTpc ||
diffTnpc || diffTstate || diffTt || diffHpstate ||
diffHtstate || diffHtba || diffPstate || diffY ||
diffCcr || diffTl || diffGl || diffAsi || diffPil ||
diffCwp || diffCansave || diffCanrestore ||
diffOtherwin || diffCleanwin) {
diffOtherwin || diffCleanwin)
&& !((staticInst->machInst & 0xE1F80000) == 0xE1F80000)) {
outs << "Differences found between M5 and Legion:";
if (diffPC)
outs << " [PC]";
@@ -570,6 +571,9 @@ Trace::InstRecord::dump(ostream &outs)
<< endl;*/
}
}
thread->getITBPtr()->dumpAll();
thread->getDTBPtr()->dumpAll();
diffcount++;
if (diffcount > 3)
fatal("Differences found between Legion and M5\n");