atomic.cc (8931:7a1dfb191e3f) atomic.cc (8949:3fa1ee293096)
1/*
2 * Copyright (c) 2012 ARM Limited
3 * All rights reserved.
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

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

267 req->setVirt(0, addr, size, flags, dataMasterId(), thread->pcState().instAddr());
268
269 // translate to physical address
270 Fault fault = thread->dtb->translateAtomic(req, tc, BaseTLB::Read);
271
272 // Now do the access.
273 if (fault == NoFault && !req->getFlags().isSet(Request::NO_ACCESS)) {
274 Packet pkt = Packet(req,
1/*
2 * Copyright (c) 2012 ARM Limited
3 * All rights reserved.
4 *
5 * The license below extends only to copyright in the software and shall
6 * not be construed as granting a license to any other intellectual
7 * property including but not limited to intellectual property relating
8 * to a hardware implementation of the functionality of the software

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

267 req->setVirt(0, addr, size, flags, dataMasterId(), thread->pcState().instAddr());
268
269 // translate to physical address
270 Fault fault = thread->dtb->translateAtomic(req, tc, BaseTLB::Read);
271
272 // Now do the access.
273 if (fault == NoFault && !req->getFlags().isSet(Request::NO_ACCESS)) {
274 Packet pkt = Packet(req,
275 req->isLLSC() ? MemCmd::LoadLockedReq : MemCmd::ReadReq,
276 Packet::Broadcast);
275 req->isLLSC() ? MemCmd::LoadLockedReq :
276 MemCmd::ReadReq);
277 pkt.dataStatic(data);
278
279 if (req->isMmappedIpr())
280 dcache_latency += TheISA::handleIprRead(thread->getTC(), &pkt);
281 else {
282 if (fastmem && system->isMemAddr(pkt.getAddr()))
283 system->getPhysMem().access(&pkt);
284 else

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

369 cmd = MemCmd::SwapReq;
370 if (req->isCondSwap()) {
371 assert(res);
372 req->setExtraData(*res);
373 }
374 }
375
376 if (do_access && !req->getFlags().isSet(Request::NO_ACCESS)) {
277 pkt.dataStatic(data);
278
279 if (req->isMmappedIpr())
280 dcache_latency += TheISA::handleIprRead(thread->getTC(), &pkt);
281 else {
282 if (fastmem && system->isMemAddr(pkt.getAddr()))
283 system->getPhysMem().access(&pkt);
284 else

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

369 cmd = MemCmd::SwapReq;
370 if (req->isCondSwap()) {
371 assert(res);
372 req->setExtraData(*res);
373 }
374 }
375
376 if (do_access && !req->getFlags().isSet(Request::NO_ACCESS)) {
377 Packet pkt = Packet(req, cmd, Packet::Broadcast);
377 Packet pkt = Packet(req, cmd);
378 pkt.dataStatic(data);
379
380 if (req->isMmappedIpr()) {
381 dcache_latency +=
382 TheISA::handleIprWrite(thread->getTC(), &pkt);
383 } else {
384 if (fastmem && system->isMemAddr(pkt.getAddr()))
385 system->getPhysMem().access(&pkt);

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

468 // This is commented out because the predecoder would act like
469 // a tiny cache otherwise. It wouldn't be flushed when needed
470 // like the I cache. It should be flushed, and when that works
471 // this code should be uncommented.
472 //Fetch more instruction memory if necessary
473 //if(predecoder.needMoreBytes())
474 //{
475 icache_access = true;
378 pkt.dataStatic(data);
379
380 if (req->isMmappedIpr()) {
381 dcache_latency +=
382 TheISA::handleIprWrite(thread->getTC(), &pkt);
383 } else {
384 if (fastmem && system->isMemAddr(pkt.getAddr()))
385 system->getPhysMem().access(&pkt);

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

468 // This is commented out because the predecoder would act like
469 // a tiny cache otherwise. It wouldn't be flushed when needed
470 // like the I cache. It should be flushed, and when that works
471 // this code should be uncommented.
472 //Fetch more instruction memory if necessary
473 //if(predecoder.needMoreBytes())
474 //{
475 icache_access = true;
476 Packet ifetch_pkt = Packet(&ifetch_req, MemCmd::ReadReq,
477 Packet::Broadcast);
476 Packet ifetch_pkt = Packet(&ifetch_req, MemCmd::ReadReq);
478 ifetch_pkt.dataStatic(&inst);
479
480 if (fastmem && system->isMemAddr(ifetch_pkt.getAddr()))
481 system->getPhysMem().access(&ifetch_pkt);
482 else
483 icache_latency = icachePort.sendAtomic(&ifetch_pkt);
484
485 assert(!ifetch_pkt.isError());

--- 77 unchanged lines hidden ---
477 ifetch_pkt.dataStatic(&inst);
478
479 if (fastmem && system->isMemAddr(ifetch_pkt.getAddr()))
480 system->getPhysMem().access(&ifetch_pkt);
481 else
482 icache_latency = icachePort.sendAtomic(&ifetch_pkt);
483
484 assert(!ifetch_pkt.isError());

--- 77 unchanged lines hidden ---