Go to the documentation of this file.
50 (
"power_on_reset", 0x001, 0, {{
H,
H,
H}});
54 (
"watch_dog_reset", 0x002, 120, {{
H,
H,
H}});
58 (
"externally_initiated_reset", 0x003, 110, {{
H,
H,
H}});
62 (
"software_initiated_reset", 0x004, 130, {{
SH,
SH,
H}});
66 (
"RED_state_exception", 0x005, 1, {{
H,
H,
H}});
70 (
"store_error", 0x007, 201, {{
H,
H,
H}});
74 (
"instruction_access_exception", 0x008, 300, {{
H,
H,
H}});
83 (
"instruction_access_error", 0x00A, 400, {{
H,
H,
H}});
87 (
"illegal_instruction", 0x010, 620, {{
H,
H,
H}});
91 (
"privileged_opcode", 0x011, 700, {{P,
SH,
SH}});
105 (
"fp_disabled", 0x020, 800, {{P, P,
H}});
111 (
"fp_disabled", 0x020, 800, {{P, P,
H}});
115 (
"fp_exception_ieee_754", 0x021, 1110, {{P, P,
H}});
119 (
"fp_exception_other", 0x022, 1110, {{P, P,
H}});
123 (
"tag_overflow", 0x023, 1400, {{P, P,
H}});
127 (
"clean_window", 0x024, 1010, {{P, P,
H}});
131 (
"division_by_zero", 0x028, 1500, {{P, P,
H}});
135 (
"internal_processor_error", 0x029, 4, {{
H,
H,
H}});
139 (
"instruction_invalid_tsb_entry", 0x02A, 210, {{
H,
H,
SH}});
143 (
"data_invalid_tsb_entry", 0x02B, 1203, {{
H,
H,
H}});
147 (
"data_access_exception", 0x030, 1201, {{
H,
H,
H}});
156 (
"data_access_error", 0x032, 1210, {{
H,
H,
H}});
160 (
"data_access_protection", 0x033, 1207, {{
H,
H,
H}});
164 (
"mem_address_not_aligned", 0x034, 1020, {{
H,
H,
H}});
168 (
"LDDF_mem_address_not_aligned", 0x035, 1010, {{
H,
H,
H}});
172 (
"STDF_mem_address_not_aligned", 0x036, 1010, {{
H,
H,
H}});
176 (
"privileged_action", 0x037, 1110, {{
H,
H,
SH}});
180 (
"LDQF_mem_address_not_aligned", 0x038, 1010, {{
H,
H,
H}});
184 (
"STQF_mem_address_not_aligned", 0x039, 1010, {{
H,
H,
H}});
188 (
"instruction_real_translation_miss", 0x03E, 208, {{
H,
H,
SH}});
192 (
"data_real_translation_miss", 0x03F, 1203, {{
H,
H,
H}});
201 (
"interrupt_level_n", 0x040, 0, {{P, P,
SH}});
205 (
"hstick_match", 0x05E, 1601, {{
H,
H,
H}});
209 (
"trap_level_zero", 0x05F, 202, {{
H,
H,
SH}});
213 (
"interrupt_vector", 0x060, 2630, {{
H,
H,
H}});
217 (
"PA_watchpoint", 0x061, 1209, {{
H,
H,
H}});
221 (
"VA_watchpoint", 0x062, 1120, {{P, P,
SH}});
225 (
"fast_instruction_access_MMU_miss", 0x064, 208, {{
H,
H,
SH}});
229 (
"fast_data_access_MMU_miss", 0x068, 1203, {{
H,
H,
H}});
233 (
"fast_data_access_protection", 0x06C, 1207, {{
H,
H,
H}});
237 (
"instruction_break", 0x076, 610, {{
H,
H,
H}});
241 (
"cpu_mondo", 0x07C, 1608, {{P, P,
SH}});
245 (
"dev_mondo", 0x07D, 1611, {{P, P,
SH}});
249 (
"resume_error", 0x07E, 3330, {{P, P,
SH}});
253 (
"spill_n_normal", 0x080, 900, {{P, P,
H}});
257 (
"spill_n_other", 0x0A0, 900, {{P, P,
H}});
261 (
"fill_n_normal", 0x0C0, 900, {{P, P,
H}});
265 (
"fill_n_other", 0x0E0, 900, {{P, P,
H}});
269 (
"trap_instruction", 0x100, 1602, {{P, P,
H}});
343 bool priv = pstate.priv;
355 bool changedCWP =
true;
358 else if (0x80 <= tt && tt <= 0xbf)
359 CWP += (CANSAVE + 2);
360 else if (0xc0 <= tt && tt <= 0xff)
446 pstate.cle = pstate.tle;
451 bool changedCWP =
true;
454 else if (0x80 <= tt && tt <= 0xbf)
455 CWP += (CANSAVE + 2);
456 else if (0xc0 <= tt && tt <= 0xff)
471 const Addr RSTVAddr = 0xFFF0000000
ULL;
472 PC = RSTVAddr | ((TT << 5) & 0xFF);
480 PC = (HTBA & ~
mask(14)) | ((TT << 5) &
mask(14));
488 PC = (TBA & ~
mask(15)) |
489 (TL > 1 ? (1 << 14) : 0) |
490 ((TT << 5) &
mask(14));
515 else if (pstate.priv)
522 if (hpstate.red || (
tl ==
MaxTL - 1)) {
529 panic(
"Should go to error state here.. crap\n");
629 panic_if(!pte,
"Tried to execute unmapped address %#x.\n",
vaddr);
631 Addr alignedvaddr =
p->pTable->pageAlign(
vaddr);
642 bool is_real_address = !
bits(tlbdata, 4);
646 bool trapped =
bits(tlbdata, 18, 16) > 0;
652 int primary_context =
bits(tlbdata, 47, 32);
655 int const partition_id = 0;
659 int context_id = (is_real_address || trapped) ? 0 : primary_context;
671 alignedvaddr, partition_id, context_id,
685 if (!pte &&
p->fixupFault(
vaddr))
686 pte =
p->pTable->lookup(
vaddr);
687 panic_if(!pte,
"Tried to access unmapped address %#x.\n",
vaddr);
689 Addr alignedvaddr =
p->pTable->pageAlign(
vaddr);
703 int primary_context =
bits(tlbdata, 47, 32);
719 int is_real_address = !
bits(tlbdata, 5);
731 ASI asi =
static_cast<ASI>(reg_asi);
737 bool trapped =
bits(tlbdata, 18, 16) > 0;
741 int context_id = ((!
hpriv && !
red && is_real_address) ||
744 ? 0 : primary_context;
747 int const partition_id = 0;
759 alignedvaddr, partition_id, context_id,
void invoke(ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr)
virtual RegVal readMiscRegNoEffect(RegIndex misc_reg) const =0
void getHyperVector(ThreadContext *tc, Addr &PC, Addr &NPC, RegVal TT)
void getPrivVector(ThreadContext *tc, Addr &PC, Addr &NPC, RegVal TT, RegVal TL)
void invoke(ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr)
virtual void handleTrap(ThreadContext *tc, int trapNum)
virtual BaseMMU * getMMUPtr()=0
virtual void invoke(ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr)
bool FullSystem
The FullSystem variable can be used to determine the current mode of simulation.
virtual Process * getProcessPtr()=0
@ MISCREG_TPC
Privilged Registers.
virtual PrivilegeLevel getNextLevel(PrivilegeLevel current)=0
void invoke(ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr)
Workload * workload
OS kernel.
void invoke(ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr)
ThreadContext is the external interface to all thread state for anything outside of the CPU.
SignedBitfield< 15, 8 > SH
void invoke(ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr)
void getREDVector(RegVal TT, Addr &PC, Addr &NPC)
virtual FaultStat & countStat()=0
uint64_t Addr
Address type This will probably be moved somewhere else in the near future.
void invoke(ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr)
virtual TheISA::PCState pcState() const =0
void doREDFault(ThreadContext *tc, TrapType tt)
This sets everything up for a RED state trap except for actually jumping to the handler.
@ MISCREG_HPSTATE
Hyper privileged registers.
MipsFaultBase::FaultVals FaultVals
#define panic_if(cond,...)
Conditional panic macro that checks the supplied condition and only panics if the condition is true a...
@ MISCREG_ASI
Ancillary State Registers.
void enterREDState(ThreadContext *tc)
This causes the thread context to enter RED state.
virtual TrapType trapType()=0
virtual void setMiscReg(RegIndex misc_reg, RegVal val)=0
constexpr T bits(T val, unsigned first, unsigned last)
Extract the bitfield from position 'first' to 'last' (inclusive) from 'val' and right justify it.
virtual void setMiscRegNoEffect(RegIndex misc_reg, RegVal val)=0
virtual RegVal readIntReg(RegIndex reg_idx) const =0
void doNormalFault(ThreadContext *tc, TrapType tt, bool gotoHpriv)
This sets everything up for a normal trap except for actually jumping to the handler.
#define ULL(N)
uint64_t constant
constexpr void replaceBits(T &val, unsigned first, unsigned last, B bit_val)
A convenience function to replace bits first to last of val with bit_val in place.
void invoke(ThreadContext *tc, const StaticInstPtr &inst=StaticInst::nullStaticInstPtr)
virtual System * getSystemPtr()=0
#define panic(...)
This implements a cprintf based panic() function.
Generated on Tue Mar 23 2021 19:41:19 for gem5 by doxygen 1.8.17