lsq_unit.hh (3228:f47f69e61ded) | lsq_unit.hh (3230:e86a03911728) |
---|---|
1/* 2 * Copyright (c) 2004-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; --- 478 unchanged lines hidden (view full) --- 487 assert(load_inst); 488 489 assert(!load_inst->isExecuted()); 490 491 // Make sure this isn't an uncacheable access 492 // A bit of a hackish way to get uncached accesses to work only if they're 493 // at the head of the LSQ and are ready to commit (at the head of the ROB 494 // too). | 1/* 2 * Copyright (c) 2004-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; --- 478 unchanged lines hidden (view full) --- 487 assert(load_inst); 488 489 assert(!load_inst->isExecuted()); 490 491 // Make sure this isn't an uncacheable access 492 // A bit of a hackish way to get uncached accesses to work only if they're 493 // at the head of the LSQ and are ready to commit (at the head of the ROB 494 // too). |
495 if (req->getFlags() & UNCACHEABLE && | 495 if (req->isUncacheable() && |
496 (load_idx != loadHead || !load_inst->isAtCommit())) { 497 iewStage->rescheduleMemInst(load_inst); 498 ++lsqRescheduledLoads; 499 return TheISA::genMachineCheckFault(); 500 } 501 502 // Check the SQ for any previous stores that might lead to forwarding 503 int store_idx = load_inst->sqIdx; 504 505 int store_size = 0; 506 507 DPRINTF(LSQUnit, "Read called, load idx: %i, store idx: %i, " 508 "storeHead: %i addr: %#x\n", 509 load_idx, store_idx, storeHead, req->getPaddr()); 510 511#if FULL_SYSTEM | 496 (load_idx != loadHead || !load_inst->isAtCommit())) { 497 iewStage->rescheduleMemInst(load_inst); 498 ++lsqRescheduledLoads; 499 return TheISA::genMachineCheckFault(); 500 } 501 502 // Check the SQ for any previous stores that might lead to forwarding 503 int store_idx = load_inst->sqIdx; 504 505 int store_size = 0; 506 507 DPRINTF(LSQUnit, "Read called, load idx: %i, store idx: %i, " 508 "storeHead: %i addr: %#x\n", 509 load_idx, store_idx, storeHead, req->getPaddr()); 510 511#if FULL_SYSTEM |
512 if (req->getFlags() & LOCKED) { | 512 if (req->isLocked()) { |
513 cpu->lockAddr = req->getPaddr(); 514 cpu->lockFlag = true; 515 } 516#endif 517 518 while (store_idx != -1) { 519 // End once we've reached the top of the LSQ 520 if (store_idx == storeWBIdx) { --- 183 unchanged lines hidden --- | 513 cpu->lockAddr = req->getPaddr(); 514 cpu->lockFlag = true; 515 } 516#endif 517 518 while (store_idx != -1) { 519 // End once we've reached the top of the LSQ 520 if (store_idx == storeWBIdx) { --- 183 unchanged lines hidden --- |