1/* 2 * Copyright (c) 2004-2005 The Regents of The University of Michigan 3 * All rights reserved. 4 * 5 * Redistribution and use in source and binary forms, with or without 6 * modification, are permitted provided that the following conditions are 7 * met: redistributions of source code must retain the above copyright 8 * notice, this list of conditions and the following disclaimer; --- 24 unchanged lines hidden (view full) --- 33#include "cpu/cpu_exec_context.hh" 34#include "kern/kernel_stats.hh" 35#include "kern/system_events.hh" 36#include "sim/system.hh" 37 38using namespace TheISA; 39 40void |
41SkipFuncEvent::process(ThreadContext *tc) |
42{ |
43 Addr newpc = tc->readIntReg(ReturnAddressReg); |
44 45 DPRINTF(PCEvent, "skipping %s: pc=%x, newpc=%x\n", description, |
46 tc->readPC(), newpc); |
47 |
48 tc->setPC(newpc); 49 tc->setNextPC(tc->readPC() + sizeof(TheISA::MachInst)); |
50/* |
51 BranchPred *bp = tc->getCpuPtr()->getBranchPred(); |
52 if (bp != NULL) { |
53 bp->popRAS(tc->getThreadNum()); |
54 } 55*/ 56} 57 58 59FnEvent::FnEvent(PCEventQueue *q, const std::string &desc, Addr addr, 60 Stats::MainBin *bin) 61 : PCEvent(q, desc, addr), _name(desc), mybin(bin) 62{ 63} 64 65void |
66FnEvent::process(ThreadContext *tc) |
67{ |
68 if (tc->misspeculating()) |
69 return; 70 |
71 tc->getSystemPtr()->kernelBinning->call(tc, mybin); |
72} 73 74void |
75IdleStartEvent::process(ThreadContext *tc) |
76{ |
77 if (tc->getKernelStats()) 78 tc->getKernelStats()->setIdleProcess( 79 tc->readMiscReg(AlphaISA::IPR_PALtemp23), tc); |
80 remove(); 81} 82 83void |
84InterruptStartEvent::process(ThreadContext *tc) |
85{ |
86 if (tc->getKernelStats()) 87 tc->getKernelStats()->mode(Kernel::interrupt, tc); |
88} 89 90void |
91InterruptEndEvent::process(ThreadContext *tc) |
92{ 93 // We go back to kernel, if we are user, inside the rti 94 // pal code we will get switched to user because of the ICM write |
95 if (tc->getKernelStats()) 96 tc->getKernelStats()->mode(Kernel::kernel, tc); |
97} |