OpenASIP 2.2
Loading...
Searching...
No Matches
Public Member Functions | Static Public Attributes | Private Attributes | List of all members
ImmediateEncoding Class Reference

#include <ImmediateEncoding.hh>

Inheritance diagram for ImmediateEncoding:
Inheritance graph
Collaboration diagram for ImmediateEncoding:
Collaboration graph

Public Member Functions

 ImmediateEncoding (unsigned int encoding, unsigned int extraBits, int immediateWidth, SourceField &parent)
 
 ImmediateEncoding (const ObjectState *state, SourceField &parent)
 
virtual ~ImmediateEncoding ()
 
SourceFieldparent () const
 
int immediateWidth () const
 
int encodingWidth () const
 
int encodingPosition () const
 
int immediatePosition () const
 
virtual int bitPosition () const
 
virtual int width () const
 
virtual ObjectStatesaveState () const
 
- Public Member Functions inherited from Encoding
virtual ~Encoding ()
 
InstructionFieldparent () const
 
unsigned int encoding () const
 
unsigned int extraBits () const
 

Static Public Attributes

static const std::string OSNAME_IMM_ENCODING = "imm_encoding"
 ObjectState name for immediate encoding.
 
static const std::string OSKEY_IMM_WIDTH = "imm_width"
 ObjectState attribute key for the immediate width.
 
- Static Public Attributes inherited from Encoding
static const std::string OSNAME_ENCODING = "encoding"
 ObjectState name for Encoding class.
 
static const std::string OSKEY_ENCODING = "encoding"
 ObjectState attribute key for the encoding.
 
static const std::string OSKEY_EXTRA_BITS = "extra_bits"
 ObjectState attribute key for the number of extra bits.
 

Private Attributes

int immediateWidth_
 

Additional Inherited Members

- Protected Member Functions inherited from Encoding
 Encoding (unsigned int encoding, unsigned int extraBits, InstructionField *parent)
 
 Encoding (const ObjectState *state, InstructionField *parent)
 
void setParent (InstructionField *parent)
 
void setEncoding (unsigned int encoding, unsigned int extraBits)
 

Detailed Description

Represents the encoding for inline immediate within the source field.

Definition at line 44 of file ImmediateEncoding.hh.

Constructor & Destructor Documentation

◆ ImmediateEncoding() [1/2]

ImmediateEncoding::ImmediateEncoding ( unsigned int  encoding,
unsigned int  extraBits,
int  immediateWidth,
SourceField parent 
)

The constructor.

Registers the encoding automatically to the parent source field.

Parameters
encodingThe encoding for inline immediates.
extraBitsThe number of extra bits in the encoding.
immediateWidthWidth of the inline immediate.
parentThe parent source field.
Exceptions
ObjectAlreadyExistsIf the given source field has an immediate encoding already or if the encoding is ambiguous with some socket or bridge encoding in the source field.
OutOfRangeIf the given immediate width is negative.

Definition at line 60 of file ImmediateEncoding.cc.

64 if (immediateWidth < 0) {
65 throw OutOfRange(__FILE__, __LINE__, __func__);
66 }
67
70}
#define __func__
unsigned int extraBits() const
Definition Encoding.cc:119
void setParent(InstructionField *parent)
Definition Encoding.cc:155
unsigned int encoding() const
Definition Encoding.cc:108
SourceField * parent() const
void setImmediateEncoding(ImmediateEncoding &encoding)

References __func__, immediateWidth(), parent(), SourceField::setImmediateEncoding(), and Encoding::setParent().

Here is the call graph for this function:

◆ ImmediateEncoding() [2/2]

ImmediateEncoding::ImmediateEncoding ( const ObjectState state,
SourceField parent 
)

The constructor.

Loads the state of the object from the given ObjectState instance.

Parameters
stateThe ObjectState instance.
parentThe parent source field.
Exceptions
ObjectAlreadyExistsIf the given source field has an immediate encoding already or if the encoding is ambiguous with some socket or bridge encoding in the source field.
ObjectStateLoadingExceptionIf the given ObjectState instance is erroneous.

Definition at line 86 of file ImmediateEncoding.cc.

88 : Encoding(state, NULL) {
89 const string procName = "ImmediateEncoding::ImmediateEncoding";
90
91 if (state->name() != OSNAME_IMM_ENCODING) {
92 throw ObjectStateLoadingException(__FILE__, __LINE__, procName);
93 }
94
95 try {
97 if (immediateWidth_ < 0) {
98 throw OutOfRange(__FILE__, __LINE__, __func__);
99 }
100 } catch (const Exception& e) {
102 __FILE__, __LINE__, __func__, e.errorMessage());
103 }
104
107}
std::string errorMessage() const
Definition Exception.cc:123
static const std::string OSNAME_IMM_ENCODING
ObjectState name for immediate encoding.
static const std::string OSKEY_IMM_WIDTH
ObjectState attribute key for the immediate width.
int intAttribute(const std::string &name) const
std::string name() const

References __func__, Exception::errorMessage(), immediateWidth_, ObjectState::intAttribute(), ObjectState::name(), OSKEY_IMM_WIDTH, OSNAME_IMM_ENCODING, parent(), SourceField::setImmediateEncoding(), and Encoding::setParent().

Here is the call graph for this function:

◆ ~ImmediateEncoding()

ImmediateEncoding::~ImmediateEncoding ( )
virtual

The destructor.

Definition at line 112 of file ImmediateEncoding.cc.

