OpenASIP  2.0
Public Member Functions | Static Public Member Functions | Protected Attributes | Static Private Member Functions | List of all members
POMDisassembler Class Reference

#include <POMDisassembler.hh>

Collaboration diagram for POMDisassembler:
Collaboration graph

Public Member Functions

 POMDisassembler (bool indices=false)
 
 POMDisassembler (const TTAProgram::Program &program, bool indices=false)
 
virtual ~POMDisassembler ()
 
virtual DisassemblyInstructioncreateInstruction (Word instructionIndex) const
 
virtual Word startAddress () const
 
virtual Word instructionCount () const
 
int labelCount (Word address) const
 
std::string label (Word address, int index) const
 
virtual TCEString disassembleInstruction (const TTAProgram::Instruction &instruction, int addr=-1)
 "Template methods" that can be overridden in the derived assemblers. More...
 
virtual TCEString disassembleProcedure (const TTAProgram::Procedure &proc)
 
virtual TCEString disassembleProcedures ()
 
virtual TCEString disassembleProgram ()
 
virtual TCEString codeSectionDescription (Word startAddress)
 
virtual TCEString dataSectionDescription (const TTAMachine::AddressSpace &aSpace, Word location)
 
virtual TCEString procedureDescription (const TTAProgram::Procedure &proc)
 
virtual TCEString destinationLabels (const TTAProgram::Procedure &proc, int instrIndex) const
 
virtual TCEString labelPositionDescription (TCEString labelStr) const
 
virtual TCEString dataDefDescription (const TTAProgram::DataDefinition &def)
 
virtual size_t instructionSize (const TTAProgram::Instruction &)
 Returns the size of the instruction in memory addresses, if known. Falls back to address per instruction. More...
 
virtual void setPrintAddresses (bool addresses)
 
virtual TCEString printAddress (const TTAProgram::Instruction &instr) const
 

Static Public Member Functions

static POMDisassemblerdisassembler (const TTAMachine::Machine &mach, const TTAProgram::Program &program)
 
static std::string disassemble (const TTAProgram::Move &move)
 
static std::string disassemble (const TTAProgram::Instruction &instruction, bool indices=false, int addr=-1)
 
static std::string disassemble (const TTAProgram::Procedure &proc, bool indices=false)
 
static std::string disassemble (const TTAProgram::Program &program, bool indices=false)
 
static TCEString disassembleFully (const TTAProgram::Program &program, bool indices=false)
 
static DisassemblyImmediatecreateInlineImmediate (const TTAProgram::Terminal &terminal, bool signExtend)
 

Protected Attributes

const TTAProgram::Programprogram_
 Program object model to disassemble. More...
 
bool printAddresses_
 True if instruction indices (addresses) should be printed at the end of lines. More...
 

Static Private Member Functions

static int labelCount (const TTAProgram::Program &program, Word address)
 
static std::string label (const TTAProgram::Program &, Word address, int index)
 
static DisassemblyInstructioncreateInstruction (const TTAProgram::Program &program, const TTAProgram::Instruction &instruction)
 
static DisassemblyMovecreateMove (const TTAProgram::Move &move)
 
static DisassemblyImmediateAssignmentcreateImmediateAssignment (const TTAProgram::Immediate &immediate)
 
static DisassemblyGuardcreateGuard (const TTAProgram::MoveGuard &guard)
 
static DisassemblyElementcreateTerminal (const TTAProgram::Terminal &terminal)
 
static DisassemblyElementcreateFUPort (const TTAProgram::Terminal &terminal)
 
static DisassemblyElementcreateRegister (const TTAProgram::Terminal &terminal)
 
static DisassemblyImmediateRegistercreateImmediateRegister (const TTAProgram::Terminal &terminal)
 
static bool isCallOrJump (const TTAProgram::Terminal &terminal)
 

Detailed Description

Program object model disassembler.

Definition at line 70 of file POMDisassembler.hh.

Constructor & Destructor Documentation

◆ POMDisassembler() [1/2]

POMDisassembler::POMDisassembler ( bool  printAddresses = false)
explicit

A constructor for disassembling pieces of a program which might not be attached to a Program object.

Parameters
printAddressesTrue in case instruction addresses should be printed at the end of instruction lines as comments.

Definition at line 115 of file POMDisassembler.cc.

115  :
116  program_(NullProgram::instance()), printAddresses_(printAddresses) {
117 }

Referenced by disassembler().

◆ POMDisassembler() [2/2]

POMDisassembler::POMDisassembler ( const TTAProgram::Program program,
bool  printAddresses = false 
)
explicit

A constructor for disassembling whole programs.

Parameters
programProgram to disassemble.
printAddressesTrue in case instruction addresses should be printed at the end of instruction lines as comments.

Definition at line 104 of file POMDisassembler.cc.

104  :
105  program_(program), printAddresses_(printAddresses) {
106 }

◆ ~POMDisassembler()

POMDisassembler::~POMDisassembler ( )
virtual

The destructor.

Definition at line 123 of file POMDisassembler.cc.

123  {
124 }

Member Function Documentation

◆ codeSectionDescription()

TCEString POMDisassembler::codeSectionDescription ( Word  startAddress)
virtual

Definition at line 917 of file POMDisassembler.cc.

917  {
918  TCEString output;
919  output << "CODE " << startAddress << " ;";
920  return output;
921 }

References startAddress().

Referenced by disassembleProgram().

Here is the call graph for this function:

◆ createFUPort()

DisassemblyElement * POMDisassembler::createFUPort ( const TTAProgram::Terminal terminal)
staticprivate

Creates disassembly of a function unit port.

Parameters
terminalFunction unit terminal to disassemble.
Returns
Disassembly of the function unit terminal.

Definition at line 320 of file POMDisassembler.cc.

320  {
321  const FunctionUnit* fu = &terminal.functionUnit();
322 
323  const TTAProgram::TerminalFUPort& fuTerm =
324  dynamic_cast<const TerminalFUPort&>(terminal);
325 
326  if (dynamic_cast<const UniversalFunctionUnit*>(fu) != NULL ||
327  (fu->machine()->isUniversalMachine() &&
328  dynamic_cast<const ControlUnit*>(fu) != NULL)) {
329 
330  // The terminal is a UniversalFunctionUnit operation or
331  // a universal machine control unit operation.
332  if (&fuTerm.hintOperation() != &NullOperation::instance()) {
333  string operation = fuTerm.hintOperation().name();
334  HWOperation* hwOperation = fu->operation(operation);
335  FUPort* port = fu->operationPort(fuTerm.port().name());
336  int operand = hwOperation->io(*port);
337  return new DisassemblyOperand(
338  fuTerm.hintOperation().name(), operand);
339  }
340  return new DisassemblyControlUnitPort(fuTerm.port().name());
341  }
342 
343  // if terminal contains any information about operation
344  if (fuTerm.isOpcodeSetting()) {
345  // check if that osal operation was found
346  if (&fuTerm.operation() == &NullOperation::instance()) {
347  throw InstanceNotFound(__FILE__, __LINE__, __func__,
348  (boost::format(
349  "Osal operation for operation code name '%s' was not found.")
350  % fuTerm.hwOperation()->name()).str());
351  }
352  // The terminal is an opcode setting port of an operation or.
353  // has additional info about opcode that terminal is bound.
354  return new DisassemblyFUOpcodePort(
355  fu->name(), fuTerm.port().name(), fuTerm.operation().name());
356  }
357 
358  // The terminal is a generic function unit port.
359  return new DisassemblyFUPort(fu->name(), terminal.port().name());
360 }

References __func__, TTAProgram::Terminal::functionUnit(), TTAProgram::TerminalFUPort::hintOperation(), TTAProgram::TerminalFUPort::hwOperation(), NullOperation::instance(), TTAMachine::HWOperation::io(), TTAProgram::TerminalFUPort::isOpcodeSetting(), TTAMachine::Machine::isUniversalMachine(), TTAMachine::Component::machine(), TTAMachine::HWOperation::name(), TTAMachine::Port::name(), TTAMachine::Component::name(), Operation::name(), TTAProgram::TerminalFUPort::operation(), TTAMachine::FunctionUnit::operation(), TTAMachine::FunctionUnit::operationPort(), TTAProgram::TerminalFUPort::port(), and TTAProgram::Terminal::port().

Referenced by createTerminal().

Here is the call graph for this function:

◆ createGuard()

