diff options
author | Gabe Black <gblack@eecs.umich.edu> | 2011-09-19 06:17:20 -0700 |
---|---|---|
committer | Gabe Black <gblack@eecs.umich.edu> | 2011-09-19 06:17:20 -0700 |
commit | 48b6636d01da9b1200774d874cecb7f2e945c785 (patch) | |
tree | 7f000f5229876d758f384f643405a8718874a8f4 /src/arch/mips/faults.hh | |
parent | efcded334c5e17ac2f328ee4af008925ae3b3d08 (diff) | |
download | gem5-48b6636d01da9b1200774d874cecb7f2e945c785.tar.xz |
MIPS: Consolidate TLB related faults.
Pass in a bool to indicate if the fault is from a store instead of having two
different classes. The classes were also misleadingly named since loads are
also processed by the DTB but should return ITB faults since they aren't
stores. The TLB may be returning the wrong fault in this case, but I haven't
looked at it closely.
Diffstat (limited to 'src/arch/mips/faults.hh')
-rw-r--r-- | src/arch/mips/faults.hh | 48 |
1 files changed, 10 insertions, 38 deletions
diff --git a/src/arch/mips/faults.hh b/src/arch/mips/faults.hh index 0b3d6ce30..dfb3b4ab5 100644 --- a/src/arch/mips/faults.hh +++ b/src/arch/mips/faults.hh @@ -199,27 +199,13 @@ class BreakpointFault : public MipsFault<BreakpointFault> #endif }; -class ItbRefillFault : public MipsFault<ItbRefillFault> -{ - public: - ItbRefillFault(Addr asid, Addr vaddr, Addr vpn) - { - entryHiAsid = asid; - entryHiVPN2 = vpn >> 2; - entryHiVPN2X = vpn & 0x3; - badVAddr = vaddr; - contextBadVPN2 = vpn >> 2; - } -#if FULL_SYSTEM - void invoke(ThreadContext * tc, - StaticInstPtr inst = StaticInst::nullStaticInstPtr); -#endif -}; - -class DtbRefillFault : public MipsFault<DtbRefillFault> +class TlbRefillFault : public MipsFault<TlbRefillFault> { + protected: + bool store; public: - DtbRefillFault(Addr asid, Addr vaddr, Addr vpn) + TlbRefillFault(Addr asid, Addr vaddr, Addr vpn, bool _store) : + store(_store) { entryHiAsid = asid; entryHiVPN2 = vpn >> 2; @@ -233,10 +219,13 @@ class DtbRefillFault : public MipsFault<DtbRefillFault> #endif }; -class ItbInvalidFault : public MipsFault<ItbInvalidFault> +class TlbInvalidFault : public MipsFault<TlbInvalidFault> { + protected: + bool store; public: - ItbInvalidFault(Addr asid, Addr vaddr, Addr vpn) + TlbInvalidFault(Addr asid, Addr vaddr, Addr vpn, bool _store) : + store(_store) { entryHiAsid = asid; entryHiVPN2 = vpn >> 2; @@ -267,23 +256,6 @@ class TLBModifiedFault : public MipsFault<TLBModifiedFault> #endif }; -class DtbInvalidFault : public MipsFault<DtbInvalidFault> -{ - public: - DtbInvalidFault(Addr asid, Addr vaddr, Addr vpn) - { - entryHiAsid = asid; - entryHiVPN2 = vpn >> 2; - entryHiVPN2X = vpn & 0x3; - badVAddr = vaddr; - contextBadVPN2 = vpn >> 2; - } -#if FULL_SYSTEM - void invoke(ThreadContext * tc, - StaticInst::StaticInstPtr inst = nullStaticInstPtr); -#endif -}; - class DspStateDisabledFault : public MipsFault<DspStateDisabledFault> { public: |