virtual void invoke(ThreadContext * tc, const StaticInstPtr &inst =
StaticInst::nullStaticInstPtr ,uint64_t bitSet = 0)
{
- tc->setIntReg(INTREG_SRR0, tc->instAddr() + 4);
+ tc->setIntReg(INTREG_SRR0, tc->instAddr());
PowerInterrupt::updateSRR1(tc, bitSet);
PowerInterrupt::updateMsr(tc);
tc->pcState(ProgramPCSet);
ThreadContext *tc = xc->tcBase();
ThreadID t = tc->threadId();
if(bits(Rb_ud, 31, 27) == 0x5) {
+ printf("Get msgclr instr for threadid %d\n",(int)t);
tc->getCpuPtr()->clearInterrupt(t, 7, 0);
}
}});
Rb_ud,(int)tc->threadId());
uint64_t val2 = Rb_ud;
printf("Reading done");
+ printf("Msr value is 0x%016lx\n", MSR);
if(bits(val1, 19, 0) == bits(val2, 19, 0)){
printf("Intterupt Happen\n");
t->getCpuPtr()->postInterrupt(i, 7, 0);
PowerSystem::initState()
{
System::initState();
+ printf("PowerSystem::initState: No of thread contexts %d\n" ,
+ (int)threadContexts.size());
+
ThreadContext *tc = threadContexts[0];
tc->pcState(tc->getSystemPtr()->kernelEntry);
//Sixty Four, little endian,Hypervisor bits are enabled.
}
dcache_access = true;
- assert(!pkt.isError());
+ //assert(!pkt.isError());
if (req->isLLSC()) {
TheISA::handleLockedRead(thread, req);
threadSnoop(&pkt, curThread);
}
dcache_access = true;
- assert(!pkt.isError());
+ //assert(!pkt.isError());
if (req->isSwap()) {
assert(res);
else
icache_latency = icachePort.sendAtomic(&ifetch_pkt);
- assert(!ifetch_pkt.isError());
+ // assert(!ifetch_pkt.isError());
// ifetch_req is initialized to read the instruction directly
// into the CPU object's inst field.
uint64_t readIntReg(int reg_idx)
{
int flatIndex = isa->flattenIntIndex(reg_idx);
+ if (flatIndex>TheISA::NumIntRegs)
+ printf("Flat index..%d NumIntRegs..%d\n",flatIndex,TheISA::NumIntRegs);
assert(flatIndex < TheISA::NumIntRegs);
uint64_t regVal(readIntRegFlat(flatIndex));
DPRINTF(IntRegs, "Reading int reg %d (%d) as %#x.\n",