ETISS 0.11.2
ExtendableTranslatingInstructionSetSimulator(version0.11.2)
Loading...
Searching...
No Matches
CPUArch.h
Go to the documentation of this file.
1// SPDX-License-Identifier: BSD-3-Clause
2//
3// This file is part of ETISS. It is licensed under the BSD 3-Clause License; you may not use this file except in
4// compliance with the License. You should have received a copy of the license along with this project. If not, see the
5// LICENSE file.
16#ifndef ETISS_INCLUDE_CPUARCH_H_
17#define ETISS_INCLUDE_CPUARCH_H_
18
19#include <map>
20#include <set>
21#include <string>
22
23#include "etiss/Misc.h"
25#include "etiss/Plugin.h"
26
27namespace etiss
28{
29
37{
38 public:
40
44 virtual const std::set<std::string> &getListenerSupportedRegisters() = 0;
45
46 public:
71 static void signalChangedRegisterValue(ETISS_CPU *cpu, const char *registerName);
72};
73
80{
81 public:
83
87 virtual std::shared_ptr<etiss::VirtualStruct> getVirtualStruct(ETISS_CPU *cpu) = 0;
88};
89
94{
95 public:
101 virtual etiss::Plugin *newTimer(ETISS_CPU *cpu);
106 virtual void deleteTimer(etiss::Plugin *timer);
107};
108
115 public TranslationPlugin
116{
117 friend class LibraryInterface;
118
119 public:
124 CPUArch(std::string archname);
125 virtual ~CPUArch();
126
132 std::string getArchName() const;
133
138 inline std::string getName() const { return getArchName(); }
142 virtual ETISS_CPU *newCPU() = 0;
146 virtual void resetCPU(ETISS_CPU *cpu, etiss::uint64 *startpointer) = 0;
150 virtual void deleteCPU(ETISS_CPU *) = 0;
155 virtual unsigned getMaximumInstructionSizeInBytes() = 0;
163 virtual unsigned getInstructionSizeInBytes() = 0;
168 virtual unsigned getSuperInstructionCount();
172 virtual std::string getBlockGlobalCode();
177 virtual bool unlikelyInstruction(etiss::uint8 *instr, unsigned length, bool &ismetainstruction);
182 virtual const std::set<std::string> &getHeaders() const = 0;
186 virtual etiss::int32 handleException(etiss::int32 code, ETISS_CPU *cpu);
195
198
206 virtual std::string getIncludePath();
217 virtual void compensateEndianess(ETISS_CPU *cpu, etiss::instr::BitArray &ba) const;
218
222 virtual etiss::mm::MMU *newMMU(ETISS_CPU *cpu) { return nullptr; }
223
224 protected:
226 virtual std::string _getPluginName() const;
227
228 private:
230 std::string archname_;
231};
232
233} // namespace etiss
234
235#endif
general configuration and logging
plugins for extensions to code translation and instruction execution
interface for cpu structure access.
Definition CPUArch.h:80
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:94
virtual etiss::Plugin * newTimer(ETISS_CPU *cpu)
create a simple default timer implementaion instance for this architecture.
Definition CPUArch.cpp:30
virtual void deleteTimer(etiss::Plugin *timer)
delete timer instance
Definition CPUArch.cpp:35
virtual ~CPUArchDefaultPlugins()
Definition CPUArch.h:96
allows to inform plugins about changes to a register that is present in the cpu structure.
Definition CPUArch.h:37
static void signalChangedRegisterValue(ETISS_CPU *cpu, const char *registerName)
call this function to inform RegisterDevicePlugins about changed special register values.
Definition CPUCore.cpp:26
virtual const std::set< std::string > & getListenerSupportedRegisters()=0
the interface to translate instructions of and processor architecture
Definition CPUArch.h:116
virtual void deleteCPU(ETISS_CPU *)=0
delete cpu structure
std::string archname_
Definition CPUArch.h:230
virtual void resetCPU(ETISS_CPU *cpu, etiss::uint64 *startpointer)=0
reset cpu (structure)
virtual etiss::InterruptEnable * createInterruptEnable(ETISS_CPU *cpu)
Definition CPUArch.cpp:104
virtual std::string getIncludePath()
returns a path that will be used to look up header files
Definition CPUArch.cpp:118
virtual unsigned getMaximumInstructionsPerMetaInstruction()
maximum number of instructions in a meta instruction
Definition CPUArch.cpp:78
virtual etiss::mm::MMU * newMMU(ETISS_CPU *cpu)
It is an interface to instanciate a Memory Management Unit.
Definition CPUArch.h:222
virtual std::string getBlockGlobalCode()
get c++ code snippet that is placed at the top of a translated block
Definition CPUArch.cpp:73
virtual etiss::plugin::gdb::GDBCore & getGDBCore()
returns arch dependent gdb functions.
Definition CPUArch.cpp:113
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:123
virtual void deleteInterruptVector(etiss::InterruptVector *vec, ETISS_CPU *cpu)
delete an allocated interrupt vector object
Definition CPUArch.cpp:98
virtual etiss::InterruptVector * createInterruptVector(ETISS_CPU *cpu)
allocate a new interrupt vector object for the given cpu
Definition CPUArch.cpp:94
virtual void deleteInterruptEnable(etiss::InterruptEnable *en, ETISS_CPU *cpu)
Definition CPUArch.cpp:108
std::string getArchName() const
returns the name of this architecture.
Definition CPUArch.cpp:47
etiss::plugin::gdb::GDBCore gdbcore_
Definition CPUArch.h:229
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:52
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:158
virtual unsigned getSuperInstructionCount()
fixed number of sub instructions per instruction (e.g.
Definition CPUArch.cpp:84
virtual ETISS_CPU * newCPU()=0
allocate new cpu structure
virtual ~CPUArch()
Definition CPUArch.cpp:45
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:152
virtual etiss::int32 handleException(etiss::int32 code, ETISS_CPU *cpu)
translate/process exceptions that occur at runtime
Definition CPUArch.cpp:89
std::string getName() const
returns the name of this architecture.
Definition CPUArch.h:138
interface to set interrupt bits
interface class for libraries.
base plugin class that provides access to different plugin functions if present
Definition Plugin.h:38
allows to add code to the translation of instructions
Definition Plugin.h:222
stores a bit vector
holds etiss::instr::VariableInstructionSet instances for different modes.
provides to architecture dependent registers as defined by gdb
Definition GDBCore.h:39
forwards: include/jit/*
Definition Benchmark.h:17
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:51