pseudo_inst.cc (5741:323dac95e72c) pseudo_inst.cc (5780:50c9d48de3ca)
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;

--- 36 unchanged lines hidden (view full) ---

45#include "sim/pseudo_inst.hh"
46#include "sim/serialize.hh"
47#include "sim/sim_events.hh"
48#include "sim/sim_exit.hh"
49#include "sim/stat_control.hh"
50#include "sim/stats.hh"
51#include "sim/system.hh"
52#include "sim/debug.hh"
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;

--- 36 unchanged lines hidden (view full) ---

45#include "sim/pseudo_inst.hh"
46#include "sim/serialize.hh"
47#include "sim/sim_events.hh"
48#include "sim/sim_exit.hh"
49#include "sim/stat_control.hh"
50#include "sim/stats.hh"
51#include "sim/system.hh"
52#include "sim/debug.hh"
53#if FULL_SYSTEM
53#include "sim/vptr.hh"
54#include "sim/vptr.hh"
55#endif
54
55using namespace std;
56
57using namespace Stats;
58using namespace TheISA;
59
60namespace PseudoInst {
61
56
57using namespace std;
58
59using namespace Stats;
60using namespace TheISA;
61
62namespace PseudoInst {
63
64#if FULL_SYSTEM
65
62void
63arm(ThreadContext *tc)
64{
65 if (tc->getKernelStats())
66 tc->getKernelStats()->arm();
67}
68
69void

--- 50 unchanged lines hidden (view full) ---

120}
121
122uint64_t
123quiesceTime(ThreadContext *tc)
124{
125 return (tc->readLastActivate() - tc->readLastSuspend()) / Clock::Int::ns;
126}
127
66void
67arm(ThreadContext *tc)
68{
69 if (tc->getKernelStats())
70 tc->getKernelStats()->arm();
71}
72
73void

--- 50 unchanged lines hidden (view full) ---

124}
125
126uint64_t
127quiesceTime(ThreadContext *tc)
128{
129 return (tc->readLastActivate() - tc->readLastSuspend()) / Clock::Int::ns;
130}
131
132#endif
133
128uint64_t
129rpns(ThreadContext *tc)
130{
131 return curTick / Clock::Int::ns;
132}
133
134void
135m5exit(ThreadContext *tc, Tick delay)
136{
137 Tick when = curTick + delay * Clock::Int::ns;
138 Event *event = new SimLoopExitEvent("m5_exit instruction encountered", 0);
139 mainEventQueue.schedule(event, when);
140}
141
134uint64_t
135rpns(ThreadContext *tc)
136{
137 return curTick / Clock::Int::ns;
138}
139
140void
141m5exit(ThreadContext *tc, Tick delay)
142{
143 Tick when = curTick + delay * Clock::Int::ns;
144 Event *event = new SimLoopExitEvent("m5_exit instruction encountered", 0);
145 mainEventQueue.schedule(event, when);
146}
147
148#if FULL_SYSTEM
149
142void
143loadsymbol(ThreadContext *tc)
144{
145 const string &filename = tc->getCpuPtr()->system->params()->symbolfile;
146 if (filename.empty()) {
147 return;
148 }
149

--- 33 unchanged lines hidden (view full) ---

183
184
185 DPRINTF(Loader, "Loaded symbol: %s @ %#llx\n", symbol, addr);
186 }
187 file.close();
188}
189
190void
150void
151loadsymbol(ThreadContext *tc)
152{
153 const string &filename = tc->getCpuPtr()->system->params()->symbolfile;
154 if (filename.empty()) {
155 return;
156 }
157

--- 33 unchanged lines hidden (view full) ---

191
192
193 DPRINTF(Loader, "Loaded symbol: %s @ %#llx\n", symbol, addr);
194 }
195 file.close();
196}
197
198void
199addsymbol(ThreadContext *tc, Addr addr, Addr symbolAddr)
200{
201 char symb[100];
202 CopyStringOut(tc, symb, symbolAddr, 100);
203 std::string symbol(symb);
204
205 DPRINTF(Loader, "Loaded symbol: %s @ %#llx\n", symbol, addr);
206
207 tc->getSystemPtr()->kernelSymtab->insert(addr,symbol);
208}
209
210#endif
211
212
213void
191resetstats(ThreadContext *tc, Tick delay, Tick period)
192{
193 if (!tc->getCpuPtr()->params()->do_statistics_insts)
194 return;
195
196
197 Tick when = curTick + delay * Clock::Int::ns;
198 Tick repeat = period * Clock::Int::ns;

--- 10 unchanged lines hidden (view full) ---

209
210 Tick when = curTick + delay * Clock::Int::ns;
211 Tick repeat = period * Clock::Int::ns;
212
213 Stats::StatEvent(true, false, when, repeat);
214}
215
216void
214resetstats(ThreadContext *tc, Tick delay, Tick period)
215{
216 if (!tc->getCpuPtr()->params()->do_statistics_insts)
217 return;
218
219
220 Tick when = curTick + delay * Clock::Int::ns;
221 Tick repeat = period * Clock::Int::ns;

--- 10 unchanged lines hidden (view full) ---

232
233 Tick when = curTick + delay * Clock::Int::ns;
234 Tick repeat = period * Clock::Int::ns;
235
236 Stats::StatEvent(true, false, when, repeat);
237}
238
239void
217addsymbol(ThreadContext *tc, Addr addr, Addr symbolAddr)
218{
219 char symb[100];
220 CopyStringOut(tc, symb, symbolAddr, 100);
221 std::string symbol(symb);
222
223 DPRINTF(Loader, "Loaded symbol: %s @ %#llx\n", symbol, addr);
224
225 tc->getSystemPtr()->kernelSymtab->insert(addr,symbol);
226}
227
228void
229dumpresetstats(ThreadContext *tc, Tick delay, Tick period)
230{
231 if (!tc->getCpuPtr()->params()->do_statistics_insts)
232 return;
233
234
235 Tick when = curTick + delay * Clock::Int::ns;
236 Tick repeat = period * Clock::Int::ns;

--- 9 unchanged lines hidden (view full) ---

246
247 Tick when = curTick + delay * Clock::Int::ns;
248 Tick repeat = period * Clock::Int::ns;
249
250 Event *event = new SimLoopExitEvent("checkpoint", 0, repeat);
251 mainEventQueue.schedule(event, when);
252}
253
240dumpresetstats(ThreadContext *tc, Tick delay, Tick period)
241{
242 if (!tc->getCpuPtr()->params()->do_statistics_insts)
243 return;
244
245
246 Tick when = curTick + delay * Clock::Int::ns;
247 Tick repeat = period * Clock::Int::ns;

--- 9 unchanged lines hidden (view full) ---

257
258 Tick when = curTick + delay * Clock::Int::ns;
259 Tick repeat = period * Clock::Int::ns;
260
261 Event *event = new SimLoopExitEvent("checkpoint", 0, repeat);
262 mainEventQueue.schedule(event, when);
263}
264
265#if FULL_SYSTEM
266
254uint64_t
255readfile(ThreadContext *tc, Addr vaddr, uint64_t len, uint64_t offset)
256{
257 const string &file = tc->getSystemPtr()->params()->readfile;
258 if (file.empty()) {
259 return ULL(0);
260 }
261

--- 19 unchanged lines hidden (view full) ---

281 }
282
283 close(fd);
284 CopyIn(tc, vaddr, buf, result);
285 delete [] buf;
286 return result;
287}
288
267uint64_t
268readfile(ThreadContext *tc, Addr vaddr, uint64_t len, uint64_t offset)
269{
270 const string &file = tc->getSystemPtr()->params()->readfile;
271 if (file.empty()) {
272 return ULL(0);
273 }
274

--- 19 unchanged lines hidden (view full) ---

294 }
295
296 close(fd);
297 CopyIn(tc, vaddr, buf, result);
298 delete [] buf;
299 return result;
300}
301
302#endif
303
289void
290debugbreak(ThreadContext *tc)
291{
292 debug_break();
293}
294
295void
296switchcpu(ThreadContext *tc)
297{
298 exitSimLoop("switchcpu");
299}
300
301/* namespace PseudoInst */ }
304void
305debugbreak(ThreadContext *tc)
306{
307 debug_break();
308}
309
310void
311switchcpu(ThreadContext *tc)
312{
313 exitSimLoop("switchcpu");
314}
315
316/* namespace PseudoInst */ }