DisassemblyGuard * POMDisassembler::createGuard ( const TTAProgram::MoveGuard guard)
staticprivate

Creates disassembly of a move guard.

Parameters
guardMove guard to disassemble.
Returns
Disassembly of the move guard.

Definition at line 434 of file POMDisassembler.cc.

434  {
435 
436  const Guard* guard = &moveGuard.guard();
437 
438  DisassemblyElement* guarded = NULL;
439 
440  // Check if the guarded element is a fu port.
441  const PortGuard* portGuard = dynamic_cast<const PortGuard*>(guard);
442  if (portGuard != NULL) {
443  string fuName = portGuard->port()->parentUnit()->name();
444  string portName = portGuard->port()->name();
445  guarded = new DisassemblyFUPort(fuName, portName);
446  }
447 
448  // Check if the guarded element is a register.
449  const RegisterGuard* registerGuard =
450  dynamic_cast<const RegisterGuard*>(guard);
451  if (registerGuard != NULL) {
452 
453  // Check if the register file is bool rf of a universal machine.
454  const RegisterFile* rf = registerGuard->registerFile();
455  const UniversalMachine* machine =
456  dynamic_cast<const UniversalMachine*>(rf->machine());
457 
458  if (machine != NULL && rf == &machine->booleanRegisterFile()) {
459  return new DisassemblySequentialGuard(moveGuard.isInverted());
460  } else {
461  string rfName = registerGuard->registerFile()->name();
462  int index = registerGuard->registerIndex();
463  guarded = new DisassemblyRegister(rfName, index);
464  }
465  }
466 
467  // Check if the guard is unconditional.
468  if (moveGuard.isUnconditional()) {
469  // TODO: Disassemble unconditional guards.
470  assert(false);
471  }
472 
473 
474  return new DisassemblyGuard(guarded, moveGuard.isInverted());
475 }

References assert, TTAProgram::MoveGuard::guard(), TTAProgram::MoveGuard::isInverted(), TTAProgram::MoveGuard::isUnconditional(), machine, TTAMachine::Component::machine(), TTAMachine::Port::name(), TTAMachine::Component::name(), TTAMachine::BaseFUPort::parentUnit(), TTAMachine::PortGuard::port(), TTAMachine::RegisterGuard::registerFile(), and TTAMachine::RegisterGuard::registerIndex().

Referenced by createMove().

Here is the call graph for this function:

◆ createImmediateAssignment()

DisassemblyImmediateAssignment * POMDisassembler::createImmediateAssignment ( const TTAProgram::Immediate immediate)
staticprivate

Creates disassembly of an immediate assignment.

Definition at line 246 of file POMDisassembler.cc.

246  {
247  DisassemblyElement* destination = createTerminal(immediate.destination());
248  SimValue value = immediate.value().value();
249  bool signExt = immediate.destination().immediateUnit().signExtends();
250  return new DisassemblyImmediateAssignment(value, signExt, destination);
251 }

References createTerminal(), TTAProgram::Immediate::destination(), TTAProgram::Terminal::immediateUnit(), TTAMachine::ImmediateUnit::signExtends(), TTAProgram::TerminalImmediate::value(), and TTAProgram::Immediate::value().

Referenced by createInstruction(), and disassemble().

Here is the call graph for this function:

◆ createImmediateRegister()

DisassemblyImmediateRegister * POMDisassembler::createImmediateRegister ( const TTAProgram::Terminal terminal)
staticprivate

Creates disassembly of an immediate register.

Parameters
terminalImmediate register to disassemble.
Returns
Disassembly of the immediate register.

Definition at line 420 of file POMDisassembler.cc.

420  {
421  string immediateUnit = terminal.immediateUnit().name();
422  unsigned int index = terminal.index();
423  return new DisassemblyImmediateRegister(immediateUnit, index);
424 }

References TTAProgram::Terminal::immediateUnit(), TTAProgram::Terminal::index(), and TTAMachine::Component::name().

Referenced by createTerminal().

Here is the call graph for this function:

◆ createInlineImmediate()

DisassemblyImmediate * POMDisassembler::createInlineImmediate ( const TTAProgram::Terminal terminal,
bool  signExtend 
)
static

Creates disassembly of an immediate value.

Parameters
terminalImmediate value to disassemble.
signExtendIf the immediate should be considered signed or unsigned.
Returns
Disassembly of the immediate value.

Definition at line 296 of file POMDisassembler.cc.

297  {
298  if (const TTAProgram::TerminalProgramOperation* tpo =
299  dynamic_cast<const TTAProgram::TerminalProgramOperation*>(&terminal)) {
300  if (!tpo->isAddressKnown())
301  return new DisassemblyImmediate(NullSimValue::instance(), false);
302  }
303  try {
304  return new DisassemblyImmediate(
305  terminal.value(), signExtend);
306  } catch (Exception& e) {
307  return new DisassemblyImmediate(
308  NullSimValue::instance(), signExtend);
309  }
310 }

References NullSimValue::instance(), and TTAProgram::Terminal::value().

Referenced by createMove(), TTAProgram::TerminalImmediate::toString(), and TTAProgram::TerminalLaneIDImmediate::toString().

Here is the call graph for this function:

◆ createInstruction() [1/2]

DisassemblyInstruction * POMDisassembler::createInstruction ( const TTAProgram::Program program,
const TTAProgram::Instruction instruction 
)
staticprivate

Returns disassembly of an instruction at the given index.

The client is responsible for destroying the instruction object.

Parameters
programParent program of the instruction.
indexIndex of the instruction to disassemble.
Returns
Disassembly of the instruction at given index.

Definition at line 155 of file POMDisassembler.cc.

156  {
157 
158  DisassemblyInstruction* disassembly = new DisassemblyInstruction();
159 
160  const Machine::BusNavigator& navigator =
161  program.targetProcessor().busNavigator();
162 
163  // The instruction disassembly is created by one bus at a time.
164  for (int i = 0; i < navigator.count(); i++) {
165 
166  Bus* bus = navigator.item(i);
167  string busName = bus->name();
168  bool isUsed = false;
169 
170  // Check for move.
171  for (int i = 0; i < instruction.moveCount(); i++) {
172  if (&instruction.move(i).bus() == bus) {
173  disassembly->addMove(createMove(instruction.move(i)));
174  isUsed = true;
175  }
176  }
177 
178  if (!isUsed) {
179  disassembly->addMove(new DisassemblyNOP);
180  }
181  }
182 
183  // Add disassembly of long immediates in immediate slots.
184  for (int i = 0; i < instruction.immediateCount(); i++) {
185  disassembly->addLongImmediate(
186  createImmediateAssignment(instruction.immediate(i)));
187  }
188 
189  return disassembly;
190 }

References DisassemblyInstruction::addLongImmediate(), DisassemblyInstruction::addMove(), TTAProgram::Move::bus(), TTAMachine::Machine::Navigator< ComponentType >::count(), createImmediateAssignment(), createMove(), TTAProgram::Instruction::immediate(), TTAProgram::Instruction::immediateCount(), TTAMachine::Machine::Navigator< ComponentType >::item(), TTAProgram::Instruction::move(), TTAProgram::Instruction::moveCount(), TTAMachine::Component::name(), and program.

Here is the call graph for this function:

◆ createInstruction() [2/2]

DisassemblyInstruction * POMDisassembler::createInstruction ( Word  index) const
virtual

Returns disassembly of an instruction at the given index.

The client is responsible for destroying the instruction object.

Parameters
indexIndex of the instruction to disassemble.
Returns
Disassembly of the instruction at given index.

Definition at line 137 of file POMDisassembler.cc.

137  {
138 
139  const Instruction& instruction = program_.instructionAt(index);
140  return createInstruction(program_, instruction);
141 }

References TTAProgram::Program::instructionAt(), and program_.

Referenced by disassemble(), and DisassemblyGridTable::GetValue().

Here is the call graph for this function:

◆ createMove()

DisassemblyMove * POMDisassembler::createMove ( const TTAProgram::Move move)
staticprivate

Creates disassembly of a move.

Parameters
moveMove to disassemble.
Returns
Disassembly of the move.

Definition at line 200 of file POMDisassembler.cc.

