14 std::function<
bool(
unsigned )> matchesWidth,
25 "mode. using default match all rule.");
26 matchesMode = [](
uint32_t) {
return true; };
32 "width. using default match all rule.");
33 matchesWidth = [](unsigned) {
return true; };
39 "instruction. using default match all rule.");
44 rule->
mode = matchesMode;
45 rule->
width = matchesWidth;
46 rule->
instr = matchesInstr;
55 uint32_t refmode = std::get<0>(tuple);
56 unsigned refwidth = std::get<1>(tuple);
57 std::string refname = std::get<2>(tuple);
60 [refwidth](
unsigned width) {
return refwidth == width; },
68 std::regex refmode = std::get<0>(tuple);
69 std::regex refwidth = std::get<1>(tuple);
70 std::regex refname = std::get<2>(tuple);
73 [refwidth](
unsigned width) {
return std::regex_match(
etiss::toString(width), refwidth); },
80 for (
auto iter =
rules_.begin(); iter !=
rules_.end(); ++iter)
89 bool verifyCompleteness =
true;
91 std::set<etiss::instr::Instruction *> found;
92 std::set<etiss::instr::Instruction *> matched;
93 if (verifyCompleteness)
103 for (
auto iter =
rules_.begin(); iter !=
rules_.end(); ++iter)
113 if (rule->
mode(mode))
118 unsigned width = is.
width_;
119 if (rule->
width(width))
122 [&matched, rule](etiss::instr::Instruction &instr)
124 if (rule->instr(instr))
126 matched.insert(&instr);
127 rule->handler(instr);
137 if (verifyCompleteness)
139 for (
auto iter = matched.begin(); iter != matched.end(); ++iter)
143 for (
auto iter = found.begin(); iter != found.end(); ++iter)
146 ((DataSheetAccurateTiming *)
this)->_getPluginName() +
147 "] ignored instruction " + (*iter)->toString());
contains container classes to store instruction definitions + translation functions and build a trans...
static __inline__ uint32_t
virtual void initInstrSet(etiss::instr::ModedInstructionSet &) const
performs lookups for instructions that are in the modded instruction set to add timing code (e....
std::list< Rule * > rules_
void addRule(std::function< bool(uint32_t)> matchesMode, std::function< bool(unsigned)> matchesWidth, std::function< bool(etiss::instr::Instruction &)> matchesInstr, std::function< void(etiss::instr::Instruction &)> handleMatch)
this is the main add rule function.
virtual ~DataSheetAccurateTiming()
holds etiss::instr::Instruction instances and handles automatic instruction tree creation.
void foreach(std::function< void(Instruction &)> func)
holds information and translation callbacks for an instruction.
holds etiss::instr::VariableInstructionSet instances for different modes.
uint32_t getMode(VariableInstructionSet *vis)
void foreach(std::function< void(VariableInstructionSet &)> call)
holds etiss::instr::InstructionSet instances with different bit widths.
void foreach(std::function< void(InstructionSet &)> func)
ModedInstructionSet & parent_
std::string toString(const T &val)
conversion of type T to std::string.
void log(Verbosity level, std::string msg)
write log message at the given level.
std::function< void(etiss::instr::Instruction &)> handler
std::function< bool(etiss::instr::Instruction &)> instr
std::function< bool(unsigned)> width
std::function< bool(uint32_t)> mode