timing.cc (3661:efc80a01aeb6) timing.cc (3667:1d57100f8bf0)
1/*
2 * Copyright (c) 2002-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;

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

285 if (!dcachePort.sendTiming(pkt)) {
286 _status = DcacheRetry;
287 dcache_pkt = pkt;
288 } else {
289 _status = DcacheWaitResponse;
290 // memory system takes ownership of packet
291 dcache_pkt = NULL;
292 }
1/*
2 * Copyright (c) 2002-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;

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

285 if (!dcachePort.sendTiming(pkt)) {
286 _status = DcacheRetry;
287 dcache_pkt = pkt;
288 } else {
289 _status = DcacheWaitResponse;
290 // memory system takes ownership of packet
291 dcache_pkt = NULL;
292 }
293 } else {
294 delete req;
293 }
294
295 // This will need a new way to tell if it has a dcache attached.
296 if (req->isUncacheable())
297 recordEvent("Uncached Read");
298
299 return fault;
300}

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

370 if (!dcachePort.sendTiming(dcache_pkt)) {
371 _status = DcacheRetry;
372 } else {
373 _status = DcacheWaitResponse;
374 // memory system takes ownership of packet
375 dcache_pkt = NULL;
376 }
377 }
295 }
296
297 // This will need a new way to tell if it has a dcache attached.
298 if (req->isUncacheable())
299 recordEvent("Uncached Read");
300
301 return fault;
302}

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

372 if (!dcachePort.sendTiming(dcache_pkt)) {
373 _status = DcacheRetry;
374 } else {
375 _status = DcacheWaitResponse;
376 // memory system takes ownership of packet
377 dcache_pkt = NULL;
378 }
379 }
380 } else {
381 delete req;
378 }
379
380 // This will need a new way to tell if it's hooked up to a cache or not.
381 if (req->isUncacheable())
382 recordEvent("Uncached Write");
383
384 // If the write needs to have a fault on the access, consider calling
385 // changeStatus() and changing it to "bad addr write" or something.

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

452 _status = IcacheRetry;
453 } else {
454 // Need to wait for cache to respond
455 _status = IcacheWaitResponse;
456 // ownership of packet transferred to memory system
457 ifetch_pkt = NULL;
458 }
459 } else {
382 }
383
384 // This will need a new way to tell if it's hooked up to a cache or not.
385 if (req->isUncacheable())
386 recordEvent("Uncached Write");
387
388 // If the write needs to have a fault on the access, consider calling
389 // changeStatus() and changing it to "bad addr write" or something.

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

456 _status = IcacheRetry;
457 } else {
458 // Need to wait for cache to respond
459 _status = IcacheWaitResponse;
460 // ownership of packet transferred to memory system
461 ifetch_pkt = NULL;
462 }
463 } else {
464 delete ifetch_req;
465 delete ifetch_pkt;
460 // fetch fault: advance directly to next instruction (fault handler)
461 advanceInst(fault);
462 }
463
464 numCycles += curTick - previousTick;
465 previousTick = curTick;
466}
467

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

485{
486 // received a response from the icache: execute the received
487 // instruction
488 assert(pkt->result == Packet::Success);
489 assert(_status == IcacheWaitResponse);
490
491 _status = Running;
492
466 // fetch fault: advance directly to next instruction (fault handler)
467 advanceInst(fault);
468 }
469
470 numCycles += curTick - previousTick;
471 previousTick = curTick;
472}
473

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

491{
492 // received a response from the icache: execute the received
493 // instruction
494 assert(pkt->result == Packet::Success);
495 assert(_status == IcacheWaitResponse);
496
497 _status = Running;
498
493 delete pkt->req;
494 delete pkt;
495
496 numCycles += curTick - previousTick;
497 previousTick = curTick;
498
499 if (getState() == SimObject::Draining) {
499 numCycles += curTick - previousTick;
500 previousTick = curTick;
501
502 if (getState() == SimObject::Draining) {
503 delete pkt->req;
504 delete pkt;
505
500 completeDrain();
501 return;
502 }
503
504 preExecute();
505 if (curStaticInst->isMemRef() && !curStaticInst->isDataPrefetch()) {
506 // load or store: just send to dcache
507 Fault fault = curStaticInst->initiateAcc(this, traceData);

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

523 advanceInst(fault);
524 }
525 } else {
526 // non-memory instruction: execute completely now
527 Fault fault = curStaticInst->execute(this, traceData);
528 postExecute();
529 advanceInst(fault);
530 }
506 completeDrain();
507 return;
508 }
509
510 preExecute();
511 if (curStaticInst->isMemRef() && !curStaticInst->isDataPrefetch()) {
512 // load or store: just send to dcache
513 Fault fault = curStaticInst->initiateAcc(this, traceData);

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

529 advanceInst(fault);
530 }
531 } else {
532 // non-memory instruction: execute completely now
533 Fault fault = curStaticInst->execute(this, traceData);
534 postExecute();
535 advanceInst(fault);
536 }
537
538 delete pkt->req;
539 delete pkt;
531}
532
533void
534TimingSimpleCPU::IcachePort::ITickEvent::process()
535{
536 cpu->completeIfetch(pkt);
537}
538

--- 228 unchanged lines hidden ---
540}
541
542void
543TimingSimpleCPU::IcachePort::ITickEvent::process()
544{
545 cpu->completeIfetch(pkt);
546}
547

--- 228 unchanged lines hidden ---