Clean up a few spots where we weren't handling of misspeculation correctly.

arch/alpha/ev5.cc:
    Don't call kernelStats.hwrei() or system->breakpoint() on misspeculated paths.
arch/alpha/isa_desc:
    Don't write reegs.intrflag, do Annotate::Callpal, or call xc->syscall
    on misspeculated paths.

--HG--
extra : convert_revision : e73b96fbe4ac5be85fb20aa218fd05fd56d5b2f3
This commit is contained in:
Steve Reinhardt 2003-10-28 09:09:45 -08:00
parent cec7f73abf
commit 1820520697
2 changed files with 17 additions and 8 deletions

View file

@ -168,11 +168,11 @@ ExecContext::hwrei()
if (!PC_PAL(regs.pc)) if (!PC_PAL(regs.pc))
return Unimplemented_Opcode_Fault; return Unimplemented_Opcode_Fault;
kernelStats.hwrei(); setNextPC(ipr[AlphaISA::IPR_EXC_ADDR]);
regs.npc = ipr[AlphaISA::IPR_EXC_ADDR];
if (!misspeculating()) { if (!misspeculating()) {
kernelStats.hwrei();
if ((ipr[AlphaISA::IPR_EXC_ADDR] & 1) == 0) if ((ipr[AlphaISA::IPR_EXC_ADDR] & 1) == 0)
AlphaISA::swap_palshadow(&regs, false); AlphaISA::swap_palshadow(&regs, false);
@ -560,7 +560,7 @@ ExecContext::simPalCheck(int palFunc)
case PAL::bpt: case PAL::bpt:
case PAL::bugchk: case PAL::bugchk:
if (system->breakpoint()) if (!misspeculating() && system->breakpoint())
return false; return false;
break; break;
} }

View file

@ -2322,11 +2322,15 @@ decode OPCODE default Unknown::unknown() {
format BasicOperate { format BasicOperate {
0xe000: rc({{ 0xe000: rc({{
Ra = xc->regs.intrflag; Ra = xc->regs.intrflag;
xc->regs.intrflag = 0; if (!xc->misspeculating()) {
xc->regs.intrflag = 0;
}
}}, No_OpClass); }}, No_OpClass);
0xf000: rs({{ 0xf000: rs({{
Ra = xc->regs.intrflag; Ra = xc->regs.intrflag;
xc->regs.intrflag = 1; if (!xc->misspeculating()) {
xc->regs.intrflag = 1;
}
}}, No_OpClass); }}, No_OpClass);
} }
#else #else
@ -2343,7 +2347,9 @@ decode OPCODE default Unknown::unknown() {
// on this PAL call (including maybe suppress it) // on this PAL call (including maybe suppress it)
bool dopal = xc->simPalCheck(palFunc); bool dopal = xc->simPalCheck(palFunc);
Annotate::Callpal(xc, palFunc); if (!xc->misspeculating()) {
Annotate::Callpal(xc, palFunc);
}
if (dopal) { if (dopal) {
if (!xc->misspeculating()) { if (!xc->misspeculating()) {
@ -2360,7 +2366,10 @@ decode OPCODE default Unknown::unknown() {
if (!xc->misspeculating()) if (!xc->misspeculating())
SimExit("halt instruction encountered"); SimExit("halt instruction encountered");
}}); }});
0x83: callsys({{ xc->syscall(); }}); 0x83: callsys({{
if (!xc->misspeculating())
xc->syscall();
}});
// Read uniq reg into ABI return value register (r0) // Read uniq reg into ABI return value register (r0)
0x9e: rduniq({{ R0 = Runiq; }}); 0x9e: rduniq({{ R0 = Runiq; }});
// Write uniq reg with value from ABI arg register (r16) // Write uniq reg with value from ABI arg register (r16)