diff options
author | Min Kyu Jeong <minkyu.jeong@arm.com> | 2010-08-25 19:10:43 -0500 |
---|---|---|
committer | Min Kyu Jeong <minkyu.jeong@arm.com> | 2010-08-25 19:10:43 -0500 |
commit | c23e8c31ebd4e856f205f5bdd8f4eb5e1eec87ee (patch) | |
tree | a04e718c24dc0d40829342042fba144b187fd1bb /src/arch/arm/isa/formats/unimp.isa | |
parent | 8376f7bca3814844ab9cc592ff8f32c702a18629 (diff) | |
download | gem5-c23e8c31ebd4e856f205f5bdd8f4eb5e1eec87ee.tar.xz |
ARM: Adding a bogus fault that does nothing.
This fault can used to flush the pipe, not including the faulting instruction.
The particular case I needed this was for a self-modifying code. It needed to
drain the store queue and force the following instruction to refetch from
icache. DCCMVAC cp15 mcr instruction is modified to raise this fault.
Diffstat (limited to 'src/arch/arm/isa/formats/unimp.isa')
-rw-r--r-- | src/arch/arm/isa/formats/unimp.isa | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/src/arch/arm/isa/formats/unimp.isa b/src/arch/arm/isa/formats/unimp.isa index a746f8a7b..a0e0afd32 100644 --- a/src/arch/arm/isa/formats/unimp.isa +++ b/src/arch/arm/isa/formats/unimp.isa @@ -101,6 +101,22 @@ output header {{ std::string generateDisassembly(Addr pc, const SymbolTable *symtab) const; }; + + class FlushPipeInst : public ArmStaticInst + { + public: + FlushPipeInst(const char *_mnemonic, ExtMachInst _machInst) + : ArmStaticInst(_mnemonic, _machInst, No_OpClass) + { + flags[IsNonSpeculative] = true; + } + + %(BasicExecDeclare)s + + std::string + generateDisassembly(Addr pc, const SymbolTable *symtab) const; + + }; }}; output decoder {{ @@ -117,6 +133,13 @@ output decoder {{ { return csprintf("%-10s (unimplemented)", mnemonic); } + + std::string + FlushPipeInst::generateDisassembly(Addr pc, + const SymbolTable *symtab) const + { + return csprintf("%-10s (pipe flush)", mnemonic); + } }}; output exec {{ @@ -142,6 +165,13 @@ output exec {{ return NoFault; } + + Fault + FlushPipeInst::execute(%(CPU_exec_context)s *xc, + Trace::InstRecord *traceData) const + { + return new FlushPipe(); + } }}; |