Deleted Added
sdiff udiff text old ( 8607:5fb918115c07 ) new ( 8696:642f83fafffb )
full compact
1/*
2 * Copyright (c) 2001-2005 The Regents of The University of Michigan
3 * Copyright (c) 2007 MIPS Technologies, Inc.
4 * All rights reserved.
5 *
6 * Redistribution and use in source and binary forms, with or without
7 * modification, are permitted provided that the following conditions are
8 * met: redistributions of source code must retain the above copyright

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

24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
27 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 *
29 * Authors: Nathan Binkert
30 * Steve Reinhardt
31 * Jaidev Patwardhan
32 */
33
34#include <string>
35#include <vector>
36
37#include "arch/mips/faults.hh"
38#include "arch/mips/pagetable.hh"
39#include "arch/mips/pra_constants.hh"

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

345 EvenOdd = 0;
346 } else {
347 // Check odd bits
348 Valid = pte->V1;
349 EvenOdd = 1;
350 }
351
352 if (Valid == false) {
353 return new InvalidFault(Asid, vaddr, vpn, false);
354 } else {
355 // Ok, this is really a match, set paddr
356 Addr PAddr;
357 if (EvenOdd == 0) {
358 PAddr = pte->PFN0;
359 } else {
360 PAddr = pte->PFN1;
361 }
362 PAddr >>= (pte->AddrShiftAmount - 12);
363 PAddr <<= pte->AddrShiftAmount;
364 PAddr |= (vaddr & pte->OffsetMask);
365 req->setPaddr(PAddr);
366 }
367 } else {
368 // Didn't find any match, return a TLB Refill Exception
369 return new RefillFault(Asid, vaddr, vpn, false);
370 }
371 }
372 return checkCacheability(req);
373#endif
374}
375
376Fault
377TLB::translateData(RequestPtr req, ThreadContext *tc, bool write)

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

440 } else {
441 // Check odd bits
442 Valid = pte->V1;
443 Dirty = pte->D1;
444 EvenOdd = 1;
445 }
446
447 if (Valid == false) {
448 return new InvalidFault(Asid, vaddr, VPN, true);
449 } else {
450 // Ok, this is really a match, set paddr
451 if (!Dirty) {
452 return new TlbModifiedFault(Asid, vaddr, VPN);
453 }
454 Addr PAddr;
455 if (EvenOdd == 0) {
456 PAddr = pte->PFN0;
457 } else {
458 PAddr = pte->PFN1;
459 }
460 PAddr >>= (pte->AddrShiftAmount - 12);
461 PAddr <<= pte->AddrShiftAmount;
462 PAddr |= (vaddr & pte->OffsetMask);
463 req->setPaddr(PAddr);
464 }
465 } else {
466 // Didn't find any match, return a TLB Refill Exception
467 return new RefillFault(Asid, vaddr, VPN, true);
468 }
469 }
470 return checkCacheability(req);
471#endif
472}
473
474Fault
475TLB::translateAtomic(RequestPtr req, ThreadContext *tc, Mode mode)

--- 32 unchanged lines hidden ---