200  {
201 
202  // Disassemble move terminals.
203  DisassemblyElement* destinationDis = createTerminal(move.destination());
204  DisassemblyElement* sourceDis = NULL;
205 
206  if (move.source().isImmediate()) {
207 
208  // Special case: if the move source is an inline immediate, and
209  // the move destination is call/jump operand, the inline immediate
210  // is disassembled as label if possible.
211  if (isCallOrJump(move.destination()) &&
212  move.isInInstruction() && move.parent().isInProcedure() &&
213  move.parent().parent().isInProgram() &&
214  labelCount(
215  move.parent().parent().parent(),
216  move.source().value().uLongWordValue()) > 0) {
217 
218  LongWord immediate = move.source().value().uLongWordValue();
219  std::string codelabel = label(
220  move.parent().parent().parent(), immediate, 0);
221  sourceDis = new DisassemblyLabel(codelabel);
222  } else {
223  sourceDis =
225  move.source(), move.bus().signExtends());
226  }
227  } else {
228  sourceDis = createTerminal(move.source());
229  }
230 
231  DisassemblyMove* disassembly = NULL;
232  if (!move.isUnconditional()) {
233  DisassemblyGuard* guardDis = createGuard(move.guard());
234  disassembly = new DisassemblyMove(sourceDis, destinationDis, guardDis);
235  } else {
236  disassembly = new DisassemblyMove(sourceDis, destinationDis);
237  }
238  return disassembly;
239 }

References TTAProgram::Move::bus(), createGuard(), createInlineImmediate(), createTerminal(), TTAProgram::Move::destination(), TTAProgram::Move::guard(), isCallOrJump(), TTAProgram::Terminal::isImmediate(), TTAProgram::Move::isInInstruction(), TTAProgram::Instruction::isInProcedure(), TTAProgram::CodeSnippet::isInProgram(), TTAProgram::Move::isUnconditional(), label(), labelCount(), TTAProgram::Move::parent(), TTAProgram::CodeSnippet::parent(), TTAProgram::Instruction::parent(), TTAMachine::Bus::signExtends(), TTAProgram::Move::source(), SimValue::uLongWordValue(), and TTAProgram::Terminal::value().

Referenced by createInstruction(), and disassemble().

Here is the call graph for this function:

◆ createRegister()

DisassemblyElement * POMDisassembler::createRegister ( const TTAProgram::Terminal terminal)
staticprivate

Creates disassembly of a register.

Parameters
terminalRegister to disassemble.
Returns
Disassembly of the register.
Exceptions
WrongSubclassThe terminal was not register.

Definition at line 370 of file POMDisassembler.cc.

370  {
371  const RegisterFile* rf = &terminal.registerFile();
372 
373  if (rf == NULL) {
374  throw WrongSubclass(__FILE__, __LINE__, __func__,
375  "Not register terminal.");
376  }
377 
378  const UniversalMachine* machine =
379  dynamic_cast<const UniversalMachine*>(rf->machine());
380 
381  if (machine != NULL) {
382 
383  if (rf == &machine->booleanRegisterFile()) {
384  // universal bool register
385  return new DisassemblyBoolRegister();
386  }
387 
388 
389  // The register is a UnboundedRegisterFile register of a universal
390  // machine.
391  const UnboundedRegisterFile* universalRF =
392  dynamic_cast<const UnboundedRegisterFile*>(rf);
393 
394  if (universalRF == &machine->integerRegisterFile()) {
395  // universal int register
396  return new DisassemblyIntRegister(terminal.index());
397  }
398 
399  if (universalRF == &machine->doubleRegisterFile()) {
400  // universal floating point register
401  return new DisassemblyFPRegister(terminal.index());
402  }
403 
404  // Unknown universal machine register type.
405  throw WrongSubclass(
406  __FILE__, __LINE__, __func__,
407  "Unknown universal machine register type.");
408  }
409 
410  return new DisassemblyRegister(rf->name(), terminal.index());
411 }

References __func__, TTAProgram::Terminal::index(), machine, TTAMachine::Component::machine(), TTAMachine::Component::name(), and TTAProgram::Terminal::registerFile().

Referenced by createTerminal().

Here is the call graph for this function:

◆ createTerminal()

DisassemblyElement * POMDisassembler::createTerminal ( const TTAProgram::Terminal terminal)
staticprivate

Creates disassembly of a move terminal.

Determines the terminal type, an uses appropriate function to create disassembly of the terminal.

Parameters
terminalMove terminal to disassemble.
Returns
Disassembly of the move terminal.
Exceptions
WrongSubclassThe terminal type was unknown.

Definition at line 265 of file POMDisassembler.cc.

265  {
266  assert (
267  !terminal.isImmediate() &&
268  "Should handle immediate as a special case due to depending on "
269  "extension mode!");
270 
271  if (terminal.isFUPort()) {
272  return createFUPort(terminal);
273  }
274 
275  if (terminal.isGPR()) {
276  return createRegister(terminal);
277  }
278 
279  if (terminal.isImmediateRegister()) {
280  return createImmediateRegister(terminal);
281  }
282 
283  // Unkown terminal type.
284  throw WrongSubclass(__FILE__, __LINE__, __func__,
285  "Unknown terminal type.");
286 }

References __func__, assert, createFUPort(), createImmediateRegister(), createRegister(), TTAProgram::Terminal::isFUPort(), TTAProgram::Terminal::isGPR(), TTAProgram::Terminal::isImmediate(), and TTAProgram::Terminal::isImmediateRegister().

Referenced by createImmediateAssignment(), and createMove().

Here is the call graph for this function:

◆ dataDefDescription()

TCEString POMDisassembler::dataDefDescription ( const TTAProgram::DataDefinition def)
virtual

Definition at line 933 of file POMDisassembler.cc.

934  {
935 
936  std::ostringstream output;
937  output << "DA " << std::dec << def.size();
938  if (def.isInitialized()) {
939  for (int mau = 0; mau < def.size(); mau++) {
940  output << endl << "1:0x" << std::hex << def.MAU(mau);
941  }
942  }
943  output << " ;" << endl;
944  return output.str();
945 }

References TTAProgram::DataDefinition::isInitialized(), TTAProgram::DataDefinition::MAU(), and TTAProgram::DataDefinition::size().

Referenced by disassembleProgram().

Here is the call graph for this function:

◆ dataSectionDescription()

TCEString POMDisassembler::dataSectionDescription ( const TTAMachine::AddressSpace aSpace,
Word  location 
)
virtual

Definition at line 924 of file POMDisassembler.cc.

925  {
926  TCEString output;
927  output << "DATA " << aSpace.name() << " "
928  << location << " ;";
929  return output;
930 }

References TTAMachine::Component::name().

Referenced by disassembleProgram().

Here is the call graph for this function:

◆ destinationLabels()

TCEString POMDisassembler::destinationLabels ( const TTAProgram::Procedure proc,
int  instrIndex 
) const
virtual

Definition at line 840 of file POMDisassembler.cc.

841  {
842 
843  std::stringstream stringStream;
844  InstructionAddress addr = proc.startAddress().location() + instrIndex;
845  const int lc = POMDisassembler::labelCount(proc.parent(), addr);
846  for (int labelIndex = 0; labelIndex < lc; ++labelIndex) {
847  stringStream
849  proc.parent(), addr, labelIndex))
850  << std::endl;
851  }
852  return stringStream.str();
853 }

References label(), labelCount(), labelPositionDescription(), TTAProgram::Address::location(), TTAProgram::CodeSnippet::parent(), and TTAProgram::CodeSnippet::startAddress().

Referenced by disassembleProcedure().

Here is the call graph for this function:

◆ disassemble() [1/4]

std::string POMDisassembler::disassemble ( const TTAProgram::Instruction instruction,
bool  printAddresses = false,
int  addr = -1 
)
static

Static helper function to create disassembly string from an instruction.

Parameters
instructionInstruction to disassemble.
printAddressesPrint the instruction's index as comment.
Returns
Disassembly of the instruction.

Definition at line 688 of file POMDisassembler.cc.

