OpenASIP  2.0
ImmediateGenerator.cc
Go to the documentation of this file.
1 /*
2  Copyright (c) 2002-2009 Tampere University.
3 
4  This file is part of TTA-Based Codesign Environment (TCE).
5 
6  Permission is hereby granted, free of charge, to any person obtaining a
7  copy of this software and associated documentation files (the "Software"),
8  to deal in the Software without restriction, including without limitation
9  the rights to use, copy, modify, merge, publish, distribute, sublicense,
10  and/or sell copies of the Software, and to permit persons to whom the
11  Software is furnished to do so, subject to the following conditions:
12 
13  The above copyright notice and this permission notice shall be included in
14  all copies or substantial portions of the Software.
15 
16  THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17  IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18  FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19  THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
20  LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
21  FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
22  DEALINGS IN THE SOFTWARE.
23  */
24 /**
25  * @file ImmediateGenerator.cc
26  *
27  * Explorer plugin that creates or modifies machine instruction templates.
28  *
29  * @author Esa Määttä 2007 (esa.maatta-no.spam-tut.fi)
30  * @note rating: red
31  */
32 
33 #include <vector>
34 #include <string>
35 #include <set>
36 
38 #include "DSDBManager.hh"
39 #include "Machine.hh"
40 #include "TemplateSlot.hh"
41 #include "Exception.hh"
42 
43 #include "TestApplication.hh"
44 #include "Program.hh"
45 #include "Instruction.hh"
46 #include "Move.hh"
47 #include "Terminal.hh"
48 #include "HDBRegistry.hh"
50 #include "ControlUnit.hh"
51 #include "HWOperation.hh"
52 #include "StringTools.hh"
53 #include "Segment.hh"
54 #include "CostEstimates.hh"
55 #include "Application.hh"
56 #include "Procedure.hh"
58 #include "Conversion.hh"
59 
60 using namespace TTAProgram;
61 using namespace TTAMachine;
62 using namespace HDB;
63 using std::endl;
64 
65 /**
66  * Explorer plugin that creates or modifies machine instruction template by
67  * adding/removing immediates.
68  */
70  PLUGIN_DESCRIPTION("Creates immediates for configuration.");
71 
73  createNewConfig_(false),
74  print_(false),
75  removeInsTemplateName_(""),
76  addInsTemplateName_(""),
77  modInsTemplateName_(""),
78  width_(32),
79  widthPart_(8),
80  split_(false),
81  dstImmUnitName_("") {
82 
83  // compulsory parameters
84  // no compulsory parameters
85 
86  // parameters that have a default value
87  addParameter(printPN_, BOOL, false, Conversion::toString(print_));
88  addParameter(removeInsTemplateNamePN_, STRING, false, removeInsTemplateName_);
89  addParameter(addInsTemplateNamePN_, STRING, false, addInsTemplateName_);
90  addParameter(modInsTemplateNamePN_, STRING, false, modInsTemplateName_);
91  addParameter(widthPN_, UINT, false, Conversion::toString(width_));
92  addParameter(widthPartPN_, UINT, false, Conversion::toString(widthPart_));
93  addParameter(splitPN_, BOOL, false, Conversion::toString(split_));
94  addParameter(dstImmUnitNamePN_, STRING, false, dstImmUnitName_);
95  }
96 
97  virtual bool requiresStartingPointArchitecture() const { return true; }
98  virtual bool producesArchitecture() const { return true; }
99  virtual bool requiresHDB() const { return false; }
100  virtual bool requiresSimulationData() const { return false; }
101  virtual bool requiresApplication() const { return false; }
102 
103  /**
104  * Explorer plugin that creates or modifies machine instruction templates.
105  * TODO: add some modifying functionality.
106  *
107  * Supported parameters:
108  * - print, boolean, print information about machines instruction templates.
109  * - remove_it_name, string, remove instruction template with a given name.
110  * - add_it_name, string, add empty instruction template with a given name.
111  * - modify_it_name, string, modify instruction template with a given name.
112  * - width, int, instruction template supported width.
113  * - width_part, int, minimum size of width per slot. Default 8.
114  * - split, boolean, split immediate among slots.
115  * - dst_imm_unit, string, destination immediate unit.
116  *
117  * @param startPointConfigurationID Configuration to optimize.
118  */
119  virtual std::vector<RowID>
120  explore(const RowID& startPointConfigurationID, const unsigned int&) {
121 
122  // XXX: does this plugin have to touch short immediates.
123 
124  std::vector<RowID> result;
125 
126  readParameters();
127 
128  try {
129  DSDBManager& dsdb = db();
130  // loads starting configuration
132  dsdb.configuration(startPointConfigurationID);
133 
134  // load machine from configuration
135  //Machine* origMach = NULL;
136  Machine* mach = NULL;
137  try {
138  //origMach = dsdb.architecture(conf.architectureID);
139  mach = dsdb.architecture(conf.architectureID);
140  } catch (const Exception& e) {
141  std::ostringstream msg(std::ostringstream::out);
142  msg << e.errorMessage() << endl;
143  verboseLog(msg.str());
144  return result;
145  }
146 
147  if (!removeInsTemplateName_.empty()) {
148  removeInsTemplate(*mach, removeInsTemplateName_);
149  }
150 
151  if (!addInsTemplateName_.empty()) {
152  if (split_) {
153  addSplitInsTemplate(*mach, addInsTemplateName_);
154  } else {
155  addInsTemplate(*mach, addInsTemplateName_);
156  }
157  }
158 
159  // print immediate info if print parameter given
160  if (print_) {
161  printImmediateTemplates(*mach);
162  }
163 
164  if (createNewConfig_) {
165  // create the new configuration to be saved to dsdb
166  // do long immediates affect these
168  if (conf.hasImplementation) {
169  newConf.hasImplementation = true;
171  dsdb.implementation(conf.implementationID);
172  CostEstimator::Estimator estimator;
174  estimator.totalArea(*mach, *idf);
175  CostEstimator::DelayInNanoSeconds longestPathDelay =
176  estimator.longestPath(*mach, *idf);
177  newConf.implementationID =
178  dsdb.addImplementation(*idf, longestPathDelay, area);
179  } else {
180  newConf.hasImplementation = false;
181  }
182  newConf.architectureID = dsdb.addArchitecture(*mach);
183  CostEstimates estimates;
184 
185  RowID confID = dsdb.addConfiguration(newConf);
186  result.push_back(confID);
187  }
188 
189  } catch (const Exception& e) {
190  std::ostringstream msg(std::ostringstream::out);
191  msg << "Error while using ImmediateGenerator:" << endl
192  << e.errorMessage() << endl;
193  verboseLog(msg.str());
194  return result;
195  }
196  return result;
197  }
198 
199 private:
200  /// Boolean value used to decide if new config is created.
202 
203  // parameter names
204  static const std::string printPN_;
205  static const std::string removeInsTemplateNamePN_;
206  static const std::string addInsTemplateNamePN_;
207  static const std::string modInsTemplateNamePN_;
208  static const std::string widthPN_;
209  static const std::string widthPartPN_;
210  static const std::string splitPN_;
211  static const std::string dstImmUnitNamePN_;
212 
213  // parameters
214  /// print values
215  bool print_;
216  /// instruction template name to be removed.
218  /// instruction template name to be added.
219  std::string addInsTemplateName_;
220  /// instruction template name to be modified.
221  std::string modInsTemplateName_;
222  /// width of the target template
223  unsigned int width_;
224  /// minimum width on long instruction slot when splitting the template.
225  unsigned int widthPart_;
226  /// make evenly bus/slot wise splitted template.
227  bool split_;
228  /// destination immediate unit name
229  std::string dstImmUnitName_;
230 
231 
232  /**
233  * Reads the parameters given to the plugin.
234  */
235  void readParameters() {
236  readCompulsoryParameter(printPN_, print_);
237  readCompulsoryParameter(removeInsTemplateNamePN_, removeInsTemplateName_);
238  readCompulsoryParameter(addInsTemplateNamePN_, addInsTemplateName_);
239  readCompulsoryParameter(modInsTemplateNamePN_, modInsTemplateName_);
240  readCompulsoryParameter(widthPN_, width_);
241  readCompulsoryParameter(widthPartPN_, widthPart_);
242  readCompulsoryParameter(splitPN_, split_);
243  readCompulsoryParameter(dstImmUnitNamePN_, dstImmUnitName_);
244  }
245 
246 
247  /**
248  * Print info about instruction templates of a given machine.
249  *
250  * @param mach Machine which instruction templates are to be printed.
251  */
255 
256  std::ostringstream msg(std::ostringstream::out);
257  msg << "====== Instruction templates: =======" << endl;
258 
259  TTAMachine::InstructionTemplate* insTemplate = NULL;
260  TTAMachine::TemplateSlot* tempSlot = NULL;
261  for (int it = 0; it < ITNav.count(); it++) {
262  insTemplate = ITNav.item(it);
263 
264  msg << "Instruction template: " << insTemplate->name() << endl;
265  if (insTemplate->isEmpty()) {
266  msg << "\tEmpty instruction template." << endl;
267  continue;
268  }
269 
270  msg << "\tSlot count: " << insTemplate->slotCount() << endl;
271  for (int sc = 0; sc < insTemplate->slotCount(); sc++) {
272  tempSlot = insTemplate->slot(sc);
273  msg << "\t\tSlot name: " << tempSlot->slot() << endl;
274  msg << "\t\tSlot width: " << tempSlot->width() << endl;
275  msg << "\t\tSlot destination: "
276  << tempSlot->destination()->name() << endl;
277  }
278 
279  msg << "\tSupported Width: " << insTemplate->supportedWidth() << endl;
280  msg << "\tNumber of Destinations: "
281  << insTemplate->numberOfDestinations() << endl;
282  }
283  verboseLog(msg.str());
284  }
285 
286  /**
287  * Removes instruction template with a name given as parameter.
288  *
289  * @param mach Target machine.
290  * @param name Instruction template name to be removed.
291  */
292  void removeInsTemplate(TTAMachine::Machine& mach, std::string name) {
295 
296  TTAMachine::InstructionTemplate* insTemplate = NULL;
297  for (int it = 0; it < ITNav.count(); it++) {
298  insTemplate = ITNav.item(it);
299  if (insTemplate->name() == name) {
300  mach.deleteInstructionTemplate(*insTemplate);
301  createNewConfig_ = true;
302  }
303  }
304 
305  if (!createNewConfig_) {
306  std::ostringstream msg(std::ostringstream::out);
307  msg << "Error while using ImmediateGenerator:" << endl
308  << "Instruction template with name \"" << name
309  << "\" was not found." << endl;
310  verboseLog(msg.str());
311  }
312  }
313 
314  /**
315  * Adds instruction template with a name given as parameter.
316  *
317  * @param mach Target machine.
318  * @param name Instruction template name to be added.
319  */
320  void addInsTemplate(TTAMachine::Machine& mach, std::string name) {
321  TTAMachine::InstructionTemplate* insTemplate = NULL;
322 
323  try {
324  insTemplate = new InstructionTemplate(name, mach);
325  } catch (ComponentAlreadyExists& e) {
326  std::ostringstream msg(std::ostringstream::out);
327  msg << "Error while using ImmediateGenerator:" << endl
328  << e.errorMessage() << endl;
329  verboseLog(msg.str());
330  delete insTemplate;
331  return;
332  } catch (InvalidName& e) {
333  std::ostringstream msg(std::ostringstream::out);
334  msg << "Error while using ImmediateGenerator:" << endl
335  << e.errorMessage() << endl;
336  verboseLog(msg.str());
337  delete insTemplate;
338  return;
339  }
340  createNewConfig_ = true;
341  }
342 
343  /**
344  * Adds instruction template with a name given as parameter and add
345  * bus wise splitted slots to the template.
346  *
347  * @param mach Target machine.
348  * @param name Instruction template name to be added.
349  */
350  void addSplitInsTemplate(TTAMachine::Machine& mach, std::string name) {
351  TTAMachine::InstructionTemplate* insTemplate = NULL;
352 
353  // find target immediate unit for the instruction template slots
355  mach.immediateUnitNavigator();
356 
357  TTAMachine::ImmediateUnit* immUnit = NULL;
358  TTAMachine::ImmediateUnit* dstImmUnit = NULL;
359  if (dstImmUnitName_.empty()) {
360  // if no destination immediate unit specified take one if exists
361  if (IUNav.count() > 0) {
362  dstImmUnit = IUNav.item(0);
363  } else {
364  std::ostringstream msg(std::ostringstream::out);
365  msg << "Error while using ImmediateGenerator:" << endl
366  << "No immediate units." << endl;
367  verboseLog(msg.str());
368  return;
369  }
370  } else {
371  for (int iu = 0; iu < IUNav.count(); iu++) {
372  immUnit = IUNav.item(iu);
373  if (immUnit->name() == dstImmUnitName_) {
374  dstImmUnit = immUnit;
375  }
376  }
377  if (dstImmUnit == NULL) {
378  std::ostringstream msg(std::ostringstream::out);
379  msg << "Error while using ImmediateGenerator:" << endl
380  << "Given destination immediate unit \""
381  << dstImmUnitName_ << "\" was not found." << endl;
382  verboseLog(msg.str());
383  return;
384  }
385  }
386 
387  // add instruction template
388  try {
389  insTemplate = new InstructionTemplate(name, mach);
390  } catch (ComponentAlreadyExists& e) {
391  std::ostringstream msg(std::ostringstream::out);
392  msg << "Error while using ImmediateGenerator:" << endl
393  << e.errorMessage() << endl;
394  verboseLog(msg.str());
395  delete insTemplate;
396  insTemplate = NULL;
397  return;
398  } catch (InvalidName& e) {
399  std::ostringstream msg(std::ostringstream::out);
400  msg << "Error while using ImmediateGenerator:" << endl
401  << e.errorMessage() << endl;
402  verboseLog(msg.str());
403  delete insTemplate;
404  insTemplate = NULL;
405  return;
406  }
407 
408  // TODO: split among immediate slots also?
409  Machine::BusNavigator busNav = mach.busNavigator();
410 
411  int slotCount = (width_/widthPart_);
412 
413  // if too few busses to make even one widthPart_ length template slot
414  if (busNav.count() < slotCount) {
415  slotCount = busNav.count();
416  }
417 
418  int overSpill = width_ - (slotCount * widthPart_);
419  int widthAdd = 0;
420  TTAMachine::Bus* busP = NULL;
421  for (int bus = 0; bus < slotCount; bus++) {
422  busP = busNav.item(bus);
423 
424  if (overSpill > 0) {
425  if (overSpill < static_cast<int>(
426  busP->width() - widthPart_)) {
427  widthAdd = overSpill;
428  overSpill = -1; // all spilled
429  } else {
430  widthAdd = busP->width() - widthPart_;
431  overSpill = overSpill - widthAdd;
432  }
433  } else {
434  widthAdd = 0;
435  }
436 
437  try {
438  insTemplate->addSlot(busP->name(), widthPart_ + widthAdd,
439  *dstImmUnit);
440  } catch (const Exception& e) {
441  std::ostringstream msg(std::ostringstream::out);
442  msg << "Error while using ImmediateGenerator:" << endl
443  << e.errorMessage() << endl;
444  verboseLog(msg.str());
445  delete insTemplate;
446  insTemplate = NULL;
447  return;
448  }
449  }
450 
451  // check if all spilled
452  if (overSpill > 0) {
453  std::ostringstream msg(std::ostringstream::out);
454  msg << "Error while using ImmediateGenerator:" << endl
455  << "Immediate template generation failed, width=\"" << width_
456  << "\" too great by: \"" << overSpill << "\"" << endl;
457  verboseLog(msg.str());
458  delete insTemplate;
459  insTemplate = NULL;
460  return;
461  }
462 
463  createNewConfig_ = true;
464  }
465 };
466 
467 // parameter names
468 const std::string ImmediateGenerator::printPN_("print");
469 const std::string ImmediateGenerator::removeInsTemplateNamePN_("remove_it_name");
470 const std::string ImmediateGenerator::addInsTemplateNamePN_("add_it_name");
471 const std::string ImmediateGenerator::modInsTemplateNamePN_("modify_it_name");
472 const std::string ImmediateGenerator::widthPN_("width");
473 const std::string ImmediateGenerator::widthPartPN_("width_part");
474 const std::string ImmediateGenerator::splitPN_("split");
475 const std::string ImmediateGenerator::dstImmUnitNamePN_("dst_imm_unit");
476 
ImmediateGenerator
Definition: ImmediateGenerator.cc:69
TTAProgram
Definition: Estimator.hh:65
CostEstimator::Estimator::totalArea
AreaInGates totalArea(const TTAMachine::Machine &machine, const IDF::MachineImplementation &machineImplementation)
area estimation functions
Definition: Estimator.cc:84
TTAMachine::Machine::deleteInstructionTemplate
virtual void deleteInstructionTemplate(InstructionTemplate &instrTempl)
Definition: Machine.cc:599
TTAMachine::Component::name
virtual TCEString name() const
Definition: MachinePart.cc:125
HDB
Definition: CostDatabase.hh:49
CostEstimates
Definition: CostEstimates.hh:57
Exception.hh
UINT
@ UINT
Definition: ExplorerPluginParameter.hh:40
DSDBManager::architecture
TTAMachine::Machine * architecture(RowID id) const
Definition: DSDBManager.cc:807
TTAMachine::Bus::width
int width() const
Definition: Bus.cc:149
DSDBManager::MachineConfiguration::hasImplementation
bool hasImplementation
Definition: DSDBManager.hh:80
ICDecoderEstimatorPlugin.hh
CostEstimator::Estimator::longestPath
DelayInNanoSeconds longestPath(const TTAMachine::Machine &machine, const IDF::MachineImplementation &machineImplementation)
delay estimation functions
Definition: Estimator.cc:915
Procedure.hh
TTAMachine::Bus
Definition: Bus.hh:53
TTAMachine::InstructionTemplate::addSlot
virtual void addSlot(const std::string &slotName, int width, ImmediateUnit &dstUnit)
Definition: InstructionTemplate.cc:169
TTAMachine::InstructionTemplate::numberOfDestinations
virtual int numberOfDestinations() const
Definition: InstructionTemplate.cc:300
DesignSpaceExplorerPlugin
Definition: DesignSpaceExplorerPlugin.hh:55
RowID
int RowID
Type definition of row ID in relational databases.
Definition: DBTypes.hh:37
CostEstimator::Estimator
Definition: Estimator.hh:85
ImmediateGenerator::splitPN_
static const std::string splitPN_
Definition: ImmediateGenerator.cc:210
CostEstimator::AreaInGates
double AreaInGates
type for area values in equivalent gates
Definition: CostEstimatorTypes.hh:35
Terminal.hh
TTAMachine::Machine::Navigator::count
int count() const
ImmediateGenerator::removeInsTemplate
void removeInsTemplate(TTAMachine::Machine &mach, std::string name)
Definition: ImmediateGenerator.cc:292
TTAMachine::InstructionTemplate::slotCount
virtual int slotCount() const
Definition: InstructionTemplate.cc:236
Conversion::toString
static std::string toString(const T &source)
DesignSpaceExplorerPlugin.hh
verboseLog
#define verboseLog(text)
Definition: Application.hh:115
ImmediateGenerator::requiresSimulationData
virtual bool requiresSimulationData() const
Definition: ImmediateGenerator.cc:100
BOOL
@ BOOL
Definition: ExplorerPluginParameter.hh:40
TTAMachine::InstructionTemplate
Definition: InstructionTemplate.hh:49
ImmediateGenerator::producesArchitecture
virtual bool producesArchitecture() const
Definition: ImmediateGenerator.cc:98
ImmediateGenerator::modInsTemplateNamePN_
static const std::string modInsTemplateNamePN_
Definition: ImmediateGenerator.cc:207
StringTools.hh
TemplateSlot.hh
ImmediateGenerator::width_
unsigned int width_
width of the target template
Definition: ImmediateGenerator.cc:223
DSDBManager::MachineConfiguration::implementationID
RowID implementationID
Definition: DSDBManager.hh:81
Segment.hh
ImmediateGenerator::dstImmUnitNamePN_
static const std::string dstImmUnitNamePN_
Definition: ImmediateGenerator.cc:211
ImmediateGenerator::split_
bool split_
make evenly bus/slot wise splitted template.
Definition: ImmediateGenerator.cc:227
ImmediateGenerator::requiresHDB
virtual bool requiresHDB() const
Definition: ImmediateGenerator.cc:99
HWOperation.hh
DSDBManager::MachineConfiguration
Definition: DSDBManager.hh:78
PLUGIN_DESCRIPTION
const std::string PLUGIN_DESCRIPTION
Definition: DefaultICDecoderPlugin.cc:917
InvalidName
Definition: Exception.hh:827
Instruction.hh
ImmediateGenerator::addInsTemplate
void addInsTemplate(TTAMachine::Machine &mach, std::string name)
Definition: ImmediateGenerator.cc:320
STRING
@ STRING
Definition: ExplorerPluginParameter.hh:40
EXPORT_DESIGN_SPACE_EXPLORER_PLUGIN
#define EXPORT_DESIGN_SPACE_EXPLORER_PLUGIN(PLUGIN_NAME__)
Definition: DesignSpaceExplorerPlugin.hh:125
ImmediateGenerator::printPN_
static const std::string printPN_
Definition: ImmediateGenerator.cc:204
TTAMachine::Machine::immediateUnitNavigator
virtual ImmediateUnitNavigator immediateUnitNavigator() const
Definition: Machine.cc:416
Conversion.hh
TTAMachine::TemplateSlot
Definition: TemplateSlot.hh:55
CostEstimates.hh
Application.hh
ImmediateGenerator::removeInsTemplateName_
std::string removeInsTemplateName_
instruction template name to be removed.
Definition: ImmediateGenerator.cc:217
TTAMachine::TemplateSlot::destination
ImmediateUnit * destination() const
TTAMachine::TemplateSlot::slot
std::string slot() const
ImmediateGenerator::requiresStartingPointArchitecture
virtual bool requiresStartingPointArchitecture() const
Definition: ImmediateGenerator.cc:97
TTAMachine::InstructionTemplate::supportedWidth
virtual int supportedWidth() const
Definition: InstructionTemplate.cc:427
ImmediateGenerator::widthPartPN_
static const std::string widthPartPN_
Definition: ImmediateGenerator.cc:209
Machine.hh
Exception
Definition: Exception.hh:54
DSDBManager
Definition: DSDBManager.hh:76
ImmediateGenerator::printImmediateTemplates
void printImmediateTemplates(TTAMachine::Machine &mach)
Definition: ImmediateGenerator.cc:252
ImmediateGenerator::addInsTemplateName_
std::string addInsTemplateName_
instruction template name to be added.
Definition: ImmediateGenerator.cc:219
ImmediateGenerator::widthPart_
unsigned int widthPart_
minimum width on long instruction slot when splitting the template.
Definition: ImmediateGenerator.cc:225
Exception::errorMessage
std::string errorMessage() const
Definition: Exception.cc:123
DSDBManager.hh
ImmediateGenerator::print_
bool print_
print values
Definition: ImmediateGenerator.cc:215
DSDBManager::addConfiguration
RowID addConfiguration(const MachineConfiguration &conf)
Definition: DSDBManager.cc:299
CostEstimator::DelayInNanoSeconds
double DelayInNanoSeconds
type for propagation delays in nano seconds
Definition: CostEstimatorTypes.hh:39
ImmediateGenerator::modInsTemplateName_
std::string modInsTemplateName_
instruction template name to be modified.
Definition: ImmediateGenerator.cc:221
DSDBManager::addArchitecture
RowID addArchitecture(const TTAMachine::Machine &mom)
Definition: DSDBManager.cc:191
ImmediateGenerator::dstImmUnitName_
std::string dstImmUnitName_
destination immediate unit name
Definition: ImmediateGenerator.cc:229
DSDBManager::configuration
MachineConfiguration configuration(RowID id) const
Definition: DSDBManager.cc:361
ImmediateGenerator::explore
virtual std::vector< RowID > explore(const RowID &startPointConfigurationID, const unsigned int &)
Definition: ImmediateGenerator.cc:120
ImmediateGenerator::removeInsTemplateNamePN_
static const std::string removeInsTemplateNamePN_
Definition: ImmediateGenerator.cc:205
Program.hh
false
find Finds info of the inner loops in the false
Definition: InnerLoopFinder.cc:81
ImmediateGenerator::ImmediateGenerator
ImmediateGenerator()
Definition: ImmediateGenerator.cc:72
ImmediateGenerator::addInsTemplateNamePN_
static const std::string addInsTemplateNamePN_
Definition: ImmediateGenerator.cc:206
ControlUnit.hh
ImmediateGenerator::readParameters
void readParameters()
Definition: ImmediateGenerator.cc:235
TTAMachine::Machine::busNavigator
virtual BusNavigator busNavigator() const
Definition: Machine.cc:356
TTAMachine::InstructionTemplate::isEmpty
virtual bool isEmpty() const
Definition: InstructionTemplate.cc:494
ImmediateGenerator::createNewConfig_
bool createNewConfig_
Boolean value used to decide if new config is created.
Definition: ImmediateGenerator.cc:201
ComponentAlreadyExists
Definition: Exception.hh:510
DSDBManager::implementation
IDF::MachineImplementation * implementation(RowID id) const
Definition: DSDBManager.cc:887
MachineResourceModifier.hh
TTAMachine::Machine::Navigator::item
ComponentType * item(int index) const
ImmediateGenerator::addSplitInsTemplate
void addSplitInsTemplate(TTAMachine::Machine &mach, std::string name)
Definition: ImmediateGenerator.cc:350
ImmediateGenerator::requiresApplication
virtual bool requiresApplication() const
Definition: ImmediateGenerator.cc:101
Move.hh
TTAMachine
Definition: Assembler.hh:48
TTAMachine::TemplateSlot::width
int width() const
TTAMachine::Machine::instructionTemplateNavigator
virtual InstructionTemplateNavigator instructionTemplateNavigator() const
Definition: Machine.cc:428
HDBRegistry.hh
DSDBManager::MachineConfiguration::architectureID
RowID architectureID
Definition: DSDBManager.hh:79
TTAMachine::Machine::Navigator
Definition: Machine.hh:186
DSDBManager::addImplementation
RowID addImplementation(const IDF::MachineImplementation &impl, double longestPathDelay, CostEstimator::AreaInGates area)
Definition: DSDBManager.cc:252
ImmediateGenerator::widthPN_
static const std::string widthPN_
Definition: ImmediateGenerator.cc:208
IDF::MachineImplementation
Definition: MachineImplementation.hh:54
TTAMachine::InstructionTemplate::slot
virtual TemplateSlot * slot(int index) const
Definition: InstructionTemplate.cc:249
TTAMachine::Machine
Definition: Machine.hh:73
TestApplication.hh
TTAMachine::ImmediateUnit
Definition: ImmediateUnit.hh:50