1 2/* 3 * Copyright (c) 2010-2013 ARM Limited 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 --- 450 unchanged lines hidden (view full) --- 459 } 460 461 // If this is the only load in the LSQ we don't care 462 if (load_idx == loadTail) 463 return; 464 465 incrLdIdx(load_idx); 466 |
467 bool force_squash = false; 468 |
469 while (load_idx != loadTail) { 470 DynInstPtr ld_inst = loadQueue[load_idx]; 471 472 if (!ld_inst->effAddrValid() || ld_inst->uncacheable()) { 473 incrLdIdx(load_idx); 474 continue; 475 } 476 477 Addr load_addr = ld_inst->physEffAddr & cacheBlockMask; 478 DPRINTF(LSQUnit, "-- inst [sn:%lli] load_addr: %#x to pktAddr:%#x\n", 479 ld_inst->seqNum, load_addr, invalidate_addr); 480 |
481 if (load_addr == invalidate_addr || force_squash) { 482 if (needsTSO) { 483 // If we have a TSO system, as all loads must be ordered with 484 // all other loads, this load as well as *all* subsequent loads 485 // need to be squashed to prevent possible load reordering. 486 force_squash = true; 487 } 488 if (ld_inst->possibleLoadViolation() || force_squash) { |
489 DPRINTF(LSQUnit, "Conflicting load at addr %#x [sn:%lli]\n", 490 pkt->getAddr(), ld_inst->seqNum); 491 492 // Mark the load for re-execution 493 ld_inst->fault = new ReExec; 494 } else { 495 DPRINTF(LSQUnit, "HitExternal Snoop for addr %#x [sn:%lli]\n", 496 pkt->getAddr(), ld_inst->seqNum); --- 835 unchanged lines hidden --- |