689  {
690 
691  std::string disasm = "";
692  if (!instruction.isInProcedure() ||
693  !instruction.parent().isInProgram()) {
694 
695  // a "free instruction" that is not connected to any program
696  // traverse the moves instead of the buses
697 
698  DisassemblyInstruction* dInstruction = new DisassemblyInstruction();
699  // The instruction disassembly is created by one move at a time.
700  for (int i = 0; i < instruction.moveCount(); i++) {
701 
702  const Move& move = instruction.move(i);
703  const Bus* bus = &move.bus();
704  string busName = move.bus().name();
705  bool isUsed = false;
706 
707  // Check for long immediate.
708  for (int i = 0; i < instruction.immediateCount(); i++) {
709  if (&instruction.instructionTemplate() !=
710  &NullInstructionTemplate::instance() &&
711  instruction.instructionTemplate().usesSlot(busName)) {
712  dInstruction->addMove(
713  createImmediateAssignment(instruction.immediate(i)));
714  isUsed = true;
715  }
716  }
717 
718  // Check for move.
719  for (int i = 0; i < instruction.moveCount(); i++) {
720  if (&instruction.move(i).bus() == bus) {
721  dInstruction->addMove(createMove(instruction.move(i)));
722  isUsed = true;
723  }
724  }
725 
726  if (!isUsed) {
727  dInstruction->addMove(new DisassemblyNOP);
728  }
729  }
730 
731  // Add disassembly of long immediates in immediate slots.
732  for (int i = 0; i < instruction.immediateCount(); i++) {
733  dInstruction->addLongImmediate(
734  createImmediateAssignment(instruction.immediate(i)));
735  }
736 
737  disasm = dInstruction->toString() + " # 'free instruction'";
738  delete dInstruction;
739  dInstruction = NULL;
740  } else {
741 
742  const Program& program = instruction.parent().parent();
743  DisassemblyInstruction* dInstruction =
744  createInstruction(program, instruction);
745 
746  disasm = dInstruction->toString();
747  delete dInstruction;
748  dInstruction = NULL;
749 
750  // check for partially scheduled code, that is, moves that refer to
751  // the unversal machine even though the target machine is not
752  // a universal machine
753  const TTAMachine::Machine* mach =
754  dynamic_cast<UniversalMachine*>(&program.targetProcessor());
755 
756  if (mach == NULL) {
757  // we have either mixed code or parallel code, let's check if this
758  // instruction has a move scheduled to universal machine's bus,
759  // in which case it's mixed code and the sequential move did not
760  // get printed with createInstruction()
761  for (int i = 0; i < instruction.moveCount(); ++i) {
762  const TTAProgram::Move& m = instruction.move(i);
763  if (dynamic_cast<UniversalMachine*>(m.bus().machine()) != NULL) {
764  // found unscheduled move, add it only as a comment to the
765  // disassembly to make the output compilable with TCEAssembler
766  disasm += "\t# unscheduled: ";
767  disasm += POMDisassembler::disassemble(m);
768  }
769  }
770  } else {
771  // a sequential program
772  }
773 
774  if (printAddresses) {
775  disasm +=
776  "\t# @" +
778  addr != -1 ? addr : instruction.address().location());
779  }
780  }
781  // to display source filename and line number
782  // check for source code filename, we just use the file filename,
783  // assume the all the move belong the same file
784  TCEString fileNameStr = "";
785  for (int i = 0; i < instruction.moveCount(); ++i) {
786  const TTAProgram::Move& m = instruction.move(i);
787  if (m.hasSourceFileName()) {
788  fileNameStr += m.sourceFileName();
789  break;
790  }
791  }
792 
793  if (fileNameStr != "")
794  disasm += "\t# file: " + fileNameStr;
795 
796  // check for soure code line number info
797  TCEString lineNumberStr = "";
798  for (int i = 0; i < instruction.moveCount(); ++i) {
799  const TTAProgram::Move& m = instruction.move(i);
800  if (m.hasSourceLineNumber()) {
801  if (lineNumberStr != "") {
802  lineNumberStr += ", ";
803  }
804  lineNumberStr +=
806  }
807  }
808 
809  if (lineNumberStr != "")
810  disasm += "\t# slines: " + lineNumberStr;
811 
812  return disasm;
813 }

References DisassemblyInstruction::addLongImmediate(), DisassemblyInstruction::addMove(), TTAProgram::Instruction::address(), TTAProgram::Move::bus(), createImmediateAssignment(), createInstruction(), createMove(), disassemble(), TTAProgram::Move::hasSourceFileName(), TTAProgram::Move::hasSourceLineNumber(), TTAProgram::Instruction::immediate(), TTAProgram::Instruction::immediateCount(), TTAProgram::Instruction::instructionTemplate(), TTAProgram::Instruction::isInProcedure(), TTAProgram::CodeSnippet::isInProgram(), TTAProgram::Address::location(), TTAMachine::Component::machine(), TTAProgram::Instruction::move(), TTAProgram::Instruction::moveCount(), TTAMachine::Component::name(), TTAProgram::CodeSnippet::parent(), TTAProgram::Instruction::parent(), program, TTAProgram::Move::sourceFileName(), TTAProgram::Move::sourceLineNumber(), Conversion::toString(), DisassemblyInstruction::toString(), and TTAMachine::InstructionTemplate::usesSlot().

Here is the call graph for this function:

◆ disassemble() [2/4]

std::string POMDisassembler::disassemble ( const TTAProgram::Move move)
static

Static helper function to create disassembly string from a move.

Parameters
moveMove to disassemble.
Returns
Disassembly of the instruction.

Definition at line 629 of file POMDisassembler.cc.