112 {
113 SourceField* oldParent = parent();
114 assert(oldParent != NULL);
115 setParent(NULL);
116 oldParent->unsetImmediateEncoding();
117}
#define assert(condition)
void unsetImmediateEncoding()

References assert, parent(), Encoding::setParent(), and SourceField::unsetImmediateEncoding().

Here is the call graph for this function:

Member Function Documentation

◆ bitPosition()

int ImmediateEncoding::bitPosition ( ) const
virtual

Returns always 0.

Returns
The position of the encoding.

Implements Encoding.

Definition at line 196 of file ImmediateEncoding.cc.

196 {
197 return 0;
198}

◆ encodingPosition()

int ImmediateEncoding::encodingPosition ( ) const

Returns the position of the immediate encoding.

Returns
The position of the immediate encoding.

Definition at line 166 of file ImmediateEncoding.cc.

166 {
167 if (parent()->componentIDPosition() == BinaryEncoding::LEFT) {
168 return parent()->width() - parent()->extraBits() - encodingWidth();
169 } else {
170 return 0;
171 }
172}
virtual int width() const

References encodingWidth(), InstructionField::extraBits(), BinaryEncoding::LEFT, parent(), and SourceField::width().

Referenced by BEMTester::conflictsWithSourceEncodings(), and DefaultDecoderGenerator::writeBusControlRulesOfSImmSocketOfBus().

Here is the call graph for this function:

◆ encodingWidth()

int ImmediateEncoding::encodingWidth ( ) const

Returns the encoding width.

Returns
The encoding width.

Definition at line 155 of file ImmediateEncoding.cc.

155 {
156 return Encoding::width();
157}
virtual int width() const
Definition Encoding.cc:130

References Encoding::width().

Referenced by BEMTester::conflictsWithSourceEncodings(), CodeCompressorPlugin::encodeImmediateTerminal(), encodingPosition(), printSourceFieldEncodings(), width(), and DefaultDecoderGenerator::writeBusControlRulesOfSImmSocketOfBus().

Here is the call graph for this function:

◆ immediatePosition()

int ImmediateEncoding::immediatePosition ( ) const

Returns the position of the short immediate within the source field.

Returns
The position of the short immediate.

Definition at line 181 of file ImmediateEncoding.cc.

181 {
182 if (parent()->componentIDPosition() == BinaryEncoding::LEFT) {
183 return 0;
184 } else {
185 return parent()->width() - parent()->extraBits() - immediateWidth();
186 }
187}

References InstructionField::extraBits(), immediateWidth(), BinaryEncoding::LEFT, parent(), and SourceField::width().

Referenced by DefaultDecoderGenerator::writeBusControlRulesOfSImmSocketOfBus(), and DefaultDecoderGenerator::writeSimmDataSignal().

Here is the call graph for this function:

◆ immediateWidth()

int ImmediateEncoding::immediateWidth ( ) const

◆ parent()

SourceField * ImmediateEncoding::parent ( ) const

Returns the parent source field.

Returns
The parent.

Definition at line 126 of file ImmediateEncoding.cc.

126 {
128 if (parent != NULL) {
129 SourceField* sField = dynamic_cast<SourceField*>(parent);
130 assert(sField != NULL);
131 return sField;
132 } else {
133 return NULL;
134 }
135}
InstructionField * parent() const
Definition Encoding.cc:97

References assert, Encoding::parent(), and parent().

Referenced by encodingPosition(), ImmediateEncoding(), ImmediateEncoding(), immediatePosition(), parent(), SourceField::setImmediateEncoding(), and ~ImmediateEncoding().

Here is the call graph for this function:

◆ saveState()

ObjectState * ImmediateEncoding::saveState ( ) const
virtual

Saves the state of the object to an ObjectState instance.

Returns
The newly created ObjectState instance.

Reimplemented from Encoding.

Definition at line 218 of file ImmediateEncoding.cc.

218 {
222 return state;
223}
virtual ObjectState * saveState() const
Definition Encoding.cc:141
void setName(const std::string &name)
void setAttribute(const std::string &name, const std::string &value)

References immediateWidth(), OSKEY_IMM_WIDTH, OSNAME_IMM_ENCODING, Encoding::saveState(), ObjectState::setAttribute(), and ObjectState::setName().

Here is the call graph for this function:

◆ width()

int ImmediateEncoding::width ( ) const
virtual

Returns the width of the encoding + immediate width.

Returns
The width.

Reimplemented from Encoding.

Definition at line 207 of file ImmediateEncoding.cc.

207 {
208 return immediateWidth() + encodingWidth();
209}

References encodingWidth(), and immediateWidth().

Referenced by BEMTester::canAddComponentEncoding(), printSourceFieldEncodings(), and SourceField::width().

Here is the call graph for this function:

Member Data Documentation

◆ immediateWidth_

int ImmediateEncoding::immediateWidth_
private

Definition at line 68 of file ImmediateEncoding.hh.

Referenced by ImmediateEncoding(), and immediateWidth().

◆ OSKEY_IMM_WIDTH

const std::string ImmediateEncoding::OSKEY_IMM_WIDTH = "imm_width"
static

ObjectState attribute key for the immediate width.

Definition at line 65 of file ImmediateEncoding.hh.

Referenced by ImmediateEncoding(), saveState(), BEMSerializer::sourceFieldToFile(), and BEMSerializer::sourceFieldToOM().

◆ OSNAME_IMM_ENCODING

const std::string ImmediateEncoding::OSNAME_IMM_ENCODING = "imm_encoding"
static

The documentation for this class was generated from the following files: