21 #ifndef OTAWA_HARD_PROCESSOR_H
22 #define OTAWA_HARD_PROCESSOR_H
24 #include <elm/string.h>
25 #include <elm/serial2/macros.h>
26 #include <elm/serial2/collections.h>
27 #include <elm/genstruct/Table.h>
29 #include <elm/util/strong_type.h>
31 #include <elm/system/Path.h>
34 namespace otawa {
namespace hard {
37 using namespace elm::genstruct;
38 class ProcessorBuilder;
50 inline bool isMem(
void)
const {
return mem; }
111 template <
class T>
inline T select(
Inst *
inst,
const T
table[])
const;
119 & FIELD(output) & FIELD(intern));
139 & FIELD(builder) & FIELD(stages) & FIELD(queues) & FIELD(frequency));
168 return select<T>(inst->
kind(), table);
173 for(
int i = 0; i < dispatch.count(); i++) {
175 if((mask & kind) == mask)
187 namespace elm {
namespace serial2 {
192 #endif // OTAWA_HARD_PROCESSOR_H
int latency
Definition: Processor.h:53
type_t getType(void) const
Definition: Processor.h:82
The usual Feature class has as drawback to exhibit completely the processing of the feature and there...
Definition: SilentFeature.h:32
virtual ~Dispatch(void)
Definition: Processor.h:81
elm::String getArch(void) const
Definition: Processor.h:144
elm::String getName(void) const
Definition: Processor.h:127
struct otawa::sem::inst inst
const Table< Dispatch * > & getDispatch(void) const
Definition: Processor.h:109
Identifier< const Processor * > PROCESSOR
Current memory.
Processor(void)
Definition: Processor.h:142
virtual ~Stage(void)
Definition: Processor.h:106
A dispatch object allows to map some kinds of instructions to a functional unit.
Definition: Processor.h:71
static const Processor null
Definition: Processor.h:151
Queue(void)
Definition: Processor.h:125
t::uint64 getFrequency(void) const
Definition: Processor.h:149
int getLatency(void) const
Definition: Processor.h:47
PipelineUnit(void)
Definition: Processor.h:44
type_t type
Definition: Processor.h:77
virtual ~Queue(void)
Definition: Processor.h:126
t::uint32 mask
Definition: base.h:45
const AllocatedTable< Stage * > & getIntern(void) const
Definition: Processor.h:131
Definition: Processor.h:96
Definition: ClpValue.h:54
virtual ~FunctionalUnit(void)
Definition: Processor.h:66
AllocatedTable< Queue * > queues
Definition: Processor.h:160
Definition: ProcessorBuilder.h:79
type_t type
Definition: Processor.h:100
bool ordered
Definition: Processor.h:103
AllocatedTable< FunctionalUnit * > fus
Definition: Processor.h:101
Definition: Processor.h:93
FunctionalUnit(void)
Definition: Processor.h:65
Stage * output
Definition: Processor.h:122
Definition: ProcessorBuilder.h:62
Description of a processor pipeline.
Definition: Processor.h:136
elm::String arch
Definition: Processor.h:156
Stage(type_t _type=NONE)
Definition: Processor.h:105
Definition: Processor.h:94
bool pipelined
Definition: Processor.h:63
bool isBranch(void) const
Definition: Processor.h:49
elm::String builder
Definition: Processor.h:158
bool branch
Definition: Processor.h:55
Inst::kind_t kind
Definition: odisasm.cpp:106
bool isMem(void) const
Definition: Processor.h:50
int width
Definition: Processor.h:54
type_t getType(void) const
Definition: Processor.h:107
virtual ~PipelineUnit(void)
Definition: Processor.h:45
Definition: ProcessorBuilder.h:30
virtual ~Processor(void)
Definition: Processor.h:143
This class represents a stage in a pipeline.
Definition: Processor.h:87
FunctionalUnit * fu
Definition: Processor.h:78
elm::String name
Definition: Processor.h:120
#define STRONG_TYPE(N, T)
bool isOrdered(void) const
Definition: Processor.h:110
Definition: Processor.h:41
virtual kind_t kind(void)=0
Get the kind of the current instruction.
Definition: Processor.h:95
inst load(int d, int a, int t)
Definition: inst.h:153
int getWidth(void) const
Definition: Processor.h:48
AllocatedTable< Stage * > intern
Definition: Processor.h:123
The instructions queues stores instruction that come from one stage to another one.
Definition: Processor.h:116
type_t
Definition: Processor.h:91
elm::t::uint32 kind_t
Definition: Inst.h:67
int getSize(void) const
Definition: Processor.h:128
AllocatedTable< Stage * > stages
Definition: Processor.h:159
const Table< Queue * > & getQueues(void) const
Definition: Processor.h:148
AllocatedTable< Dispatch * > dispatch
Definition: Processor.h:102
A functional unit is specialized in the computation of some kinds of instructions.
Definition: Processor.h:60
bool isPipelined(void) const
Definition: Processor.h:67
This class represents identifier with a typed associated value.
Definition: Identifier.h:51
cstring name
Definition: odisasm.cpp:107
const Table< FunctionalUnit * > & getFUs(void) const
Definition: Processor.h:108
elm::String getModel(void) const
Definition: Processor.h:145
Exception thrown when a loader encounters an error during load.
Definition: Manager.h:52
FunctionalUnit * getFU(void) const
Definition: Processor.h:83
This class represents assembly instruction of a piece of code.
Definition: Inst.h:62
Stage * getOutput(void) const
Definition: Processor.h:130
const Table< Stage * > & getStages(void) const
Definition: Processor.h:147
Definition: ProcessorBuilder.h:43
IntFormat width(int width, IntFormat fmt)
elm::String getName(void) const
Definition: Processor.h:46
elm::String getBuilder(void) const
Definition: Processor.h:146
string name
Definition: Processor.h:52
Stage * getInput(void) const
Definition: Processor.h:129
t::uint64 frequency
Definition: Processor.h:161
const Type & type(void)
Definition: type.h:163
elm::String model
Definition: Processor.h:157
inst branch(int to)
Definition: inst.h:149
T select(Inst *inst, const T table[]) const
Definition: Processor.h:167
int size
Definition: Processor.h:121
SilentFeature PROCESSOR_FEATURE
This feature ensures we have obtained the memory configuration of the system.
Dispatch(void)
Definition: Processor.h:80
ENUM(otawa::hard::Stage::type_t)
type_t
Definition: features.h:57
bool mem
Definition: Processor.h:56