629  {
630 
631  // special handling for calls: find out the procedure name to make
632  // the disassembly a bit more readable
633  if (move.isCall()) {
634  if (move.source().isInstructionAddress()) {
635 
636  DisassemblyMove* dMove = createMove(move);
637  std::string disasm = "";
638  disasm = dMove->toString();
639 
640  Procedure* proc = NULL;
641  try {
642  proc = dynamic_cast<TTAProgram::Procedure*>(
644  } catch (...) {
645  // proc stays NULL if something goes wrong.
646  }
647 
648  std::string procName =
649  proc != NULL ? proc->name() : "unknown_proc";
650  return (boost::format("%s -> %s.call.1")
651  % procName
652  % move.destination().functionUnit().name()).str();
653  }
654 
655  if (move.source().isCodeSymbolReference()) {
656  return (boost::format("%s -> %s.call.1")
657  % move.source().toString()
658  % move.destination().functionUnit().name()).str();
659  }
660  } else if (move.isJump() && move.source().isCodeSymbolReference()) {
661  // A jump to a procedure, converted from a call.
662  return (boost::format("%s -> %s.jump.1")
663  % move.source().toString()
664  % move.destination().functionUnit().name()).str();
665  }
666 
667  DisassemblyMove* dMove = createMove(move);
668  std::string disasm = "";
669  disasm = dMove->toString();
670  delete dMove;
671  return disasm;
672 }

References createMove(), TTAProgram::Move::destination(), TTAProgram::Terminal::functionUnit(), TTAProgram::InstructionReference::instruction(), TTAProgram::Terminal::instructionReference(), TTAProgram::Move::isCall(), TTAProgram::Terminal::isCodeSymbolReference(), TTAProgram::Terminal::isInstructionAddress(), TTAProgram::Move::isJump(), TTAProgram::Procedure::name(), TTAMachine::Component::name(), TTAProgram::Instruction::parent(), TTAProgram::Move::source(), DisassemblyMove::toString(), and TTAProgram::Terminal::toString().

Referenced by TTAProgram::CodeSnippet::add(), TTAProgram::Instruction::address(), SimpleBrokerDirector::assign(), SimProgramBuilder::build(), SimulatorFrontend::compareState(), TTAProgram::ProgramWriter::createCodeSection(), ControlFlowGraph::createControlFlowEdge(), ControlFlowGraph::directJump(), ProgramDependenceGraph::disassemble(), disassemble(), disassembleInstruction(), TTAProgram::CodeSnippet::disassembly(), llvm::LLVMTCEBuilder::doFinalization(), ControlFlowGraph::findNextIndex(), main(), CriticalPathBBMoveNodeSelector::mightBeReady(), DataDependenceGraph::nodeOfMove(), SimProgramBuilder::processInstruction(), DataDependenceGraphBuilder::processTriggerPO(), BFUnscheduleFromBody::returnOriginal(), BFUnscheduleMove::returnOriginal(), BFShareOperandLate::revert(), BFOptimization::rmLC(), TTAProgram::Move::toString(), TTAProgram::Instruction::toString(), MoveNode::toString(), and TTAProgram::Program::toString().

Here is the call graph for this function:

◆ disassemble() [3/4]

std::string POMDisassembler::disassemble ( const TTAProgram::Procedure proc,
bool  printAddresses = false 
)
static

Static helper function to create a disassembly string from a procedure.

Parameters
procProcedure to disassemble.
printAddressesPrint the instruction addresses as comment.
Returns
Disassembly of the procedure in a string.
Exceptions
ExceptionCan leak exceptions if the traversed program is malformed, etc.
Deprecated:
Use obj.disassembleProcedure(proc) instead.

Definition at line 1011 of file POMDisassembler.cc.

1012  {
1013  POMDisassembler disasm(printAddresses);
1014  return disasm.disassembleProcedure(proc);
1015 }

References disassembleProcedure().

Here is the call graph for this function:

◆ disassemble() [4/4]

std::string POMDisassembler::disassemble ( const TTAProgram::Program program,
bool  printAddresses = false 
)
static

Static helper function to create a disassembly string from a program.

Parameters
programProgram to disassemble.
printAddressesPrint the instruction addresses as comment.
Returns
Disassembly of the program in a string.
Exceptions
ExceptionCan leak exceptions if the traversed program is malformed, etc.
Deprecated:
Use obj.disassembleProcedures() instead.

Definition at line 826 of file POMDisassembler.cc.

827  {
828  POMDisassembler disasm(program, printAddresses);
829  return disasm.disassembleProcedures();
830 }

References disassembleProcedures(), and program.

Here is the call graph for this function:

◆ disassembleFully()

TCEString POMDisassembler::disassembleFully ( const TTAProgram::Program program,
bool  printAddresses = false 
)
static

Static helper function to create a disassembly string from a whole program including section markers and data memory initializations.

Parameters
programProgram to disassemble.
printAddressesIf the instruction addresses should be printed.
Returns
Disassembly of the program in a string.
Exceptions
ExceptionCan leak exceptions if the traversed program is malformed, etc.
Deprecated:
Use obj.disassembleProgram() instead.

Definition at line 910 of file POMDisassembler.cc.

911  {
912  POMDisassembler disasm(program, printAddresses);
913  return disasm.disassembleProgram();
914 }

References disassembleProgram(), and program.

Here is the call graph for this function:

◆ disassembleInstruction()

TCEString POMDisassembler::disassembleInstruction ( const TTAProgram::Instruction instruction,
int  addr = -1 
)
virtual

"Template methods" that can be overridden in the derived assemblers.

Definition at line 675 of file POMDisassembler.cc.

676  {
677  return POMDisassembler::disassemble(instruction, printAddresses_, addr);
678 }

References disassemble(), and printAddresses_.

Referenced by SimulatorFrontend::disassembleInstruction(), disassembleProcedure(), and SimulatorFrontend::programLocationDescription().

Here is the call graph for this function:

◆ disassembleProcedure()

TCEString POMDisassembler::disassembleProcedure ( const TTAProgram::Procedure proc)
virtual

Definition at line 861 of file POMDisassembler.cc.

861  {
862 
863  std::stringstream stringStream;
864 
865  const TTAProgram::Instruction* currentInstruction = NULL;
866  stringStream << procedureDescription(proc) << std::endl;
867 
868  for (int instrIndex = 0, iCount = proc.instructionCount();
869  instrIndex < iCount; ++instrIndex) {
870  currentInstruction = &proc.instructionAtIndex(instrIndex);
871 
872  stringStream << destinationLabels(proc, instrIndex);
873 
874  InstructionAddress addr = proc.startAddress().location() + instrIndex;
875 
876  // Do not print "implicit instructions" of OTAs.
877  if (currentInstruction->size() > 0) {
878  stringStream << "\t" <<
879  disassembleInstruction(*currentInstruction, addr) << std::endl;
880  }
881  }
882  return stringStream.str();
883 }

References destinationLabels(), disassembleInstruction(), TTAProgram::CodeSnippet::instructionAtIndex(), TTAProgram::CodeSnippet::instructionCount(), TTAProgram::Address::location(), procedureDescription(), TTAProgram::Instruction::size(), and TTAProgram::CodeSnippet::startAddress().

Referenced by disassemble(), and disassembleProcedures().

Here is the call graph for this function:

◆ disassembleProcedures()

TCEString POMDisassembler::disassembleProcedures ( )
virtual

Definition at line 886 of file POMDisassembler.cc.

886  {
887 
888  std::stringstream stringStream;
889 
890  for (int procIndex = 0; procIndex < program_.procedureCount();
891  ++procIndex) {
892  const Procedure& proc = program_.procedureAtIndex(procIndex);
893  stringStream << disassembleProcedure(proc);
894  }
895  return stringStream.str();
896 }

References disassembleProcedure(), TTAProgram::Program::procedureAtIndex(), TTAProgram::Program::procedureCount(), and program_.

Referenced by disassemble(), and disassembleProgram().

Here is the call graph for this function:

◆ disassembleProgram()

TCEString POMDisassembler::disassembleProgram ( )
virtual

Create a disassembly string from the whole program including module headers, section markers and data memory initializations.

Returns
Disassembly of the program in a string.
Exceptions
ExceptionCan leak exceptions if the traversed program is malformed, etc.

Definition at line 956 of file POMDisassembler.cc.

956  {
957 
958  std::stringstream output;
959  Word first = startAddress();
960 
961  output << codeSectionDescription(first) << endl << endl;
962  output << disassembleProcedures() << endl << endl;
963 
964  // Write data memory initializations.
965  for (int i = 0; i < program_.dataMemoryCount(); i++) {
966 
968  const TTAMachine::AddressSpace& aSpace = mem.addressSpace();
969 
970  if (mem.dataDefinitionCount() == 0) continue;
971 
972  output << dataSectionDescription(
973  aSpace, mem.dataDefinition(0).startAddress().location()) << endl;
974 
975  // Definitions are put in a map to order them.
976  // TODO: the indexing API of DataMemory could be used for this?
977  // TODO: does this handle "holes" correctly or assume fully
978  // "connected regions" always?
979  // TODO: this does not handle UDATA at all!
980  std::map<Word, const TTAProgram::DataDefinition*> definitions;
981  for (int d = 0; d < mem.dataDefinitionCount(); d++) {
982  const TTAProgram::DataDefinition& def = mem.dataDefinition(d);
983  definitions[def.startAddress().location()] = &def;
984  }
985 
986  std::map<Word, const TTAProgram::DataDefinition*>::iterator iter =
987  definitions.begin();
988 
989  for (; iter != definitions.end(); iter++) {
990  const TTAProgram::DataDefinition* def = (*iter).second;
991  output << dataDefDescription(*def) << endl;
992  }
993  }
994  output << endl;
995 
996  return output.str();
997 }

References TTAProgram::DataMemory::addressSpace(), codeSectionDescription(), dataDefDescription(), TTAProgram::DataMemory::dataDefinition(), TTAProgram::DataMemory::dataDefinitionCount(), TTAProgram::Program::dataMemory(), TTAProgram::Program::dataMemoryCount(), dataSectionDescription(), disassembleProcedures(), TTAProgram::Address::location(), program_, TTAProgram::DataDefinition::startAddress(), and startAddress().

Referenced by disassembleFully().

Here is the call graph for this function:

◆ disassembler()

POMDisassembler * POMDisassembler::disassembler ( const TTAMachine::Machine mach,
const TTAProgram::Program program 
)
static

A factor for building a correct type of disassembler for the target.

Definition at line 1022 of file POMDisassembler.cc.

1024  {
1025  return new POMDisassembler(program);
1026 }

References POMDisassembler(), and program.

Referenced by TTAProgram::Program::finalize(), and SimulatorFrontend::initializeDisassembler().

Here is the call graph for this function:

◆ instructionCount()

Word POMDisassembler::instructionCount ( ) const
virtual

Returns number of instructions in the program.

Returns
Instruction count.

Definition at line 495 of file POMDisassembler.cc.

495  {
496  Word count = 0;
497  unsigned procedureCount = program_.procedureCount();
498  for (unsigned i = 0; i < procedureCount; i++) {
499  const Procedure& procedure = program_.procedure(i);
500  count = count + procedure.instructionCount();
501  }
502  return count;
503 }

References TTAProgram::CodeSnippet::instructionCount(), TTAProgram::Program::procedure(), TTAProgram::Program::procedureCount(), and program_.

Here is the call graph for this function:

◆ instructionSize()

virtual size_t POMDisassembler::instructionSize ( const TTAProgram::Instruction )
inlinevirtual

Returns the size of the instruction in memory addresses, if known. Falls back to address per instruction.

Definition at line 119 of file POMDisassembler.hh.

120  { return 1; }

Referenced by TTAProgram::Program::finalize().

◆ isCallOrJump()

bool POMDisassembler::isCallOrJump ( const TTAProgram::Terminal terminal)
staticprivate

Checks if the terminal is a control unit jump or call operand.

Parameters
terminalTerminal to check.
Returns
True, if the terminal is a control unit jump or call operand, false otherwise.

Definition at line 595 of file POMDisassembler.cc.

595  {
596 
597  if (!terminal.isFUPort()) {
598  return false;
599  }
600 
601  const FunctionUnit* fu = &terminal.functionUnit();
602 
603  if (dynamic_cast<const ControlUnit*>(fu) == NULL) {
604  return false;
605  }
606 
607  if (!terminal.isOpcodeSetting()) {
608  return false;
609  }
610 
611  string operationName =
613 
614  if (operationName == "call" || operationName == "jump") {
615  return true;
616  }
617 
618  return false;
619 }

References TTAProgram::Terminal::functionUnit(), TTAProgram::Terminal::isFUPort(), TTAProgram::Terminal::isOpcodeSetting(), Operation::name(), TTAProgram::Terminal::operation(), and StringTools::stringToLower().

Referenced by createMove().

Here is the call graph for this function:

◆ label() [1/2]

std::string POMDisassembler::label ( const TTAProgram::Program program,
Word  address,
int  index 
)
staticprivate

Returns instruction label with the given index.

Parameters
addressInstruction address.
programProgram to search label for.
Returns
Instruction label with the given index and address.
Exceptions
OutOfRangeThe address or index is out of range.

Definition at line 563 of file POMDisassembler.cc.

564  {
565  if (index == 0 && labelCount(program, address) == 1) {
566  for (int i = 0; i < program.procedureCount(); i++) {
567  if (program.procedure(i).startAddress().location() == address) {
568  return program.procedure(i).name();
569  }
570  }
571  }
572 
573  if (index > labelCount(program, address)) {
574  throw OutOfRange(
575  __FILE__, __LINE__, __func__, "No label in requested index: " +
576  Conversion::toString(index));
577  }
578 
579  Address iaddr(address, program.startAddress().space());
580 
581  const CodeLabel& label =
582  program.globalScopeConst().globalCodeLabel(iaddr, index);
583 
584  return label.name();
585 }

References __func__, label(), labelCount(), program, and Conversion::toString().

Here is the call graph for this function:

◆ label() [2/2]

std::string POMDisassembler::label ( Word  address,
int  index 
) const

Returns instruction label with the given index.

Parameters
addressInstruction address.
Returns
Instruction label with the given index and address.
Exceptions
OutOfRangeThe address or index is out of range.

Definition at line 550 of file POMDisassembler.cc.

550  {
551  return label(program_, address, index);
552 }

References program_.

Referenced by createMove(), destinationLabels(), and label().

◆ labelCount() [1/2]

int POMDisassembler::labelCount ( const TTAProgram::Program program,
Word  address 
)
staticprivate

Returns number of labels at the given address.

Parameters
addressInstruction address.
Returns
Instruction label count.

Definition at line 523 of file POMDisassembler.cc.

523  {
524 
525  Address iaddr(address, program.startAddress().space());
526  const GlobalScope& scope = program.globalScopeConst();
527  unsigned labelCount = scope.globalCodeLabelCount(iaddr);
528 
529  if (labelCount > 0) {
530  return labelCount;
531  }
532 
533  for (int i = 0; i < program.procedureCount(); i++) {
534  if (program.procedure(i).startAddress().location() == address) {
535  return 1;
536  }
537  }
538 
539  return 0;
540 }

References TTAProgram::GlobalScope::globalCodeLabelCount(), labelCount(), and program.

Here is the call graph for this function:

◆ labelCount() [2/2]

int POMDisassembler::labelCount ( Word  address) const

Returns number of labels at the given address.

Parameters
addressInstruction address.
Returns
Instruction label count.

Definition at line 512 of file POMDisassembler.cc.

512  {
513  return labelCount(program_, address);
514 }

References program_.

Referenced by createMove(), destinationLabels(), label(), and labelCount().

◆ labelPositionDescription()

TCEString POMDisassembler::labelPositionDescription ( TCEString  labelStr) const
virtual

Definition at line 856 of file POMDisassembler.cc.

856  {
857  return labelStr + ":";
858 }

Referenced by destinationLabels().

◆ printAddress()

TCEString POMDisassembler::printAddress ( const TTAProgram::Instruction instr) const
virtual

Definition at line 1030 of file POMDisassembler.cc.

1030  {
1031  return TCEString("\t# @") << instr.address().location();
1032 }

References TTAProgram::Instruction::address(), and TTAProgram::Address::location().

Here is the call graph for this function:

◆ procedureDescription()

TCEString POMDisassembler::procedureDescription ( const TTAProgram::Procedure proc)
virtual

Definition at line 833 of file POMDisassembler.cc.

833  {
834  TCEString output;
835  output << ":procedure " << proc.name() << ";";
836  return output;
837 }

References TTAProgram::Procedure::name().

Referenced by disassembleProcedure().

Here is the call graph for this function:

◆ setPrintAddresses()

virtual void POMDisassembler::setPrintAddresses ( bool  addresses)
inlinevirtual

Definition at line 125 of file POMDisassembler.hh.

126  { printAddresses_ = addresses; }

References printAddresses_.

◆ startAddress()

Word POMDisassembler::startAddress ( ) const
virtual

Returns start address of the program.

Returns
Start address of the program.

Definition at line 483 of file POMDisassembler.cc.

483  {
484  unsigned int address = program_.startAddress().location();
485  return address;
486 }

References TTAProgram::Address::location(), program_, and TTAProgram::Program::startAddress().

Referenced by codeSectionDescription(), disassembleProgram(), and main().

Here is the call graph for this function:

Member Data Documentation

◆ printAddresses_

bool POMDisassembler::printAddresses_
protected

True if instruction indices (addresses) should be printed at the end of lines.

Definition at line 134 of file POMDisassembler.hh.

Referenced by disassembleInstruction(), and setPrintAddresses().

◆ program_

const TTAProgram::Program& POMDisassembler::program_
protected

Program object model to disassemble.

Definition at line 132 of file POMDisassembler.hh.

Referenced by createInstruction(), disassembleProcedures(), disassembleProgram(), instructionCount(), label(), labelCount(), and startAddress().


The documentation for this class was generated from the following files:
TTAMachine::Guard
Definition: Guard.hh:55
POMDisassembler::printAddresses_
bool printAddresses_
True if instruction indices (addresses) should be printed at the end of lines.
Definition: POMDisassembler.hh:134
TTAProgram::Move::sourceFileName
std::string sourceFileName() const
Definition: Move.cc:488
POMDisassembler::label
std::string label(Word address, int index) const
Definition: POMDisassembler.cc:550
TTAProgram::Terminal::isFUPort
virtual bool isFUPort() const
Definition: Terminal.cc:118
TTAProgram::Immediate::value
TerminalImmediate & value() const
Definition: Immediate.cc:103
TTAProgram::InstructionReference::instruction
Instruction & instruction() const
Definition: InstructionReference.cc:138
TTAProgram::Program
Definition: Program.hh:63
POMDisassembler::procedureDescription
virtual TCEString procedureDescription(const TTAProgram::Procedure &proc)
Definition: POMDisassembler.cc:833
InstructionAddress
UInt32 InstructionAddress
Definition: BaseType.hh:175
TTAProgram::DataDefinition
Definition: DataDefinition.hh:52
TTAMachine::Component::name
virtual TCEString name() const
Definition: MachinePart.cc:125
TTAProgram::Instruction::move
Move & move(int i) const
Definition: Instruction.cc:193
TTAMachine::PortGuard::port
FUPort * port() const
TTAProgram::Terminal::index
virtual int index() const
Definition: Terminal.cc:274
TTAProgram::Terminal::isInstructionAddress
virtual bool isInstructionAddress() const
Definition: Terminal.cc:87
TTAProgram::Address
Definition: Address.hh:51
TTAProgram::Program::procedureCount
int procedureCount() const
Definition: Program.cc:610
TTAProgram::DataDefinition::startAddress
virtual Address startAddress() const
Definition: DataDefinition.cc:129
machine
TTAMachine::Machine * machine
the architecture definition of the estimated processor
Definition: EstimatorCmdLineUI.cc:59
POMDisassembler::createGuard
static DisassemblyGuard * createGuard(const TTAProgram::MoveGuard &guard)
Definition: POMDisassembler.cc:434
TTAProgram::DataDefinition::size
virtual int size() const
Definition: DataDefinition.cc:211
UnboundedRegisterFile
Definition: UnboundedRegisterFile.hh:43
TTAMachine::HWOperation
Definition: HWOperation.hh:52
TTAMachine::AddressSpace
Definition: AddressSpace.hh:51
POMDisassembler::startAddress
virtual Word startAddress() const
Definition: POMDisassembler.cc:483
TTAProgram::Program::startAddress
Address startAddress() const
Definition: Program.cc:286
TTAMachine::RegisterGuard::registerIndex
int registerIndex() const
TTAMachine::BaseFUPort::parentUnit
FunctionUnit * parentUnit() const
Definition: BaseFUPort.cc:96
TTAProgram::Terminal::registerFile
virtual const TTAMachine::RegisterFile & registerFile() const
Definition: Terminal.cc:225
DisassemblyInstruction::toString
std::string toString() const
Definition: DisassemblyInstruction.cc:135
TTAMachine::Machine::isUniversalMachine
virtual bool isUniversalMachine() const
Definition: Machine.cc:127
TTAProgram::Instruction
Definition: Instruction.hh:57
TTAProgram::Move::isUnconditional
bool isUnconditional() const
Definition: Move.cc:154
POMDisassembler::disassembleProcedures
virtual TCEString disassembleProcedures()
Definition: POMDisassembler.cc:886
TTAProgram::Move::sourceLineNumber
int sourceLineNumber() const
Definition: Move.cc:459
OutOfRange
Definition: Exception.hh:320
TTAMachine::Bus
Definition: Bus.hh:53
DisassemblyControlUnitPort
Definition: DisassemblyControlUnitPort.hh:41
DisassemblyMove::toString
virtual std::string toString() const
Definition: DisassemblyMove.cc:73
DisassemblyImmediateRegister
Definition: DisassemblyImmediateRegister.hh:43
TTAProgram::DataMemory::addressSpace
const TTAMachine::AddressSpace & addressSpace() const
Definition: DataMemory.cc:182
TTAProgram::Move::destination
Terminal & destination() const
Definition: Move.cc:323
POMDisassembler::createTerminal
static DisassemblyElement * createTerminal(const TTAProgram::Terminal &terminal)
Definition: POMDisassembler.cc:265
TTAMachine::ImmediateUnit::signExtends
bool signExtends() const
Definition: ImmediateUnit.hh:62
DisassemblyElement
Definition: DisassemblyElement.hh:41
NullSimValue::instance
static SimValue & instance()
Definition: SimValue.cc:1642
TTAProgram::DataMemory::dataDefinitionCount
int dataDefinitionCount() const
Definition: DataMemory.cc:129
TTAProgram::Move::bus
const TTAMachine::Bus & bus() const
Definition: Move.cc:373
TTAProgram::TerminalFUPort::operation
virtual Operation & operation() const
Definition: TerminalFUPort.cc:213
UniversalFunctionUnit
Definition: UniversalFunctionUnit.hh:50
TTAProgram::CodeSnippet::startAddress
virtual Address startAddress() const
Definition: CodeSnippet.cc:780
POMDisassembler::destinationLabels
virtual TCEString destinationLabels(const TTAProgram::Procedure &proc, int instrIndex) const
Definition: POMDisassembler.cc:840
POMDisassembler::createInlineImmediate
static DisassemblyImmediate * createInlineImmediate(const TTAProgram::Terminal &terminal, bool signExtend)
Definition: POMDisassembler.cc:296
POMDisassembler::isCallOrJump
static bool isCallOrJump(const TTAProgram::Terminal &terminal)
Definition: POMDisassembler.cc:595
DisassemblyImmediateAssignment
Definition: DisassemblyImmediateAssignment.hh:46
TTAMachine::Machine::Navigator::count
int count() const
TTAProgram::Terminal::instructionReference
virtual const InstructionReference & instructionReference() const
Definition: Terminal.cc:188
NullOperation::instance
static NullOperation & instance()
TTAProgram::GlobalScope::globalCodeLabelCount
int globalCodeLabelCount(Address address) const
Definition: GlobalScope.cc:93
POMDisassembler::createMove
static DisassemblyMove * createMove(const TTAProgram::Move &move)
Definition: POMDisassembler.cc:200
Operation::name
virtual TCEString name() const
Definition: Operation.cc:93
POMDisassembler::POMDisassembler
POMDisassembler(bool indices=false)
Definition: POMDisassembler.cc:115
Conversion::toString
static std::string toString(const T &source)
TTAMachine::Bus::signExtends
bool signExtends() const
Definition: Bus.cc:171
SimValue
Definition: SimValue.hh:96
TTAProgram::Terminal::operation
virtual Operation & operation() const
Definition: Terminal.cc:319
TTAProgram::Program::procedureAtIndex
const Procedure & procedureAtIndex(int index) const
Definition: Program.cc:508
TTAProgram::Immediate::destination
const Terminal & destination() const
Definition: Immediate.cc:92
assert
#define assert(condition)
Definition: Application.hh:86
TTAProgram::TerminalImmediate::value
virtual SimValue value() const
Definition: TerminalImmediate.cc:75
TTAMachine::FunctionUnit
Definition: FunctionUnit.hh:55
TTAProgram::Program::instructionAt
Instruction & instructionAt(InstructionAddress address) const
Definition: Program.cc:374
POMDisassembler::labelPositionDescription
virtual TCEString labelPositionDescription(TCEString labelStr) const
Definition: POMDisassembler.cc:856
TTAProgram::TerminalFUPort::hintOperation
virtual Operation & hintOperation() const
Definition: TerminalFUPort.cc:262
TTAProgram::Terminal::isImmediateRegister
virtual bool isImmediateRegister() const
Definition: Terminal.cc:97
TTAMachine::FUPort
Definition: FUPort.hh:46
DisassemblyMove
Definition: DisassemblyMove.hh:44
LongWord
unsigned long LongWord
Definition: BaseType.hh:49
POMDisassembler::dataSectionDescription
virtual TCEString dataSectionDescription(const TTAMachine::AddressSpace &aSpace, Word location)
Definition: POMDisassembler.cc:924
TTAMachine::HWOperation::io
int io(const FUPort &port) const
Definition: HWOperation.cc:364
TTAMachine::HWOperation::name
const std::string & name() const
Definition: HWOperation.cc:141
TTAProgram::Move::isCall
bool isCall() const
Definition: Move.cc:190
TTAProgram::CodeSnippet::instructionCount
virtual int instructionCount() const
Definition: CodeSnippet.cc:205
TTAMachine::ControlUnit
Definition: ControlUnit.hh:50
UniversalMachine
Definition: UniversalMachine.hh:56
WrongSubclass
Definition: Exception.hh:336
TTAMachine::RegisterGuard
Definition: Guard.hh:137
POMDisassembler::dataDefDescription
virtual TCEString dataDefDescription(const TTAProgram::DataDefinition &def)
Definition: POMDisassembler.cc:933
TTAProgram::Program::dataMemory
DataMemory & dataMemory(int index) const
Definition: Program.cc:967
TTAProgram::DataDefinition::isInitialized
virtual bool isInitialized() const
Definition: DataDefinition.cc:144
DisassemblyGuard
Definition: DisassemblyGuard.hh:41
TTAProgram::Move::guard
MoveGuard & guard() const
Definition: Move.cc:345
POMDisassembler
Definition: POMDisassembler.hh:70
__func__
#define __func__
Definition: Application.hh:67
TTAProgram::Instruction::parent
CodeSnippet & parent() const
Definition: Instruction.cc:109
POMDisassembler::disassembleProcedure
virtual TCEString disassembleProcedure(const TTAProgram::Procedure &proc)
Definition: POMDisassembler.cc:861
SimValue::uLongWordValue
ULongWord uLongWordValue() const
Definition: SimValue.cc:1027
TTAProgram::Terminal::isGPR
virtual bool isGPR() const
Definition: Terminal.cc:107
TTAProgram::CodeLabel
Definition: CodeLabel.hh:49
DisassemblyImmediate
Definition: DisassemblyImmediate.hh:42
TTAProgram::Terminal::value
virtual SimValue value() const
Definition: Terminal.cc:178
TTAProgram::Terminal::immediateUnit
virtual const TTAMachine::ImmediateUnit & immediateUnit() const
Definition: Terminal.cc:240
TTAProgram::TerminalFUPort::port
virtual const TTAMachine::Port & port() const
Definition: TerminalFUPort.cc:291
TTAProgram::GlobalScope
Definition: GlobalScope.hh:47
TTAProgram::Address::location
InstructionAddress location() const
TTAProgram::Move
Definition: Move.hh:55
POMDisassembler::createImmediateAssignment
static DisassemblyImmediateAssignment * createImmediateAssignment(const TTAProgram::Immediate &immediate)
Definition: POMDisassembler.cc:246
Exception
Definition: Exception.hh:54
TTAProgram::Move::isInInstruction
bool isInInstruction() const
Definition: Move.cc:144
TTAProgram::TerminalFUPort::isOpcodeSetting
virtual bool isOpcodeSetting() const
Definition: TerminalFUPort.cc:180
DisassemblyFPRegister
Definition: DisassemblyFPRegister.hh:42
TTAProgram::Instruction::immediate
Immediate & immediate(int i) const
Definition: Instruction.cc:285
TTAProgram::Terminal::isOpcodeSetting
virtual bool isOpcodeSetting() const
Definition: Terminal.cc:285
TTAProgram::Program::dataMemoryCount
int dataMemoryCount() const
Definition: Program.cc:942
POMDisassembler::program_
const TTAProgram::Program & program_
Program object model to disassemble.
Definition: POMDisassembler.hh:132
DisassemblyInstruction::addMove
void addMove(DisassemblyInstructionSlot *move)
Definition: DisassemblyInstruction.cc:58
TTAProgram::TerminalFUPort
Definition: TerminalFUPort.hh:56
TTAProgram::Instruction::instructionTemplate
const TTAMachine::InstructionTemplate & instructionTemplate() const
Definition: Instruction.cc:523
TTAProgram::Terminal::functionUnit
virtual const TTAMachine::FunctionUnit & functionUnit() const
Definition: Terminal.cc:251
POMDisassembler::createFUPort
static DisassemblyElement * createFUPort(const TTAProgram::Terminal &terminal)
Definition: POMDisassembler.cc:320
DisassemblyBoolRegister
Definition: DisassemblyBoolRegister.hh:42
TTAProgram::Instruction::isInProcedure
bool isInProcedure() const
Definition: Instruction.cc:135
POMDisassembler::disassemble
static std::string disassemble(const TTAProgram::Move &move)
Definition: POMDisassembler.cc:629
TTAProgram::Move::hasSourceLineNumber
bool hasSourceLineNumber() const
Definition: Move.cc:445
TTAProgram::Move::parent
Instruction & parent() const
Definition: Move.cc:115
DisassemblyIntRegister
Definition: DisassemblyIntRegister.hh:42
TTAProgram::Terminal::toString
virtual TCEString toString() const =0
POMDisassembler::codeSectionDescription
virtual TCEString codeSectionDescription(Word startAddress)
Definition: POMDisassembler.cc:917
DisassemblyLabel
Definition: DisassemblyLabel.hh:41
TTAMachine::Component::machine
virtual Machine * machine() const
TTAMachine::Port::name
virtual std::string name() const
Definition: Port.cc:141
TTAProgram::CodeSnippet::parent
virtual Program & parent() const
Definition: CodeSnippet.cc:118
TCEString
Definition: TCEString.hh:53
TTAProgram::Instruction::size
short size() const
Definition: Instruction.cc:365
TTAProgram::Instruction::immediateCount
int immediateCount() const
Definition: Instruction.cc:267
TTAProgram::TerminalFUPort::hwOperation
virtual const TTAMachine::HWOperation * hwOperation() const
Definition: TerminalFUPort.cc:379
DisassemblyOperand
Definition: DisassemblyOperand.hh:43
TTAProgram::DataMemory::dataDefinition
DataDefinition & dataDefinition(Address address) const
Definition: DataMemory.cc:79
DisassemblyFUOpcodePort
Definition: DisassemblyFUOpcodePort.hh:38
DisassemblyFUPort
Definition: DisassemblyFUPort.hh:41
TTAProgram::Procedure::name
TCEString name() const
Definition: Procedure.hh:66
DisassemblyRegister
Definition: DisassemblyRegister.hh:51
TTAProgram::CodeSnippet::instructionAtIndex
virtual Instruction & instructionAtIndex(int index) const
Definition: CodeSnippet.cc:285
TTAProgram::Move::source
Terminal & source() const
Definition: Move.cc:302
TTAProgram::Terminal::port
virtual const TTAMachine::Port & port() const
Definition: Terminal.cc:378
TTAMachine::Machine::Navigator::item
ComponentType * item(int index) const
TTAMachine::PortGuard
Definition: Guard.hh:99
TTAMachine::FunctionUnit::operation
virtual HWOperation * operation(const std::string &name) const
Definition: FunctionUnit.cc:363
program
find Finds info of the inner loops in the program
Definition: InnerLoopFinder.cc:80
TTAProgram::Terminal::isCodeSymbolReference
virtual bool isCodeSymbolReference() const
Definition: Terminal.cc:154
TTAMachine::RegisterFile
Definition: RegisterFile.hh:47
TTAProgram::MoveGuard::guard
const TTAMachine::Guard & guard() const
Definition: MoveGuard.cc:86
TTAProgram::Move::isJump
bool isJump() const
Definition: Move.cc:164
TTAMachine::FunctionUnit::operationPort
virtual FUPort * operationPort(const std::string &name) const
Definition: FunctionUnit.cc:224
POMDisassembler::disassembleInstruction
virtual TCEString disassembleInstruction(const TTAProgram::Instruction &instruction, int addr=-1)
"Template methods" that can be overridden in the derived assemblers.
Definition: POMDisassembler.cc:675
POMDisassembler::labelCount
int labelCount(Word address) const
Definition: POMDisassembler.cc:512
TTAProgram::DataMemory
Definition: DataMemory.hh:56
DisassemblyInstruction::addLongImmediate
void addLongImmediate(DisassemblyImmediateAssignment *longImm)
Definition: DisassemblyInstruction.cc:96
TTAProgram::Terminal::isImmediate
virtual bool isImmediate() const
Definition: Terminal.cc:63
DisassemblyNOP
Definition: DisassemblyNOP.hh:41
TTAMachine::RegisterGuard::registerFile
const RegisterFile * registerFile() const
TTAProgram::TerminalProgramOperation
Definition: TerminalProgramOperation.hh:51
POMDisassembler::createRegister
static DisassemblyElement * createRegister(const TTAProgram::Terminal &terminal)
Definition: POMDisassembler.cc:370
TTAProgram::Program::procedure
Procedure & procedure(int index) const
Definition: Program.cc:622
TTAProgram::Procedure
Definition: Procedure.hh:55
TTAMachine::Machine::Navigator
Definition: Machine.hh:186
DisassemblySequentialGuard
Definition: DisassemblySequentialGuard.hh:41
StringTools::stringToLower
static std::string stringToLower(const std::string &source)
Definition: StringTools.cc:160
TTAProgram::Instruction::moveCount
int moveCount() const
Definition: Instruction.cc:176
TTAMachine::InstructionTemplate::usesSlot
virtual bool usesSlot(const std::string &slotName) const
Definition: InstructionTemplate.cc:265
TTAProgram::Instruction::address
Address address() const
Definition: Instruction.cc:327
POMDisassembler::createImmediateRegister
static DisassemblyImmediateRegister * createImmediateRegister(const TTAProgram::Terminal &terminal)
Definition: POMDisassembler.cc:420
InstanceNotFound
Definition: Exception.hh:304
DisassemblyInstruction
Definition: DisassemblyInstruction.hh:46
TTAProgram::CodeSnippet::isInProgram
virtual bool isInProgram() const
Definition: CodeSnippet.cc:151
TTAMachine::Machine
Definition: Machine.hh:73
TTAProgram::Move::hasSourceFileName
bool hasSourceFileName() const
Definition: Move.cc:478
POMDisassembler::createInstruction
virtual DisassemblyInstruction * createInstruction(Word instructionIndex) const
Definition: POMDisassembler.cc:137
TTAProgram::DataDefinition::MAU
virtual MinimumAddressableUnit MAU(int index) const
Definition: DataDefinition.cc:155