format BasicOperate {
// M5 special opcodes use the reserved 0x01 opcode space
0x01: decode M5FUNC {
-#if FULL_SYSTEM
0x00: arm({{
PseudoInst::arm(xc->tcBase());
}}, IsNonSpeculative);
0x04: quiesceTime({{
R0 = PseudoInst::quiesceTime(xc->tcBase());
}}, IsNonSpeculative, IsUnverifiable);
-#endif
0x07: rpns({{
R0 = PseudoInst::rpns(xc->tcBase());
}}, IsNonSpeculative, IsUnverifiable);
0x21: m5exit({{
PseudoInst::m5exit(xc->tcBase(), R16);
}}, No_OpClass, IsNonSpeculative);
-#if FULL_SYSTEM
0x31: loadsymbol({{
PseudoInst::loadsymbol(xc->tcBase());
}}, No_OpClass, IsNonSpeculative);
0x30: initparam({{
Ra = PseudoInst::initParam(xc->tcBase());
}});
-#endif
0x40: resetstats({{
PseudoInst::resetstats(xc->tcBase(), R16, R17);
}}, IsNonSpeculative);
0x43: m5checkpoint({{
PseudoInst::m5checkpoint(xc->tcBase(), R16, R17);
}}, IsNonSpeculative);
-#if FULL_SYSTEM
0x50: m5readfile({{
R0 = PseudoInst::readfile(xc->tcBase(), R16, R17, R18);
}}, IsNonSpeculative);
-#endif
0x51: m5break({{
PseudoInst::debugbreak(xc->tcBase());
}}, IsNonSpeculative);
0x52: m5switchcpu({{
PseudoInst::switchcpu(xc->tcBase());
}}, IsNonSpeculative);
-#if FULL_SYSTEM
0x53: m5addsymbol({{
PseudoInst::addsymbol(xc->tcBase(), R16, R17);
}}, IsNonSpeculative);
-#endif
0x54: m5panic({{
panic("M5 panic instruction called at pc = %#x.", PC);
}}, IsNonSpeculative);
}
} else {
xc->setPredicate(false);
-#if FULL_SYSTEM
PseudoInst::quiesceSkip(xc->tcBase());
-#endif
}
return fault;
} else {
xc->setPredicate(false);
%(pred_fixup)s;
-#if FULL_SYSTEM
PseudoInst::quiesceSkip(xc->tcBase());
-#endif
}
return fault;
}
// M5 special opcodes use the reserved IMPDEP2A opcode space
0x37: decode M5FUNC {
-#if FULL_SYSTEM
format BasicOperate {
// we have 7 bits of space here to play with...
0x21: m5exit({{
panic("M5 panic instruction called at pc = %#x.", PC);
}}, No_OpClass, IsNonSpeculative);
}
-#endif
default: Trap::impdep2({{fault = new IllegalInstruction;}});
}
0x38: Branch::jmpl({{
output exec {{
#include "base/fenv.hh"
-#if FULL_SYSTEM
-#include "sim/pseudo_inst.hh"
-#endif
-
#include <cmath>
#include <limits>
#include "debug/Sparc.hh"
#include "mem/packet.hh"
#include "mem/packet_access.hh"
+#include "sim/pseudo_inst.hh"
#include "sim/sim_exit.hh"
using namespace SparcISA;
//0x04: loadall_or_reset_or_hang();
0x4: decode IMMEDIATE {
format BasicOperate {
-#if FULL_SYSTEM
0x00: m5arm({{
PseudoInst::arm(xc->tcBase());
}}, IsNonSpeculative);
0x04: m5quiesceTime({{
Rax = PseudoInst::quiesceTime(xc->tcBase());
}}, IsNonSpeculative);
-#endif
0x07: m5rpns({{
Rax = PseudoInst::rpns(xc->tcBase());
}}, IsNonSpeculative);
0x21: m5exit({{
PseudoInst::m5exit(xc->tcBase(), Rdi);
}}, IsNonSpeculative);
-#if FULL_SYSTEM
0x30: m5initparam({{
Rax = PseudoInst::initParam(xc->tcBase());
}}, IsNonSpeculative);
0x31: m5loadsymbol({{
PseudoInst::loadsymbol(xc->tcBase());
}}, IsNonSpeculative);
-#endif
0x40: m5resetstats({{
PseudoInst::resetstats(xc->tcBase(), Rdi, Rsi);
}}, IsNonSpeculative);
0x43: m5checkpoint({{
PseudoInst::m5checkpoint(xc->tcBase(), Rdi, Rsi);
}}, IsNonSpeculative);
-#if FULL_SYSTEM
0x50: m5readfile({{
Rax = PseudoInst::readfile(
xc->tcBase(), Rdi, Rsi, Rdx);
}}, IsNonSpeculative);
-#endif
0x51: m5debugbreak({{
PseudoInst::debugbreak(xc->tcBase());
}}, IsNonSpeculative);
0x52: m5switchcpu({{
PseudoInst::switchcpu(xc->tcBase());
}}, IsNonSpeculative);
-#if FULL_SYSTEM
0x53: m5addsymbol({{
PseudoInst::addsymbol(xc->tcBase(), Rdi, Rsi);
}}, IsNonSpeculative);
-#endif
0x54: m5panic({{
panic("M5 panic instruction called at pc = %#x.\n",
RIP);
#include <ieeefp.h>
#endif
-#if FULL_SYSTEM
-#include "sim/pseudo_inst.hh"
-#endif
-
#include <cmath>
#include <limits>