iew_impl.hh (13453:4a7a060ea26e) iew_impl.hh (13590:d7e018859709)
1/*
1/*
2 * Copyright (c) 2010-2013 ARM Limited
2 * Copyright (c) 2010-2013, 2018 ARM Limited
3 * Copyright (c) 2013 Advanced Micro Devices, Inc.
4 * All rights reserved.
5 *
6 * The license below extends only to copyright in the software and shall
7 * not be construed as granting a license to any other intellectual
8 * property including but not limited to intellectual property relating
9 * to a hardware implementation of the functionality of the software
10 * licensed hereunder. You may use the software subject to the license

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

739
740 activateStage();
741
742 _status = Active;
743 }
744}
745
746template <class Impl>
3 * Copyright (c) 2013 Advanced Micro Devices, Inc.
4 * All rights reserved.
5 *
6 * The license below extends only to copyright in the software and shall
7 * not be construed as granting a license to any other intellectual
8 * property including but not limited to intellectual property relating
9 * to a hardware implementation of the functionality of the software
10 * licensed hereunder. You may use the software subject to the license

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

739
740 activateStage();
741
742 _status = Active;
743 }
744}
745
746template <class Impl>
747void
748DefaultIEW<Impl>::resetEntries()
749{
750 instQueue.resetEntries();
751 ldstQueue.resetEntries();
752}
753
754template <class Impl>
755bool
756DefaultIEW<Impl>::checkStall(ThreadID tid)
757{
758 bool ret_val(false);
759
760 if (fromCommit->commitInfo[tid].robSquashing) {
761 DPRINTF(IEW,"[tid:%i]: Stall from Commit stage detected.\n",tid);
762 ret_val = true;

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

1348 // DynInst that caused the violation. Note that this
1349 // clears the violation signal.
1350 DynInstPtr violator;
1351 violator = ldstQueue.getMemDepViolator(tid);
1352
1353 DPRINTF(IEW, "LDSTQ detected a violation. Violator PC: %s "
1354 "[sn:%lli], inst PC: %s [sn:%lli]. Addr is: %#x.\n",
1355 violator->pcState(), violator->seqNum,
747bool
748DefaultIEW<Impl>::checkStall(ThreadID tid)
749{
750 bool ret_val(false);
751
752 if (fromCommit->commitInfo[tid].robSquashing) {
753 DPRINTF(IEW,"[tid:%i]: Stall from Commit stage detected.\n",tid);
754 ret_val = true;

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

1340 // DynInst that caused the violation. Note that this
1341 // clears the violation signal.
1342 DynInstPtr violator;
1343 violator = ldstQueue.getMemDepViolator(tid);
1344
1345 DPRINTF(IEW, "LDSTQ detected a violation. Violator PC: %s "
1346 "[sn:%lli], inst PC: %s [sn:%lli]. Addr is: %#x.\n",
1347 violator->pcState(), violator->seqNum,
1356 inst->pcState(), inst->seqNum, inst->physEffAddrLow);
1348 inst->pcState(), inst->seqNum, inst->physEffAddr);
1357
1358 fetchRedirect[tid] = true;
1359
1360 // Tell the instruction queue that a violation has occured.
1361 instQueue.violation(inst, violator);
1362
1363 // Squash.
1364 squashDueToMemOrder(violator, tid);

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

1371 if (ldstQueue.violation(tid)) {
1372 assert(inst->isMemRef());
1373
1374 DynInstPtr violator = ldstQueue.getMemDepViolator(tid);
1375
1376 DPRINTF(IEW, "LDSTQ detected a violation. Violator PC: "
1377 "%s, inst PC: %s. Addr is: %#x.\n",
1378 violator->pcState(), inst->pcState(),
1349
1350 fetchRedirect[tid] = true;
1351
1352 // Tell the instruction queue that a violation has occured.
1353 instQueue.violation(inst, violator);
1354
1355 // Squash.
1356 squashDueToMemOrder(violator, tid);

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

1363 if (ldstQueue.violation(tid)) {
1364 assert(inst->isMemRef());
1365
1366 DynInstPtr violator = ldstQueue.getMemDepViolator(tid);
1367
1368 DPRINTF(IEW, "LDSTQ detected a violation. Violator PC: "
1369 "%s, inst PC: %s. Addr is: %#x.\n",
1370 violator->pcState(), inst->pcState(),
1379 inst->physEffAddrLow);
1371 inst->physEffAddr);
1380 DPRINTF(IEW, "Violation will not be handled because "
1381 "already squashing\n");
1382
1383 ++memOrderViolationEvents;
1384 }
1385 }
1386 }
1387

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

1455DefaultIEW<Impl>::tick()
1456{
1457 wbNumInst = 0;
1458 wbCycle = 0;
1459
1460 wroteToTimeBuffer = false;
1461 updatedQueues = false;
1462
1372 DPRINTF(IEW, "Violation will not be handled because "
1373 "already squashing\n");
1374
1375 ++memOrderViolationEvents;
1376 }
1377 }
1378 }
1379

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

1447DefaultIEW<Impl>::tick()
1448{
1449 wbNumInst = 0;
1450 wbCycle = 0;
1451
1452 wroteToTimeBuffer = false;
1453 updatedQueues = false;
1454
1455 ldstQueue.tick();
1456
1463 sortInsts();
1464
1465 // Free function units marked as being freed this cycle.
1466 fuPool->processFreeUnits();
1467
1468 list<ThreadID>::iterator threads = activeThreads->begin();
1469 list<ThreadID>::iterator end = activeThreads->end();
1470

--- 174 unchanged lines hidden ---
1457 sortInsts();
1458
1459 // Free function units marked as being freed this cycle.
1460 fuPool->processFreeUnits();
1461
1462 list<ThreadID>::iterator threads = activeThreads->begin();
1463 list<ThreadID>::iterator end = activeThreads->end();
1464

--- 174 unchanged lines hidden ---