Go to the documentation of this file.
35 #include <boost/format.hpp>
88 #include "tce_config.h"
105 tpefPrograms_(), currentTPEF_(NULL), currentPOM_(NULL),
106 currentProgram_(), bem_(NULL), machine_(NULL),
107 parameters_(), programBits_(NULL), allStartsAtBeginningOfMAU_(
false),
108 mau_(0), addressSpaceOffset_(0), instructionsAtBeginningOfMAU_(),
109 immediatesToRelocate_(), terminalsToRelocate_(), relocMap_(),
110 indexTable_(), instructionAddresses_() {
145 std::map<std::string, TPEF::Binary*>& programs) {
164 string errorMsg =
"The machine does not have GCU.";
170 string errorMsg =
"Bem not set!";
210 for (
int i = 0; i <
program.procedureCount(); i++) {
243 int moveSlotIndex = 0;
250 return moveSlotIndex;
265 const string procName =
"CodeCompressorPlugin::memoryAddress";
268 return MapTools::valueForKey<unsigned int>(
335 string errorMsg =
"Program " + programName +
" not found from "
336 +
"compressor plugin";
343 string errorMsg =
"Program bits for program " + programName
391 unsigned int instructionPosition = firstFree;
398 for (
unsigned int i = firstFree; i < instructionPosition; i++) {
410 (instructionPosition /
mau_);
413 std::pair<const Instruction*, unsigned int>(
463 for (
int i =
binaryEncoding().childFieldCount() - 1; i >= 0; i--) {
472 unsigned int oldSize = instructionBits->size();
473 if (icField != NULL) {
475 *icField, instruction, *instructionBits);
477 instructionBits->size() - oldSize ==
478 static_cast<size_t>(icField->
width()));
479 }
else if (moveSlot != NULL) {
481 *moveSlot, instruction, *instructionBits);
483 instructionBits->size() - oldSize ==
484 static_cast<size_t>(moveSlot->
width()));
485 }
else if (immField != NULL) {
487 *immField, instruction, *instructionBits);
488 assert(instructionBits->size() - oldSize ==
489 static_cast<size_t>(immField->
width()));
490 }
else if (dstRegField != NULL) {
492 *dstRegField, instruction, *instructionBits);
494 instructionBits->size() - oldSize ==
495 static_cast<size_t>(dstRegField->
width()));
502 for (RelocMap::const_iterator iter =
relocMap_.begin();
504 const Immediate* immediate = (*iter).first;
510 for (vector<IndexBound>::const_iterator iter = indexes.begin();
511 iter != indexes.end(); iter++) {
519 return instructionBits;
539 int bitCount =
mau_ - (bits->size() %
mau_);
540 if (bitCount ==
mau_) {
543 for (
int i = 0; i < bitCount; i++) {
544 bits->push_back(
false);
559 for (ParameterTable::const_iterator iter =
parameters_.begin();
562 if (param.
name == paramName) {
579 for (ParameterTable::const_iterator iter =
parameters_.begin();
582 if (param.
name == paramName) {
633 CodeCompressorPlugin::TPEFMap::const_iterator
636 string errorMsg(
"Tried to overindex program map");
640 for (
int i = 0; i < index; i++) {
654 for (
int i = 0; i < level; i++) {
689 format text = textGenerator.
text(
692 const string procName =
"CodeCompressorPlugin::addBitsForICField";
693 throw InvalidData(__FILE__, __LINE__, procName, text.str());
713 string busName = slot.
name();
715 if (!busNav.
hasItem(busName)) {
717 format text = textGenerator.
text(
720 const string procName =
"CodeCompressorPlugin::addBitsForMoveSlot";
721 throw InvalidData(__FILE__, __LINE__, procName, text.str());
724 Bus* bus = busNav.
item(busName);
732 if (
machine().immediateUnitNavigator().count() == 0) {
734 unsigned int oldSize = bitVector.size();
737 bitVector.size() - oldSize ==
738 static_cast<size_t>(slot.
width()));
755 bus->
name(), slot.
width(), instruction, bitVector);
773 unsigned int oldSize = bitVector.size();
779 }
else if (source.
isGPR()) {
788 bitVector.size() - oldSize ==
static_cast<size_t>(srcField.
width()));
806 if (destination.
isGPR()) {
808 }
else if (destination.
isFUPort()) {
827 unsigned int encodingValue(0);
828 const string procName =
"CodeCompressorPlugin::addBitsForGuardField";
834 unconditionalGuardEncoding(
false);
837 format text = textGenerator.
text(
840 throw InvalidData(__FILE__, __LINE__, procName, text.str());
842 encodingValue = encoding.
encoding();
850 if (portGuard != NULL) {
851 const Port& port = *portGuard->
port();
852 string portName = port.
name();
858 format text = textGenerator.
text(
861 text %
"inverted" % portName % fuName;
863 text %
"non-inverted" % portName % fuName;
866 __FILE__, __LINE__, procName, text.str());
868 encodingValue = encoding.
encoding();
870 }
else if (registerGuard != NULL) {
877 format text = textGenerator.
text(
880 text %
"inverted" % regIndex % rfName;
882 text %
"non-inverted" % regIndex % rfName;
885 __FILE__, __LINE__, procName, text.str());
887 encodingValue = encoding.
encoding();
895 unsigned int oldSize = bitVector.size();
898 bitVector.size() - oldSize ==
899 static_cast<size_t>(guardField.
width()));
920 if (
machine().immediateUnitNavigator().count() == 0) {
923 format text = textGenerator.
text(
925 TXT_BEM_DEFINES_IMM_SLOT_THAT_IS_NEVER_USED);
926 const string procName =
927 "CodeCompressorPlugin::addBitsForImmediateSlot";
928 throw InvalidData(__FILE__, __LINE__, procName, text.str());
944 immSlot.
name(), immSlot.
width(), instruction, bitVector);
979 if (dstIU.
name() == iuName) {
1002 for (
int i = 0; i < itNav.
count(); i++) {
1005 return iTemp->
name();
1008 const string procName =
"CodeCompressorPlugin::instructionTemplate";
1046 unsigned int position)
const {
1048 if (position %
mau_ == 0) {
1051 return position +
mau_ - (position %
mau_);
1067 const std::string& slotName,
1083 int rightmostBitToEncode = 0;
1084 for (
int i = iTemp.
numberOfSlots(*dstUnit) - 1; i >= 0; i--) {
1086 if (slotOfImm != slotName) {
1093 int leftmostBitToEncode =
1094 rightmostBitToEncode + limmSlotWidth - 1;
1095 assert(leftmostBitToEncode >= rightmostBitToEncode);
1097 leftmostBitToEncode - rightmostBitToEncode < slotWidth);
1101 int zerosToAdd = slotWidth - (
1102 leftmostBitToEncode - rightmostBitToEncode) - 1;
1104 for (
int i = 0; i < zerosToAdd; i++) {
1105 bitVector.push_back(
false);
1111 immediateValue, leftmostBitToEncode, rightmostBitToEncode,
1119 unsigned int startIndex = bitVector.size() - slotWidth;
1120 unsigned int endIndex = bitVector.size() - 1;
1122 pair<const Immediate*, const Instruction*>(
1123 &imm, &referenced));
1124 vector<IndexBound> indices;
1126 indices = MapTools::valueForKey<vector<IndexBound> >(
1129 IndexBound bounds(startIndex, endIndex, limmSlotWidth,
1130 leftmostBitToEncode, rightmostBitToEncode);
1131 indices.push_back(bounds);
1154 string busName = slot.
name();
1156 Bus* bus = busNav.
item(busName);
1158 for (
int i = 0; i < instruction.
moveCount(); i++) {
1160 if (&move.
bus() == bus) {
1167 unsigned int oldSize = bitVector.size();
1168 if (
dynamic_cast<GuardField*
>(&childField) != NULL) {
1170 assert(bitVector.size() - oldSize ==
1171 static_cast<size_t>(guardField.
width()));
1172 }
else if (
dynamic_cast<SourceField*
>(&childField) != NULL) {
1174 assert(bitVector.size() - oldSize ==
1175 static_cast<size_t>(srcField.
width()));
1180 assert(bitVector.size() - oldSize ==
1181 static_cast<size_t>(dstField.
width()));
1191 unsigned int oldSize = bitVector.size();
1193 assert(bitVector.size() - oldSize ==
static_cast<size_t>(slot.
width()));
1211 if (&guardField == &childField) {
1217 guardField.
width());
1222 }
else if (&srcField == &childField) {
1223 if (srcField.
width() == 0) {
1231 format text = textGenerator.
text(
1234 const string procName =
"CodeCompressorPlugin::encodeNOP";
1236 __FILE__, __LINE__, procName, text.str());
1252 }
else if (&dstField == &childField) {
1253 if (dstField.
width() == 0) {
1260 format text = textGenerator.
text(
1291 const string procName =
"CodeCompressorPlugin::encodeIUTerminal";
1294 const Port& port = terminal.
port();
1295 string socketName(
"");
1298 if (
dynamic_cast<const SourceField*
>(&field) != NULL) {
1308 format text = textGenerator.
text(
1310 if (
dynamic_cast<const SourceField*
>(&field) != NULL) {
1311 text % socketName %
"source" % field.
parent()->
name();
1313 text % socketName %
"destination" % field.
parent()->
name();
1315 throw InvalidData(__FILE__, __LINE__, procName, text.str());
1329 format text = textGenerator.
text(
1331 text % iuName % socketName % field.
parent()->
name();
1332 throw InvalidData(__FILE__, __LINE__, procName, text.str());
1336 unsigned int registerIndex = terminal.
index();
1339 socketCodes, portCode, registerIndex));
1357 const string procName =
"CodeCompressorPlugin::encodeRFTerminal";
1360 const Port& port = terminal.
port();
1361 string socketName(
"");
1364 if (
dynamic_cast<const SourceField*
>(&field) != NULL) {
1374 format text = textGenerator.
text(
1376 if (
dynamic_cast<const SourceField*
>(&field) != NULL) {
1377 text % socketName %
"source" % field.
parent()->
name();
1379 text % socketName %
"destination" % field.
parent()->
name();
1381 throw InvalidData(__FILE__, __LINE__, procName, text.str());
1395 format text = textGenerator.
text(
1397 text % rfName % socketName % field.
parent()->
name();
1398 throw InvalidData(__FILE__, __LINE__, procName, text.str());
1401 unsigned int registerIndex = terminal.
index();
1403 socketCodes, portCode, registerIndex);
1421 const string procName =
"CodeCompressorPlugin::encodeFUTerminal";
1424 const Port& port = terminal.
port();
1425 string socketName(
"");
1428 if (
dynamic_cast<const SourceField*
>(&field) != NULL) {
1438 format text = textGenerator.
text(
1440 if (
dynamic_cast<const SourceField*
>(&field) != NULL) {
1441 text % socketName %
"source" % field.
parent()->
name();
1443 text % socketName %
"destination" % field.
parent()->
name();
1445 throw InvalidData(__FILE__, __LINE__, procName, text.str());
1463 format text = textGenerator.
text(
1465 text % (fuTerm != NULL ? fuTerm->
hwOperation()->
name() :
"") % fuName;
1466 throw InvalidData(__FILE__, __LINE__, procName, text.str());
1471 format text = textGenerator.
text(
1473 text % fuName % opName;
1474 throw InvalidData(__FILE__, __LINE__, procName, text.str());
1481 format text = textGenerator.
text(
1483 text % port.
name() % fuName % socketName;
1484 throw InvalidData(__FILE__, __LINE__, procName, text.str());
1512 format text = textGenerator.
text(
1515 const string procName =
1516 "CodeCompressorPlugin::encodeImmediateTerminal";
1517 throw InvalidData(__FILE__, __LINE__, procName, text.str());
1522 static_cast<BitVector&
>(immediateBits).pushBack(
1526 assert(&referenced != &NullInstruction::instance());
1528 IndexBound simmBound(0, (immediateBits.size()-1));
1533 unsigned int oldSize = bitVector.size();
1535 static_cast<BitVector&
>(bitVector).pushBack(
1540 static_cast<BitVector&
>(bitVector).pushBack(
1543 assert(bitVector.size() - oldSize ==
static_cast<size_t>(field.
width()));
1562 unsigned int oldSize = bitVector.size();
1563 unsigned int numberOfZeros = field.
width() - componentIDBits.size() -
1567 bitVector.
pushBack(componentIDBits);
1568 bitVector.
pushBack(0, numberOfZeros);
1572 bitVector.
pushBack(0, numberOfZeros);
1573 bitVector.
pushBack(componentIDBits);
1575 assert(bitVector.size() - oldSize ==
static_cast<size_t>(field.
width()));
1591 unsigned int registerIndex) {
1594 unsigned int encodingWidth = portCode.
width() - portCode.
indexWidth();
1598 bits.
pushBack(registerIndex, socketCodes.
width() - encodingWidth);
1599 assert(bits.size() ==
static_cast<size_t>(socketCodes.
width()));
1610 typedef std::set<const TPEF::SectionElement*> SectionElemSet;
1611 SectionElemSet toRelocate;
1615 for (
unsigned int sectionIndex = 0;
1626 if (relocSection == NULL) {
1631 for (
unsigned int i = 0; i < relocSection->
elementCount(); i++) {
1639 toRelocate.insert(location);
1648 unsigned int instStart = 0;
1649 for (
unsigned int i = 0; i < codeSection->
elementCount(); i++) {
1652 if (instructionElem->
begin() && i > 0) {
1661 *codeSection, instStart, *immElem, *instruction);
1663 if (terminal != NULL) {
1665 }
else if (immediate != NULL) {
1689 unsigned int number,
1694 for (
int i = leftmostBit; i >= rightmostBit; i--) {
1714 unsigned int elementIndex,
1723 string busName =
"";
1724 for (
unsigned int i = elementIndex; i < codeSection.
elementCount();
1728 if (element->
begin() && i > elementIndex) {
1732 if (moveElem != NULL &&
1733 moveElem->
sourceType() == MoveElement::MF_IMM &&
1735 busName = TPEFTools::resourceName(
1743 for (
int i = 0; i < instruction.
moveCount(); i++) {
1745 if (move.
bus().
name() == busName) {
1772 string dstUnitName = TPEFTools::resourceName(
1780 if (dstUnit.
name() == dstUnitName) {
static NullUnconditionalGuardEncoding & instance()
virtual InstructionElement * element(Word index) const
InstructionAddressMap instructionAddresses_
Contains the addresses of instructions.
virtual bool isFUPort() const
virtual std::string slotOfDestination(const ImmediateUnit &dstUnit, int index) const
NOPEncoding & noOperationEncoding() const
Instruction & firstInstruction() const
virtual Socket * inputSocket() const
static BitVector socketCodeBits(const SocketCodeTable &socketCodes, const PortCode &portCode, unsigned int registerIndex)
void addIndexBoundsForReference(IndexBound bounds)
virtual TCEString name() const
TerminalSet terminalsToRelocate_
Set of (short) immediate terminals that refer to an instruction.
@ TXT_SOCKET_ENCODING_MISSING
virtual int index() const
IndexTable indexTable_
A table of indexes used when encoding long immediates.
bool isRISCVMachine() const
InstructionSet instructionsAtBeginningOfMAU_
Set of instructions that start at the beginning of MAU.
TPEFMap tpefPrograms_
Programs run in the machine.
TTAMachine::Machine * machine
the architecture definition of the estimated processor
static void encodeFUTerminal(const SlotField &field, const TTAProgram::Terminal &terminal, BitVector &bitVector)
std::string parameterValue(const std::string ¶mName) const
int registerIndex() const
bool allStartsAtBeginningOfMAU_
Tells whether all the instructions starts at the beginning of MAU.
FUGuardEncoding & fuGuardEncoding(int index) const
virtual const TTAMachine::RegisterFile & registerFile() const
InstructionBitVector * bemBits(const TTAProgram::Program &program)
int longImmDstRegisterFieldCount() const
virtual ~CodeCompressorPlugin()
Instruction & nextInstruction(const Instruction &) const
static void encodeIUTerminal(const SlotField &field, const TTAProgram::Terminal &terminal, BitVector &bitVector)
FUPortCode & fuPortCode(int index) const
void startSettingInstructionReference(const TTAProgram::Instruction &instruction)
bool isUnconditional() const
bool hasSocketEncoding(const std::string &socket) const
bool hasRFPortCode(const std::string ®File) const
ParameterTable parameters_
Parameters for the plugin.
Terminal & destination() const
std::string value
Value of the parameter.
bool hasImmediateControlField() const
@ TXT_RF_PORT_CODE_MISSING
const TTAMachine::Bus & bus() const
void initializeRelocations()
RFPortCode & rfPortCode(int index) const
TTAProgram::Program * currentPOM_
The current program in POM.
void setBEM(const BinaryEncoding &bem)
void encodeImmediateTerminal(const SourceField &field, const TTAProgram::Terminal &terminal, InstructionBitVector &bitVector) const
int firstMoveSlotIndex() const
virtual AddressSpace * addressSpace() const
Section * section(Word index) const
UnconditionalGuardEncoding & unconditionalGuardEncoding(bool inverted) const
Section * referencedSection() const
bool hasNoOperationEncoding() const
HalfWord sourceIndex() const
Word sectionCount() const
virtual boost::format text(int textId)
UIntWord uIntWordValue() const
static NullNOPEncoding & instance()
static NullOperation & instance()
void setPrograms(std::map< std::string, TPEF::Binary * > &programs)
static void addBitsForGuardField(const GuardField &guardField, const TTAProgram::Move &move, BitVector &bitVector)
SocketEncoding & socketEncoding(int index) const
static void addBits(unsigned int number, int leftmostBit, int rightmostBit, BitVector &bitVector)
virtual TCEString name() const
void addInstruction(const TTAProgram::Instruction &instruction, InstructionBitVector *bits)
@ TXT_GPR_GUARD_ENCODING_MISSING
int numberOfPrograms() const
virtual int numberOfRegisters() const
virtual Operation & operation() const
void pushBack(long long unsigned int integer, int size)
const TTAMachine::Machine & machine() const
static void addBitsForDestinationField(const DestinationField &dstField, const TTAProgram::Move &move, BitVector &bitVector)
SectionElement * element(Word index) const
#define assert(condition)
std::vector< Parameter > ParameterTable
Table for passing plugin parameters.
Instruction & instructionAt(InstructionAddress address) const
int addressSpaceOffset_
The offset of the instruction memory (the address of the first instruction).
GPRGuardEncoding & gprGuardEncoding(int index) const
virtual void setWidth(int width)
virtual int width() const
virtual bool isImmediateRegister() const
void addBitsForICField(const ImmediateControlField &icField, const TTAProgram::Instruction &instruction, BitVector &bitVector) const
void setInstructionToStartAtBeginningOfMAU(const TTAProgram::Instruction &instruction)
@ TXT_IU_PORT_CODE_MISSING
virtual ControlUnit * controlUnit() const
virtual int numberOfSlots(const ImmediateUnit &dstUnit) const
const std::string & name() const
TTAProgram::Immediate * programImmediate(const TPEF::ImmediateElement &immElem, const TTAProgram::Instruction &instruction) const
GuardField & guardField() const
virtual int instructionCount() const
@ TXT_BEM_DEFINES_SLOT_FOR_NONEXISTING_BUS
@ TXT_FU_PORT_CODE_MISSING
static NullGPRGuardEncoding & instance()
ImmediateEncoding & immediateEncoding() const
InstructionBitVector * bemInstructionBits(const TTAProgram::Instruction &)
MoveSlot * parent() const
bool hasItem(const std::string &name) const
IUPortCode & iuPortCode(int index) const
int moveSlotCount() const
virtual int width(const TCEString &templateName) const
MoveGuard & guard() const
InstructionBitVector * programBits_
The bits of the program.
SectionElement * destination() const
std::string immediateUnit(const std::string &instructionTemplate) const
void startNewProgram(const std::string &programName)
void setParameters(ParameterTable parameters)
virtual int width() const
void encodeLongImmediate(const std::string &slotName, int slotWidth, const TTAProgram::Instruction &instruction, BitVector &bitVector)
virtual bool isGPR() const
bool hasSocketCodes() const
virtual SimValue value() const
bool hasFUPortCode(const std::string &fu, const std::string &port) const
virtual const TTAMachine::ImmediateUnit & immediateUnit() const
virtual int width() const
virtual int supportedWidth() const
int moveSlotWidth(int index) const
unsigned int encoding() const
bool hasUnconditionalGuardEncoding(bool inverted) const
bool hasParameter(const std::string ¶mName) const
BinaryEncoding::Position componentIDPosition() const
virtual int width() const
bool hasIUPortCode(const std::string &immediateUnit) const
unsigned int encoding() const
TTAProgram::Program & currentProgram() const
std::string instructionTemplate(const TTAProgram::Instruction &instruction) const
int mau_
The size of the minimum addressable unit.
virtual int width() const
SourceField & sourceField() const
TPEFMap::const_iterator programElement(int index) const
TPEF::Binary * currentTPEF_
The current TPEF.
const BinaryEncoding * bem_
The binary encoding map.
void addBitsForMoveSlot(const MoveSlot &slot, const TTAProgram::Instruction &instruction, InstructionBitVector &bitVector)
void fixInstructionAddress(const TTAProgram::Instruction &instruction, unsigned int address)
Immediate & immediate(int i) const
@ TXT_EMPTY_ITEMP_MISSING
std::string errorMessage() const
virtual bool isOpcodeSetting() const
void addBitsForImmediateSlot(const ImmediateSlotField &immSlot, const TTAProgram::Instruction &instruction, BitVector &bitVector)
unsigned int nextAddressablePositionFrom(unsigned int position) const
unsigned int memoryAddress(const TTAProgram::Instruction &instruction) const
ImmediateSet immediatesToRelocate_
Set of (long) immediates that refer to an instruction.
const TTAMachine::InstructionTemplate & instructionTemplate() const
@ TXT_IMMEDIATE_ENCODING_MISSING
virtual const TTAMachine::FunctionUnit & functionUnit() const
virtual int width() const
RelocMap relocMap_
Contains information to which instructions the immediates are referring to.
static NullFUGuardEncoding & instance()
int socketIDWidth() const
void addBitsForSourceField(const SourceField &srcField, const TTAProgram::Move &move, InstructionBitVector &bitVector) const
virtual bool isInverted() const
static void encodeNOP(const MoveSlot &slot, BitVector &bitVector)
find Finds info of the inner loops in the false
const TTAMachine::Machine * machine_
The machine.
virtual InstructionField & childField(int position) const
virtual std::string name() const
@ TXT_FU_OC_PORT_CODE_MISSING
void encodeMove(const MoveSlot &slot, const TTAProgram::Instruction &instruction, InstructionBitVector &bitVector) const
int immediateCount() const
virtual const TTAMachine::HWOperation * hwOperation() const
virtual BusNavigator busNavigator() const
virtual bool isEmpty() const
void setMachine(const TTAMachine::Machine &machine)
void markInstructionStartingPoint(unsigned int position)
virtual Socket * outputSocket() const
@ TXT_NOP_ENCODING_MISSING
ImmediateControlField & immediateControlField() const
void setAllInstructionsToStartAtBeginningOfMAU()
virtual Instruction & instructionAtIndex(int index) const
MoveSlot & moveSlot(int index) const
Terminal & source() const
virtual InstructionField & childField(int position) const
virtual const TTAMachine::Port & port() const
ComponentType * item(int index) const
DestinationField & destinationField() const
find Finds info of the inner loops in the program
static void encodeSlotField(const SlotField &field, const BitVector &componentIDBits, const BitVector &socketCodeBits, BitVector &BitVector)
FieldType sourceType() const
const TTAMachine::Guard & guard() const
bool startsAtBeginningOfMAU(const TTAProgram::Instruction &instruction) const
SectionElement * location() const
const BinaryEncoding & binaryEncoding() const
int moveSlotCount() const
virtual bool isImmediate() const
SocketCodeTable & socketCodes() const
std::string name
Name of the parameter.
MoveSlot * parent() const
virtual InstructionTemplateNavigator instructionTemplateNavigator() const
unsigned int encoding() const
void pushBack(const InstructionBitVector &bits)
LImmDstRegisterField & longImmDstRegisterField(int index) const
const RegisterFile * registerFile() const
virtual ULongWord start() const
static void encodeRFTerminal(const SlotField &field, const TTAProgram::Terminal &terminal, BitVector &bitVector)
TTAProgram::Terminal * immediateTerminal(const TPEF::CodeSection &codeSection, unsigned int elementIndex, const TPEF::ImmediateElement &immElem, const TTAProgram::Instruction &instruction) const
virtual int childFieldCount() const
@ TXT_TEMPLATE_ENCODING_MISSING
std::string indentation(int level)
InstructionBitVector * programBits() const
virtual bool usesSlot(const std::string &slotName) const
virtual int width() const
void setImemWidth(int mau, int widthInMaus=1)
Word elementCount() const
void addBitsForDstRegisterField(const LImmDstRegisterField &field, const TTAProgram::Instruction &instruction, BitVector &bitVector)
virtual ImmediateUnit * destinationOfSlot(const std::string &slotName) const
Unit * parentUnit() const
@ TXT_FU_GUARD_ENCODING_MISSING
@ TXT_ALWAYS_TRUE_GUARD_ENCODING_MISSING