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

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

#include <typeop.hh>

Inheritance diagram for ghidra::TypeOpBinary:
ghidra::TypeOp ghidra::TypeOpBoolAnd ghidra::TypeOpBoolOr ghidra::TypeOpBoolXor ghidra::TypeOpEqual ghidra::TypeOpFloatAdd ghidra::TypeOpFloatDiv ghidra::TypeOpFloatEqual ghidra::TypeOpFloatLess ghidra::TypeOpFloatLessEqual ghidra::TypeOpFloatMult ghidra::TypeOpFloatNotEqual ghidra::TypeOpFloatSub ghidra::TypeOpIntAdd ghidra::TypeOpIntAnd ghidra::TypeOpIntDiv ghidra::TypeOpIntLeft ghidra::TypeOpIntLess ghidra::TypeOpIntLessEqual ghidra::TypeOpIntMult ghidra::TypeOpIntOr ghidra::TypeOpIntRem ghidra::TypeOpIntRight ghidra::TypeOpIntSdiv ghidra::TypeOpIntSless ghidra::TypeOpIntSlessEqual ghidra::TypeOpIntSrem ghidra::TypeOpIntSright ghidra::TypeOpIntSub ghidra::TypeOpIntXor ghidra::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 ghidra::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.
 
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 its signedness from its inputs.
 
bool inheritsSignFirstParamOnly (void) const
 Return true if the op-code inherits its signedness from only its first input.
 
bool isShiftOp (void) const
 Return true if the op-code is a shift (INT_LEFT, INT_RIGHT, or INT_SRIGHT)
 
bool isArithmeticOp (void) const
 Return true if the opcode is INT_ADD, INT_MULT, INT_DIV, INT_REM, or other arithmetic op.
 
bool isLogicalOp (void) const
 Return true if the opcode is INT_AND, INT_OR, INT_XOR, or other logical op.
 
bool isFloatingPointOp (void) const
 Return true if the opcode is FLOAT_ADD, FLOAT_MULT, or other floating-point operation.
 
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 DatatypepropagateType (Datatype *alttype, PcodeOp *op, Varnode *invn, Varnode *outvn, int4 inslot, int4 outslot)
 Propagate an incoming data-type across 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 ghidra::TypeOp
enum  {
  inherits_sign = 1, inherits_sign_zero = 2, shift_op = 4, arithmetic_op = 8,
  logical_op = 0x10, floatingpoint_op = 0x20
}
 
- Static Public Member Functions inherited from ghidra::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 ghidra::TypeOp
virtual void setSymbol (const string &nm)
 Set the display symbol associated with the op-code.
 
- Protected Attributes inherited from ghidra::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

◆ getInputLocal()

Datatype * ghidra::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 ghidra::TypeOp.

Reimplemented in ghidra::TypeOpIntSright, ghidra::TypeOpIntRight, and ghidra::TypeOpIntLeft.

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

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

◆ getOutputLocal()

Datatype * ghidra::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 ghidra::TypeOp.

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

◆ printRaw()

void ghidra::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 ghidra::TypeOp.

Reimplemented in ghidra::TypeOpIntSright.

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


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