decompiler  1.0.0
Public Member Functions | Private Member Functions | Private Attributes | List of all members
TypeOpBinary Class Reference

A generic binary operator: two inputs and one output. More...

#include <typeop.hh>

Inheritance diagram for TypeOpBinary:
TypeOp TypeOpBoolAnd TypeOpBoolOr TypeOpBoolXor TypeOpEqual TypeOpFloatAdd TypeOpFloatDiv TypeOpFloatEqual TypeOpFloatLess TypeOpFloatLessEqual TypeOpFloatMult TypeOpFloatNotEqual TypeOpFloatSub TypeOpIntAdd TypeOpIntAnd TypeOpIntDiv TypeOpIntLeft TypeOpIntLess TypeOpIntLessEqual TypeOpIntMult TypeOpIntOr TypeOpIntRem TypeOpIntRight TypeOpIntSdiv TypeOpIntSless TypeOpIntSlessEqual TypeOpIntSrem TypeOpIntSright TypeOpIntSub TypeOpIntXor TypeOpNotEqual

Public Member Functions

 TypeOpBinary (TypeFactory *t, OpCode opc, const string &n, type_metatype mout, type_metatype min)
 Constructor.
 
virtual DatatypegetOutputLocal (const PcodeOp *op) const
 Find the minimal (or suggested) data-type of an output to this op-code. More...
 
virtual DatatypegetInputLocal (const PcodeOp *op, int4 slot) const
 Find the minimal (or suggested) data-type of an input to this op-code. More...
 
virtual void printRaw (ostream &s, const PcodeOp *op)
 Print (for debugging purposes) this specific PcodeOp to the stream. More...
 
- Public Member Functions inherited from TypeOp
 TypeOp (TypeFactory *t, OpCode opc, const string &n)
 Constructor. More...
 
virtual ~TypeOp (void)
 Destructor.
 
const string & getName (void) const
 Get the display name of the op-code.
 
OpCode getOpcode (void) const
 Get the op-code value.
 
uint4 getFlags (void) const
 Get the properties associated with the op-code.
 
OpBehaviorgetBehavior (void) const
 Get the behavior associated with the op-code.
 
bool markExplicitUnsigned (PcodeOp *op, int4 slot) const
 Check if a constant input should be explicitly labeled as unsigned. More...
 
uintb evaluateUnary (int4 sizeout, int4 sizein, uintb in1) const
 Emulate the unary op-code on an input value. More...
 
uintb evaluateBinary (int4 sizeout, int4 sizein, uintb in1, uintb in2) const
 Emulate the binary op-code on an input value. More...
 
uintb recoverInputBinary (int4 slot, int4 sizeout, uintb out, int4 sizein, uintb in) const
 Reverse the binary op-code operation, recovering a constant input value. More...
 
uintb recoverInputUnary (int4 sizeout, uintb out, int4 sizein) const
 Reverse the unary op-code operation, recovering a constant input value. More...
 
bool isCommutative (void) const
 Return true if this op-code is commutative. More...
 
bool inheritsSign (void) const
 Return true if the op-code inherits it signedness from its inputs.
 
virtual DatatypegetOutputToken (const PcodeOp *op, CastStrategy *castStrategy) const
 Find the data-type of the output that would be assigned by a compiler. More...
 
virtual DatatypegetInputCast (const PcodeOp *op, int4 slot, const CastStrategy *castStrategy) const
 Find the data-type of the input to a specific PcodeOp. More...
 
virtual void push (PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const =0
 Push the specific PcodeOp to the emitter's RPN stack. More...
 
virtual string getOperatorName (const PcodeOp *op) const
 Get the name of the op-code as it should be displayed in context. More...
 

Private Member Functions

virtual void setMetatypeIn (type_metatype val)
 Set the data-type associated with inputs to this opcode.
 
virtual void setMetatypeOut (type_metatype val)
 Set the data-type associated with outputs of this opcode.
 

Private Attributes

type_metatype metaout
 The metatype of the output.
 
type_metatype metain
 The metatype of the inputs.
 

Additional Inherited Members

- Public Types inherited from TypeOp
enum  { inherits_sign = 1, inherits_sign_zero = 2 }
 
- Static Public Member Functions inherited from TypeOp
static void registerInstructions (vector< TypeOp * > &inst, TypeFactory *tlst, const Translate *trans)
 Build a map from op-code value to the TypeOp information objects. More...
 
static void selectJavaOperators (vector< TypeOp * > &inst, bool val)
 Toggle Java specific aspects of the op-code information. More...
 
- Protected Member Functions inherited from TypeOp
virtual void setSymbol (const string &nm)
 Set the display symbol associated with the op-code.
 
- Protected Attributes inherited from TypeOp
TypeFactorytlst
 Pointer to data-type factory.
 
OpCode opcode
 The op-code value.
 
uint4 opflags
 Cached pcode-op properties for this op-code.
 
uint4 addlflags
 Additional properties.
 
string name
 Symbol denoting this operation.
 
OpBehaviorbehave
 Object for emulating the behavior of the op-code.
 

Detailed Description

A generic binary operator: two inputs and one output.

All binary op-codes have a single data-type for input values and a data-type for the output value

Member Function Documentation

Datatype * TypeOpBinary::getInputLocal ( const PcodeOp op,
int4  slot 
) const
virtual

Find the minimal (or suggested) data-type of an input to this op-code.

The result should depend only on the op-code itself (and the size of the input)

Parameters
opis the PcodeOp being considered
slotis the input being considered
Returns
the data-type

Reimplemented from TypeOp.

Reimplemented in TypeOpIntSright, TypeOpIntRight, and TypeOpIntLeft.

References TypeFactory::getBase(), PcodeOp::getIn(), Varnode::getSize(), and TypeOp::tlst.

Referenced by TypeOpIntLeft::getInputLocal(), TypeOpIntRight::getInputLocal(), and TypeOpIntSright::getInputLocal().

Datatype * TypeOpBinary::getOutputLocal ( const PcodeOp op) const
virtual

Find the minimal (or suggested) data-type of an output to this op-code.

The result should depend only on the op-code itself (and the size of the output)

Parameters
opis the PcodeOp being considered
Returns
the data-type

Reimplemented from TypeOp.

References TypeFactory::getBase(), PcodeOp::getOut(), Varnode::getSize(), and TypeOp::tlst.

void TypeOpBinary::printRaw ( ostream &  s,
const PcodeOp op 
)
virtual

Print (for debugging purposes) this specific PcodeOp to the stream.

Parameters
sis the output stream
opis the specific PcodeOp to print

Implements TypeOp.

Reimplemented in TypeOpIntSright.

References PcodeOp::getIn(), TypeOp::getOperatorName(), PcodeOp::getOut(), and Varnode::printRaw().


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