ETISS 0.8.0
Extendable Translating Instruction Set Simulator (version 0.8.0)
All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Modules Pages
CPUArch.h
Go to the documentation of this file.
1
54#ifndef ETISS_INCLUDE_CPUARCH_H_
55#define ETISS_INCLUDE_CPUARCH_H_
56
57#include <map>
58#include <set>
59#include <string>
60
61#include "etiss/CodePart.h"
62#include "etiss/Instruction.h"
66#include "etiss/Plugin.h"
67#include "etiss/VirtualStruct.h"
68#include "etiss/jit/CPU.h"
69#include "etiss/jit/ReturnCode.h"
70#include "etiss/jit/System.h"
71#include "etiss/mm/MMU.h"
72
73namespace etiss
74{
75
83{
84 public:
86
90 virtual const std::set<std::string> &getListenerSupportedRegisters() = 0;
91
92 public:
117 static void signalChangedRegisterValue(ETISS_CPU *cpu, const char *registerName);
118};
119
126{
127 public:
128 virtual ~CPUArchCPUManipulation();
129
133 virtual std::shared_ptr<etiss::VirtualStruct> getVirtualStruct(ETISS_CPU *cpu) = 0;
134};
135
140{
141 public:
147 virtual etiss::Plugin *newTimer(ETISS_CPU *cpu);
152 virtual void deleteTimer(etiss::Plugin *timer);
153};
154
161 public TranslationPlugin
162{
163 friend class LibraryInterface;
164
165 public:
170 CPUArch(std::string archname);
171 virtual ~CPUArch();
172
178 std::string getArchName() const;
179
184 inline std::string getName() const { return getArchName(); }
188 virtual ETISS_CPU *newCPU() = 0;
192 virtual void resetCPU(ETISS_CPU *cpu, etiss::uint64 *startpointer) = 0;
196 virtual void deleteCPU(ETISS_CPU *) = 0;
201 virtual unsigned getMaximumInstructionSizeInBytes() = 0;
209 virtual unsigned getInstructionSizeInBytes() = 0;
214 virtual unsigned getSuperInstructionCount();
218 virtual std::string getBlockGlobalCode();
223 virtual bool unlikelyInstruction(etiss::uint8 *instr, unsigned length, bool &ismetainstruction);
228 virtual const std::set<std::string> &getHeaders() const = 0;
232 virtual etiss::int32 handleException(etiss::int32 code, ETISS_CPU *cpu);
241
244
252 virtual std::string getIncludePath();
263 virtual void compensateEndianess(ETISS_CPU *cpu, etiss::instr::BitArray &ba) const;
264
268 virtual etiss::mm::MMU *newMMU(ETISS_CPU *cpu) { return nullptr; }
269
270 protected:
272 virtual std::string _getPluginName() const;
273
274 private:
276 std::string archname_;
277};
278
279} // namespace etiss
280
281#endif
classes to hold code and additional information used for optimization of instruction translations
contains container classes to store instruction definitions + translation functions and build a trans...
defines a general interface to set interrupt bits
Modeling hardware memory management for virtual memory -> physical memory translation and protection.
plugins for extensions to code translation and instruction execution
interface for cpu structure access.
Definition CPUArch.h:126
virtual std::shared_ptr< etiss::VirtualStruct > getVirtualStruct(ETISS_CPU *cpu)=0
this function must return a valid pointer to a virtual struct
provides common basic plugins
Definition CPUArch.h:140
virtual etiss::Plugin * newTimer(ETISS_CPU *cpu)
create a simple default timer implementaion instance for this architecture.
Definition CPUArch.cpp:64
virtual void deleteTimer(etiss::Plugin *timer)
delete timer instance
Definition CPUArch.cpp:69
allows to inform plugins about changes to a register that is present in the cpu structure.
Definition CPUArch.h:83
static void signalChangedRegisterValue(ETISS_CPU *cpu, const char *registerName)
call this function to inform RegisterDevicePlugins about changed special register values.
Definition CPUCore.cpp:43
virtual const std::set< std::string > & getListenerSupportedRegisters()=0
the interface to translate instructions of and processor architecture
Definition CPUArch.h:162
virtual void deleteCPU(ETISS_CPU *)=0
delete cpu structure
std::string archname_
Definition CPUArch.h:276
virtual void resetCPU(ETISS_CPU *cpu, etiss::uint64 *startpointer)=0
reset cpu (structure)
virtual etiss::InterruptEnable * createInterruptEnable(ETISS_CPU *cpu)
Definition CPUArch.cpp:138
virtual std::string getIncludePath()
returns a path that will be used to look up header files
Definition CPUArch.cpp:150
virtual unsigned getMaximumInstructionsPerMetaInstruction()
maximum number of instructions in a meta instruction
Definition CPUArch.cpp:112
virtual etiss::mm::MMU * newMMU(ETISS_CPU *cpu)
It is an interface to instanciate a Memory Management Unit.
Definition CPUArch.h:268
virtual std::string getBlockGlobalCode()
get c++ code snippet that is placed at the top of a translated block
Definition CPUArch.cpp:107
virtual etiss::plugin::gdb::GDBCore & getGDBCore()
returns arch dependent gdb functions.
Definition CPUArch.cpp:145
virtual unsigned getInstructionSizeInBytes()=0
size of one instruction/ smalest data unit for instructions of variable length
virtual std::string _getPluginName() const
do not override. maps to getName().
Definition CPUArch.cpp:155
virtual void deleteInterruptVector(etiss::InterruptVector *vec, ETISS_CPU *cpu)
delete an allocated interrupt vector object
Definition CPUArch.cpp:132
virtual etiss::InterruptVector * createInterruptVector(ETISS_CPU *cpu)
allocate a new interrupt vector object for the given cpu
Definition CPUArch.cpp:128
virtual void deleteInterruptEnable(etiss::InterruptEnable *en, ETISS_CPU *cpu)
Definition CPUArch.cpp:141
std::string getArchName() const
returns the name of this architecture.
Definition CPUArch.cpp:81
etiss::plugin::gdb::GDBCore gdbcore_
Definition CPUArch.h:275
virtual bool unlikelyInstruction(etiss::uint8 *instr, unsigned length, bool &ismetainstruction)
return true if the given data is unlikely to be an instruction.
Definition CPUArch.cpp:86
virtual const std::set< std::string > & getHeaders() const =0
set of code header files e.g.
virtual unsigned getMaximumInstructionSizeInBytes()=0
used for variable instruction size and delay slots
virtual void compensateEndianess(ETISS_CPU *cpu, etiss::instr::BitArray &ba) const
this function should compensate for any endianess on a BitArray so that bit 0 is always the LSB.
Definition CPUArch.cpp:188
virtual unsigned getSuperInstructionCount()
fixed number of sub instructions per instruction (e.g.
Definition CPUArch.cpp:118
virtual ETISS_CPU * newCPU()=0
allocate new cpu structure
virtual ~CPUArch()
Definition CPUArch.cpp:79
virtual void finalizeInstrSet(etiss::instr::ModedInstructionSet &) const
the default behavior of this function of a cpu arch is to add "cpu->cpuTime_ps += cpu->cpuCycleTime_p...
Definition CPUArch.cpp:181
virtual etiss::int32 handleException(etiss::int32 code, ETISS_CPU *cpu)
translate/process exceptions that occur at runtime
Definition CPUArch.cpp:123
std::string getName() const
returns the name of this architecture.
Definition CPUArch.h:184
interface to set interrupt bits
interface class for libraries.
base plugin class that provides access to different plugin functions if present
Definition Plugin.h:77
allows to add code to the translation of instructions
Definition Plugin.h:262
stores a bit vector
holds etiss::instr::VariableInstructionSet instances for different modes.
provides to architecture dependent registers as defined by gdb
Definition GDBCore.h:77
Page Table Entry (PTE) defines the composition of Page Frame Number (PFN) and relavant flags.
Definition Benchmark.h:53
float __ovld __cnfn length(float p)
Return the length of vector p, i.e., sqrt(p.x2 + p.y 2 + ...)
basic cpu state structure needed for execution of any cpu architecture.
Definition CPU.h:89