1/* 2 * Copyright (c) 2003-2006 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; --- 26 unchanged lines hidden (view full) --- 35#include <string> 36 37#include "arch/vtophys.hh" 38#include "base/annotate.hh" 39#include "cpu/base.hh" 40#include "cpu/thread_context.hh" 41#include "cpu/quiesce_event.hh" 42#include "arch/kernel_stats.hh" |
43#include "sim/pseudo_inst.hh" 44#include "sim/serialize.hh" 45#include "sim/sim_exit.hh" 46#include "sim/stat_control.hh" 47#include "sim/stats.hh" 48#include "sim/system.hh" 49#include "sim/debug.hh" 50#include "sim/vptr.hh" 51 52using namespace std; 53 54using namespace Stats; 55using namespace TheISA; 56 57namespace AlphaPseudo 58{ |
59 void 60 arm(ThreadContext *tc) 61 { 62 if (tc->getKernelStats()) 63 tc->getKernelStats()->arm(); 64 } 65 66 void 67 quiesce(ThreadContext *tc) 68 { |
69 if (!tc->getCpuPtr()->params->do_quiesce) |
70 return; 71 72 DPRINTF(Quiesce, "%s: quiesce()\n", tc->getCpuPtr()->name()); 73 74 tc->suspend(); 75 if (tc->getKernelStats()) 76 tc->getKernelStats()->quiesce(); 77 } 78 79 void 80 quiesceNs(ThreadContext *tc, uint64_t ns) 81 { |
82 if (!tc->getCpuPtr()->params->do_quiesce || ns == 0) |
83 return; 84 85 EndQuiesceEvent *quiesceEvent = tc->getQuiesceEvent(); 86 87 Tick resume = curTick + Clock::Int::ns * ns; 88 89 if (quiesceEvent->scheduled()) 90 quiesceEvent->reschedule(resume); --- 6 unchanged lines hidden (view full) --- 97 tc->suspend(); 98 if (tc->getKernelStats()) 99 tc->getKernelStats()->quiesce(); 100 } 101 102 void 103 quiesceCycles(ThreadContext *tc, uint64_t cycles) 104 { |
105 if (!tc->getCpuPtr()->params->do_quiesce || cycles == 0) |
106 return; 107 108 EndQuiesceEvent *quiesceEvent = tc->getQuiesceEvent(); 109 110 Tick resume = curTick + tc->getCpuPtr()->cycles(cycles); 111 112 if (quiesceEvent->scheduled()) 113 quiesceEvent->reschedule(resume); --- 73 unchanged lines hidden (view full) --- 187 DPRINTF(Loader, "Loaded symbol: %s @ %#llx\n", symbol, addr); 188 } 189 file.close(); 190 } 191 192 void 193 resetstats(ThreadContext *tc, Tick delay, Tick period) 194 { |
195 if (!tc->getCpuPtr()->params->do_statistics_insts) |
196 return; 197 198 199 Tick when = curTick + delay * Clock::Int::ns; 200 Tick repeat = period * Clock::Int::ns; 201 202 using namespace Stats; 203 SetupEvent(Reset, when, repeat); 204 } 205 206 void 207 dumpstats(ThreadContext *tc, Tick delay, Tick period) 208 { |
209 if (!tc->getCpuPtr()->params->do_statistics_insts) |
210 return; 211 212 213 Tick when = curTick + delay * Clock::Int::ns; 214 Tick repeat = period * Clock::Int::ns; 215 216 using namespace Stats; 217 SetupEvent(Dump, when, repeat); --- 24 unchanged lines hidden (view full) --- 242 Annotate::annotations.add(tc->getSystemPtr(), 0, cur >> 32, cur & 243 0xFFFFFFFF, wait >> 32, wait & 0xFFFFFFFF); 244 } 245 246 247 void 248 dumpresetstats(ThreadContext *tc, Tick delay, Tick period) 249 { |
250 if (!tc->getCpuPtr()->params->do_statistics_insts) |
251 return; 252 253 254 Tick when = curTick + delay * Clock::Int::ns; 255 Tick repeat = period * Clock::Int::ns; 256 257 using namespace Stats; 258 SetupEvent(Dump|Reset, when, repeat); 259 } 260 261 void 262 m5checkpoint(ThreadContext *tc, Tick delay, Tick period) 263 { |
264 if (!tc->getCpuPtr()->params->do_checkpoint_insts) |
265 return; 266 267 Tick when = curTick + delay * Clock::Int::ns; 268 Tick repeat = period * Clock::Int::ns; 269 270 schedExitSimLoop("checkpoint", when, repeat); 271 } 272 273 uint64_t 274 readfile(ThreadContext *tc, Addr vaddr, uint64_t len, uint64_t offset) 275 { |
276 const string &file = tc->getSystemPtr()->params()->readfile; |
277 if (file.empty()) { 278 return ULL(0); 279 } 280 281 uint64_t result = 0; 282 283 int fd = ::open(file.c_str(), O_RDONLY, 0); 284 if (fd < 0) --- 15 unchanged lines hidden (view full) --- 300 } 301 302 close(fd); 303 CopyIn(tc, vaddr, buf, result); 304 delete [] buf; 305 return result; 306 } 307 |
308 void debugbreak(ThreadContext *tc) 309 { 310 debug_break(); 311 } 312 313 void switchcpu(ThreadContext *tc) 314 { 315 exitSimLoop("switchcpu"); 316 } 317} |