OpenASIP 2.2
Loading...
Searching...
No Matches
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
42class DisassemblyMove;
48
49namespace 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
60namespace TTAMachine {
61 class AddressSpace;
62 class Machine;
63}
64
65class TCEString;
66
67/**
68 * Program object model disassembler.
69 */
71public:
72 explicit POMDisassembler(bool indices=false);
73 explicit POMDisassembler(const TTAProgram::Program& program, bool indices=false);
74 virtual ~POMDisassembler();
75
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);
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
130protected:
131 /// Program object model to disassemble.
133 /// True if instruction indices (addresses) should be printed at the end of lines.
135private:
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
find Finds info of the inner loops in the program
static DisassemblyImmediate * createInlineImmediate(const TTAProgram::Terminal &terminal, bool signExtend)
virtual TCEString procedureDescription(const TTAProgram::Procedure &proc)
int labelCount(Word address) const
static DisassemblyImmediateRegister * createImmediateRegister(const TTAProgram::Terminal &terminal)
static POMDisassembler * disassembler(const TTAMachine::Machine &mach, const TTAProgram::Program &program)
virtual TCEString disassembleInstruction(const TTAProgram::Instruction &instruction, int addr=-1)
"Template methods" that can be overridden in the derived assemblers.
static bool isCallOrJump(const TTAProgram::Terminal &terminal)
static std::string disassemble(const TTAProgram::Move &move)
static DisassemblyElement * createRegister(const TTAProgram::Terminal &terminal)
static TCEString disassembleFully(const TTAProgram::Program &program, bool indices=false)
virtual TCEString disassembleProgram()
virtual size_t instructionSize(const TTAProgram::Instruction &)
Returns the size of the instruction in memory addresses, if known. Falls back to address per instruct...
virtual DisassemblyInstruction * createInstruction(Word instructionIndex) const
static DisassemblyElement * createTerminal(const TTAProgram::Terminal &terminal)
virtual Word instructionCount() const
virtual void setPrintAddresses(bool addresses)
static DisassemblyElement * createFUPort(const TTAProgram::Terminal &terminal)
static DisassemblyMove * createMove(const TTAProgram::Move &move)
virtual ~POMDisassembler()
virtual TCEString dataDefDescription(const TTAProgram::DataDefinition &def)
virtual TCEString disassembleProcedure(const TTAProgram::Procedure &proc)
bool printAddresses_
True if instruction indices (addresses) should be printed at the end of lines.
virtual Word startAddress() const
virtual TCEString labelPositionDescription(TCEString labelStr) const
virtual TCEString printAddress(const TTAProgram::Instruction &instr) const
static DisassemblyImmediateAssignment * createImmediateAssignment(const TTAProgram::Immediate &immediate)
virtual TCEString destinationLabels(const TTAProgram::Procedure &proc, int instrIndex) const
virtual TCEString disassembleProcedures()
virtual TCEString dataSectionDescription(const TTAMachine::AddressSpace &aSpace, Word location)
std::string label(Word address, int index) const
const TTAProgram::Program & program_
Program object model to disassemble.
virtual TCEString codeSectionDescription(Word startAddress)
static DisassemblyGuard * createGuard(const TTAProgram::MoveGuard &guard)