OpenASIP  2.0
POMDisassembler.hh
Go to the documentation of this file.
1 /*
2  Copyright (c) 2002-2016 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 PomDisassembler.hh
26  *
27  * Declaration of POMDisassembler class.
28  *
29  * @author Veli-Pekka Jääskeläinen 2005 (vjaaskel-no.spam-cs.tut.fi)
30  * @author Pekka Jääskeläinen 2016
31  * @author Henry Linjamäki 2016-2017
32  * @note rating: red
33  */
34 
35 #ifndef TTA_POM_DISASSEMBLER_HH
36 #define TTA_POM_DISASSEMBLER_HH
37 
38 #include "BaseType.hh"
39 #include "Exception.hh"
40 
42 class DisassemblyMove;
43 class DisassemblyGuard;
44 class DisassemblyElement;
48 
49 namespace TTAProgram {
50  class Move;
51  class Immediate;
52  class Instruction;
53  class Program;
54  class MoveGuard;
55  class Procedure;
56  class Terminal;
57  class DataDefinition;
58 }
59 
60 namespace TTAMachine {
61  class AddressSpace;
62  class Machine;
63 }
64 
65 class TCEString;
66 
67 /**
68  * Program object model disassembler.
69  */
71 public:
72  explicit POMDisassembler(bool indices=false);
73  explicit POMDisassembler(const TTAProgram::Program& program, bool indices=false);
74  virtual ~POMDisassembler();
75 
76  virtual DisassemblyInstruction*
77  createInstruction(Word instructionIndex) const;
78 
79  virtual Word startAddress() const;
80  virtual Word instructionCount() const;
81 
82  int labelCount(Word address) const;
83  std::string label(Word address, int index) const;
84 
86  const TTAMachine::Machine& mach,
88 
89  static std::string disassemble(const TTAProgram::Move& move);
90  static std::string disassemble(
91  const TTAProgram::Instruction& instruction,
92  bool indices=false,
93  int addr = -1);
94  static std::string disassemble(
95  const TTAProgram::Procedure& proc, bool indices = false);
96  static std::string disassemble(
97  const TTAProgram::Program& program, bool indices = false);
99  const TTAProgram::Program& program, bool indices = false);
100 
101  /// "Template methods" that can be overridden in the derived assemblers.
103  const TTAProgram::Instruction& instruction,
104  int addr = -1);
107  virtual TCEString disassembleProgram();
110  const TTAMachine::AddressSpace& aSpace, Word location);
113  const TTAProgram::Procedure& proc, int instrIndex) const;
114  virtual TCEString labelPositionDescription(TCEString labelStr) const;
116  const TTAProgram::DataDefinition& def);
117  /// Returns the size of the instruction in memory addresses, if known.
118  /// Falls back to address per instruction.
119  virtual size_t instructionSize(const TTAProgram::Instruction& /*instruction*/)
120  { return 1; }
121 
123  const TTAProgram::Terminal& terminal, bool signExtend);
124 
125  virtual void setPrintAddresses(bool addresses)
126  { printAddresses_ = addresses; }
127 
128  virtual TCEString printAddress(const TTAProgram::Instruction& instr) const;
129 
130 protected:
131  /// Program object model to disassemble.
133  /// True if instruction indices (addresses) should be printed at the end of lines.
135 private:
136  static int labelCount(const TTAProgram::Program& program, Word address);
137  static std::string label(
138  const TTAProgram::Program&, Word address, int index);
139 
142  const TTAProgram::Instruction& instruction);
143  static DisassemblyMove* createMove(const TTAProgram::Move& move);
145  const TTAProgram::Immediate& immediate);
147  const TTAProgram::MoveGuard& guard);
149  const TTAProgram::Terminal& terminal);
151  const TTAProgram::Terminal& terminal);
153  const TTAProgram::Terminal& terminal);
155  const TTAProgram::Terminal& terminal);
156 
157  static bool isCallOrJump(const TTAProgram::Terminal& terminal);
158 };
159 #endif
POMDisassembler::printAddresses_
bool printAddresses_
True if instruction indices (addresses) should be printed at the end of lines.
Definition: POMDisassembler.hh:134
POMDisassembler::label
std::string label(Word address, int index) const
Definition: POMDisassembler.cc:550
TTAProgram
Definition: Estimator.hh:65
TTAProgram::Program
Definition: Program.hh:63
POMDisassembler::procedureDescription
virtual TCEString procedureDescription(const TTAProgram::Procedure &proc)
Definition: POMDisassembler.cc:833
BaseType.hh
TTAProgram::DataDefinition
Definition: DataDefinition.hh:52
POMDisassembler::createGuard
static DisassemblyGuard * createGuard(const TTAProgram::MoveGuard &guard)
Definition: POMDisassembler.cc:434
TTAMachine::AddressSpace
Definition: AddressSpace.hh:51
Exception.hh
POMDisassembler::startAddress
virtual Word startAddress() const
Definition: POMDisassembler.cc:483
TTAProgram::Instruction
Definition: Instruction.hh:57
POMDisassembler::disassembleProcedures
virtual TCEString disassembleProcedures()
Definition: POMDisassembler.cc:886
POMDisassembler::disassembleFully
static TCEString disassembleFully(const TTAProgram::Program &program, bool indices=false)
Definition: POMDisassembler.cc:910
DisassemblyImmediateRegister
Definition: DisassemblyImmediateRegister.hh:43
POMDisassembler::printAddress
virtual TCEString printAddress(const TTAProgram::Instruction &instr) const
Definition: POMDisassembler.cc:1030
POMDisassembler::createTerminal
static DisassemblyElement * createTerminal(const TTAProgram::Terminal &terminal)
Definition: POMDisassembler.cc:265
DisassemblyElement
Definition: DisassemblyElement.hh:41
POMDisassembler::instructionCount
virtual Word instructionCount() const
Definition: POMDisassembler.cc:495
POMDisassembler::setPrintAddresses
virtual void setPrintAddresses(bool addresses)
Definition: POMDisassembler.hh:125
POMDisassembler::disassembler
static POMDisassembler * disassembler(const TTAMachine::Machine &mach, const TTAProgram::Program &program)
Definition: POMDisassembler.cc:1022
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
POMDisassembler::createMove
static DisassemblyMove * createMove(const TTAProgram::Move &move)
Definition: POMDisassembler.cc:200
POMDisassembler::POMDisassembler
POMDisassembler(bool indices=false)
Definition: POMDisassembler.cc:115
POMDisassembler::labelPositionDescription
virtual TCEString labelPositionDescription(TCEString labelStr) const
Definition: POMDisassembler.cc:856
DisassemblyMove
Definition: DisassemblyMove.hh:44
POMDisassembler::dataSectionDescription
virtual TCEString dataSectionDescription(const TTAMachine::AddressSpace &aSpace, Word location)
Definition: POMDisassembler.cc:924
TTAProgram::Immediate
Definition: Immediate.hh:54
POMDisassembler::dataDefDescription
virtual TCEString dataDefDescription(const TTAProgram::DataDefinition &def)
Definition: POMDisassembler.cc:933
DisassemblyGuard
Definition: DisassemblyGuard.hh:41
POMDisassembler
Definition: POMDisassembler.hh:70
POMDisassembler::disassembleProcedure
virtual TCEString disassembleProcedure(const TTAProgram::Procedure &proc)
Definition: POMDisassembler.cc:861
DisassemblyImmediate
Definition: DisassemblyImmediate.hh:42
TTAProgram::Move
Definition: Move.hh:55
POMDisassembler::createImmediateAssignment
static DisassemblyImmediateAssignment * createImmediateAssignment(const TTAProgram::Immediate &immediate)
Definition: POMDisassembler.cc:246
POMDisassembler::program_
const TTAProgram::Program & program_
Program object model to disassemble.
Definition: POMDisassembler.hh:132
POMDisassembler::createFUPort
static DisassemblyElement * createFUPort(const TTAProgram::Terminal &terminal)
Definition: POMDisassembler.cc:320
POMDisassembler::disassemble
static std::string disassemble(const TTAProgram::Move &move)
Definition: POMDisassembler.cc:629
POMDisassembler::disassembleProgram
virtual TCEString disassembleProgram()
Definition: POMDisassembler.cc:956
POMDisassembler::codeSectionDescription
virtual TCEString codeSectionDescription(Word startAddress)
Definition: POMDisassembler.cc:917
TCEString
Definition: TCEString.hh:53
TTAProgram::Terminal
Definition: Terminal.hh:60
program
find Finds info of the inner loops in the program
Definition: InnerLoopFinder.cc:80
POMDisassembler::instructionSize
virtual size_t instructionSize(const TTAProgram::Instruction &)
Returns the size of the instruction in memory addresses, if known. Falls back to address per instruct...
Definition: POMDisassembler.hh:119
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
TTAMachine
Definition: Assembler.hh:48
TTAProgram::MoveGuard
Definition: MoveGuard.hh:47
POMDisassembler::createRegister
static DisassemblyElement * createRegister(const TTAProgram::Terminal &terminal)
Definition: POMDisassembler.cc:370
TTAProgram::Procedure
Definition: Procedure.hh:55
POMDisassembler::~POMDisassembler
virtual ~POMDisassembler()
Definition: POMDisassembler.cc:123
POMDisassembler::createImmediateRegister
static DisassemblyImmediateRegister * createImmediateRegister(const TTAProgram::Terminal &terminal)
Definition: POMDisassembler.cc:420
DisassemblyInstruction
Definition: DisassemblyInstruction.hh:46
TTAMachine::Machine
Definition: Machine.hh:73
POMDisassembler::createInstruction
virtual DisassemblyInstruction * createInstruction(Word instructionIndex) const
Definition: POMDisassembler.cc:137