19 #ifndef __CPUI_TYPEOP__ 20 #define __CPUI_TYPEOP__ 52 virtual void setSymbol(
const string &nm) { name = nm; }
162 :
TypeOp(t,opc,n) { metaout = mout; metain = min; }
179 :
TypeOp(t,opc,n) { metaout = mout; metain = min; }
196 :
TypeOp(t,opc,n) { metaout = mout; metain = min; }
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:352
Information about the PTRSUB op-code.
Definition: typeop.hh:730
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:386
Information about the RETURN op-code.
Definition: typeop.hh:292
Information about the INT_ADD op-code.
Definition: typeop.hh:367
Associate data-type and behavior information with a specific p-code op-code.
Definition: typeop.hh:37
virtual void opIntLeft(const PcodeOp *op)=0
Emit a INT_LEFT operator.
virtual void opIntDiv(const PcodeOp *op)=0
Emit a INT_DIV operator.
Information about the FLOAT_NAN op-code.
Definition: typeop.hh:573
virtual void opInt2Comp(const PcodeOp *op)=0
Emit a INT_2COMP operator.
Information about the LOAD op-code.
Definition: typeop.hh:215
Information about the INT_OR op-code.
Definition: typeop.hh:439
Information about the FLOAT_FLOAT2FLOAT op-code.
Definition: typeop.hh:636
The base datatype class for the decompiler.
Definition: type.hh:62
A generic functional operator.
Definition: typeop.hh:189
Information about the INT_2COMP op-code.
Definition: typeop.hh:407
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:693
Information about the BOOL_NEGATE op-code.
Definition: typeop.hh:517
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:674
virtual void opBoolXor(const PcodeOp *op)=0
Emit a BOOL_XOR operator.
virtual void opIntAdd(const PcodeOp *op)=0
Emit a INT_ADD operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:370
uint4 opflags
Cached pcode-op properties for this op-code.
Definition: typeop.hh:46
OpCode
The op-code defining a specific p-code operation (PcodeOp)
Definition: opcodes.hh:35
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:426
Classes for printing tokens in a high-level language.
virtual void opIntRem(const PcodeOp *op)=0
Emit a INT_REM operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:496
uint4 addlflags
Additional properties.
Definition: typeop.hh:47
Information about the COPY op-code.
Definition: typeop.hh:205
virtual void opFloatDiv(const PcodeOp *op)=0
Emit a FLOAT_DIV operator.
OpBehavior * getBehavior(void) const
Get the behavior associated with the op-code.
Definition: typeop.hh:59
virtual void opBoolOr(const PcodeOp *op)=0
Emit a BOOL_OR operator.
Information about the BRANCH op-code.
Definition: typeop.hh:236
Information about the INT_AND op-code.
Definition: typeop.hh:431
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:320
virtual void opFloatCeil(const PcodeOp *op)=0
Emit a FLOAT_CEIL operator.
virtual void opIntXor(const PcodeOp *op)=0
Emit a INT_XOR operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:488
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:328
virtual void opIntRight(const PcodeOp *op)=0
Emit a INT_RIGHT operator.
virtual void opCallother(const PcodeOp *op)=0
Emit a CALLOTHER operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:512
Information about the STORE op-code.
Definition: typeop.hh:226
virtual void opCall(const PcodeOp *op)=0
Emit a CALL operator.
virtual void opFloatNeg(const PcodeOp *op)=0
Emit a FLOAT_NEG operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:548
Information about the INT_ZEXT op-code.
Definition: typeop.hh:349
virtual void opCopy(const PcodeOp *op)=0
Emit a COPY operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:555
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:768
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:256
virtual void setMetatypeOut(type_metatype val)
Set the data-type associated with outputs of this opcode.
Definition: typeop.hh:51
Information about the PIECE op-code.
Definition: typeop.hh:688
Information about the INT_REM op-code.
Definition: typeop.hh:501
virtual void opFloatMult(const PcodeOp *op)=0
Emit a FLOAT_MULT operator.
string name
Symbol denoting this operation.
Definition: typeop.hh:48
virtual void opFloatLessEqual(const PcodeOp *op)=0
Emit a FLOAT_LESSEQUAL operator.
OpCode opcode
The op-code value.
Definition: typeop.hh:45
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:312
virtual void opNewOp(const PcodeOp *op)=0
Emit a NEW operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:597
Information about the CBRANCH op-code.
Definition: typeop.hh:244
virtual void opFloatNan(const PcodeOp *op)=0
Emit a FLOAT_NAN operator.
virtual void opStore(const PcodeOp *op)=0
Emit a STORE operator.
Definitions for high-level variables.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:469
Information about the BRANCHIND op-code.
Definition: typeop.hh:253
Information about the INT_NEGATE op-code.
Definition: typeop.hh:415
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:274
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:725
virtual void opFloatAbs(const PcodeOp *op)=0
Emit a FLOAT_ABS operator.
virtual Datatype * getInputCast(const PcodeOp *op, int4 slot, const CastStrategy *castStrategy) const
Find the data-type of the input to a specific PcodeOp.
Definition: typeop.hh:776
Information about the BOOL_AND op-code.
Definition: typeop.hh:531
virtual void opFloatTrunc(const PcodeOp *op)=0
Emit a FLOAT_TRUNC operator.
virtual void opFloatFloor(const PcodeOp *op)=0
Emit a FLOAT_FLOOR operator.
type_metatype
Definition: type.hh:33
virtual void opIntLess(const PcodeOp *op)=0
Emit a INT_LESS operator.
Information about the INT_MULT op-code.
Definition: typeop.hh:477
virtual string getOperatorName(const PcodeOp *op) const
Get the name of the op-code as it should be displayed in context.
Definition: typeop.hh:139
virtual void opIntMult(const PcodeOp *op)=0
Emit a INT_MULT operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:442
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:304
Information about the INT_RIGHT op-code.
Definition: typeop.hh:456
Information about the INT_SUB op-code.
Definition: typeop.hh:375
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:777
virtual Datatype * getOutputToken(const PcodeOp *op, CastStrategy *castStrategy) const
Find the data-type of the output that would be assigned by a compiler.
Definition: typeop.cc:199
virtual void opSubpiece(const PcodeOp *op)=0
Emit a SUBPIECE operator.
virtual void opIntSless(const PcodeOp *op)=0
Emit a INT_SLESS operator.
virtual void opIntCarry(const PcodeOp *op)=0
Emit a INT_CARRY operator.
TypeOpFunc(TypeFactory *t, OpCode opc, const string &n, type_metatype mout, type_metatype min)
Constructor.
Definition: typeop.hh:195
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:786
Information about the FLOAT_FLOOR op-code.
Definition: typeop.hh:657
virtual void opIntNegate(const PcodeOp *op)=0
Emit a INT_NEGATE operator.
Information about the BOOL_XOR op-code.
Definition: typeop.hh:524
Information about the FLOAT_ADD op-code.
Definition: typeop.hh:580
Class encapsulating the action/behavior of specific pcode opcodes.
Definition: opbehavior.hh:42
virtual void opIntAnd(const PcodeOp *op)=0
Emit a INT_AND operator.
virtual void opFloatSub(const PcodeOp *op)=0
Emit a FLOAT_SUB operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:541
Information about the FLOAT_ROUND op-code.
Definition: typeop.hh:664
TypeOpUnary(TypeFactory *t, OpCode opc, const string &n, type_metatype mout, type_metatype min)
Constructor.
Definition: typeop.hh:178
Information about the POPCOUNT op-code.
Definition: typeop.hh:798
virtual void opBoolNegate(const PcodeOp *op)=0
Emit a BOOL_NEGATE operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:632
Information about the FLOAT_TRUNC op-code.
Definition: typeop.hh:643
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:378
Information about the BOOL_OR op-code.
Definition: typeop.hh:538
Information about the FLOAT_NOTEQUAL op-code.
Definition: typeop.hh:552
virtual void opIntSext(const PcodeOp *op, const PcodeOp *readOp)=0
Emit a INT_SEXT operator.
Information about the INT_SLESS op-code.
Definition: typeop.hh:317
Information about the MULTIEQUAL op-code.
Definition: typeop.hh:671
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:756
A strategy for applying type casts.
Definition: cast.hh:40
virtual void opReturn(const PcodeOp *op)=0
Emit a RETURN operator.
Information about the INT_SBORROW op-code.
Definition: typeop.hh:399
virtual void opCast(const PcodeOp *op)=0
Emit a CAST operator.
Information about the INT_SEXT op-code.
Definition: typeop.hh:358
virtual void opIntEqual(const PcodeOp *op)=0
Emit a INT_EQUAL operator.
virtual void opFloatFloat2Float(const PcodeOp *op)=0
Emit a FLOAT_FLOAT2FLOAT operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:527
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:344
Lowest level operation of the p-code language.
Definition: op.hh:58
virtual void opIntZext(const PcodeOp *op, const PcodeOp *readOp)=0
Emit a INT_ZEXT operator.
const string & getName(void) const
Get the display name of the op-code.
Definition: typeop.hh:56
OpBehavior * behave
Object for emulating the behavior of the op-code.
Definition: typeop.hh:49
virtual uintb evaluateBinary(int4 sizeout, int4 sizein, uintb in1, uintb in2) const
Emulate the binary op-code on input values.
Definition: opbehavior.cc:123
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const =0
Push the specific PcodeOp to the emitter's RPN stack.
Information about the CALLOTHER op-code (user defined p-code operations)
Definition: typeop.hh:281
virtual void opIntSdiv(const PcodeOp *op)=0
Emit a INT_SDIV operator.
virtual void opLoad(const PcodeOp *op)=0
Emit a LOAD operator.
Information about the INT_SLESSEQUAL op-code.
Definition: typeop.hh:325
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:576
virtual Datatype * getInputCast(const PcodeOp *op, int4 slot, const CastStrategy *castStrategy) const
Find the data-type of the input to a specific PcodeOp.
Definition: typeop.hh:765
virtual void opFloatNotEqual(const PcodeOp *op)=0
Emit a FLOAT_NOTEQUAL operator.
static void selectJavaOperators(vector< TypeOp *> &inst, bool val)
Toggle Java specific aspects of the op-code information.
Definition: typeop.cc:112
virtual void opFloatSqrt(const PcodeOp *op)=0
Emit a FLOAT_SQRT operator.
virtual void opBoolAnd(const PcodeOp *op)=0
Emit a BOOL_AND operator.
Classes for describing the behavior of individual p-code operations.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:459
The interface to a translation engine for a processor.
Definition: translate.hh:293
Information about the INT_LESS op-code.
Definition: typeop.hh:333
virtual void opFloatLess(const PcodeOp *op)=0
Emit a FLOAT_LESS operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:450
Information about the INSERT op-code.
Definition: typeop.hh:782
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:583
Information about the CALL op-code.
Definition: typeop.hh:261
static void registerInstructions(vector< TypeOp *> &inst, TypeFactory *tlst, const Translate *trans)
Build a map from op-code value to the TypeOp information objects.
Definition: typeop.cc:23
uint4 getFlags(void) const
Get the properties associated with the op-code.
Definition: typeop.hh:58
virtual ~TypeOp(void)
Destructor.
Definition: typeop.cc:161
virtual void opIntNotEqual(const PcodeOp *op)=0
Emit a INT_NOTEQUAL operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:646
Information about the INT_LEFT op-code.
Definition: typeop.hh:447
virtual void opBranchind(const PcodeOp *op)=0
Emit a BRANCHIND operator.
An interface to the pool of constant objects for byte-code languages.
Definition: cpool.hh:94
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:590
Information about the INT_SREM op-code.
Definition: typeop.hh:509
virtual Datatype * getInputLocal(const PcodeOp *op, int4 slot) const
Find the minimal (or suggested) data-type of an input to this op-code.
Definition: typeop.cc:188
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:418
virtual void opIndirect(const PcodeOp *op)=0
Emit a INDIRECT operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:801
virtual void opExtractOp(const PcodeOp *op)=0
Emit an EXTRACT operator.
Information about the INT_CARRY op-code.
Definition: typeop.hh:383
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:683
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:534
Information about the CPOOLREF op-code.
Definition: typeop.hh:761
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:639
virtual void opFloatAdd(const PcodeOp *op)=0
Emit a FLOAT_ADD operator.
Information about the INT_SCARRY op-code.
Definition: typeop.hh:391
A generic unary operator: one input and one output.
Definition: typeop.hh:172
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:611
Information about the CAST op-code.
Definition: typeop.hh:708
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:231
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:402
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:480
Information about the FLOAT_DIV op-code.
Definition: typeop.hh:587
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:562
uintb evaluateBinary(int4 sizeout, int4 sizein, uintb in1, uintb in2) const
Emulate the binary op-code on an input value.
Definition: typeop.hh:78
virtual void opPtradd(const PcodeOp *op)=0
Emit a PTRADD operator.
virtual void opSegmentOp(const PcodeOp *op)=0
Emit a SEGMENTOP operator.
Information about the NEW op-code.
Definition: typeop.hh:773
virtual void opPopcountOp(const PcodeOp *op)=0
Emit a POPCOUNT operator.
uintb evaluateUnary(int4 sizeout, int4 sizein, uintb in1) const
Emulate the unary op-code on an input value.
Definition: typeop.hh:68
virtual void printRaw(ostream &s, const PcodeOp *op)=0
Print (for debugging purposes) this specific PcodeOp to the stream.
bool isCommutative(void) const
Return true if this op-code is commutative.
Definition: typeop.cc:169
virtual void setMetatypeIn(type_metatype val)
Set the data-type associated with inputs to this opcode.
Definition: typeop.hh:50
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:264
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:295
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:569
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:737
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:434
Information about the FLOAT_INT2FLOAT op-code.
Definition: typeop.hh:629
virtual void opInsertOp(const PcodeOp *op)=0
Emit an INSERT operator.
virtual void opPtrsub(const PcodeOp *op)=0
Emit a PTRSUB operator.
Information about the FLOAT_ABS op-code.
Definition: typeop.hh:615
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:704
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:604
Information about the SUBPIECE op-code.
Definition: typeop.hh:697
virtual uintb evaluateUnary(int4 sizeout, int4 sizein, uintb in1) const
Emulate the unary op-code on an input value.
Definition: opbehavior.cc:111
TypeOpBinary(TypeFactory *t, OpCode opc, const string &n, type_metatype mout, type_metatype min)
Constructor.
Definition: typeop.hh:161
virtual void opCbranch(const PcodeOp *op)=0
Emit a CBRANCH operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:625
Definitions to support a constant pool for deferred compilation languages (i.e. java byte-code) ...
Only inherits sign from first operand, not the second.
Definition: typeop.hh:41
Information about the SEGMENTOP op-code.
Definition: typeop.hh:749
Information about the PTRADD op-code.
Definition: typeop.hh:718
A generic binary operator: two inputs and one output.
Definition: typeop.hh:155
virtual Datatype * getInputCast(const PcodeOp *op, int4 slot, const CastStrategy *castStrategy) const
Find the data-type of the input to a specific PcodeOp.
Definition: typeop.cc:212
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:239
Information about the FLOAT_SQRT op-code.
Definition: typeop.hh:622
bool markExplicitUnsigned(PcodeOp *op, int4 slot) const
Check if a constant input should be explicitly labeled as unsigned.
Definition: typeop.cc:230
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:618
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:713
bool inheritsSign(void) const
Return true if the op-code inherits it signedness from its inputs.
Definition: typeop.hh:107
Container class for all Datatype objects in an Architecture.
Definition: type.hh:380
virtual void opCpoolRefOp(const PcodeOp *op)=0
Emit a CPOOLREF operator.
Information about the CALLIND op-code.
Definition: typeop.hh:271
virtual void opFloatEqual(const PcodeOp *op)=0
Emit a FLOAT_EQUAL operator.
virtual uintb recoverInputBinary(int4 slot, int4 sizeout, uintb out, int4 sizein, uintb in) const
Reverse the binary op-code operation, recovering an input value.
Definition: opbehavior.cc:149
Information about the FLOAT_NEG op-code.
Definition: typeop.hh:608
uintb recoverInputUnary(int4 sizeout, uintb out, int4 sizein) const
Reverse the unary op-code operation, recovering a constant input value.
Definition: typeop.hh:101
OpCode getOpcode(void) const
Get the op-code value.
Definition: typeop.hh:57
uintb recoverInputBinary(int4 slot, int4 sizeout, uintb out, int4 sizein, uintb in) const
Reverse the binary op-code operation, recovering a constant input value.
Definition: typeop.hh:91
Information about the INT_EQUAL op-code.
Definition: typeop.hh:301
Information about the FLOAT_CEIL op-code.
Definition: typeop.hh:650
Information about the INT_SDIV op-code.
Definition: typeop.hh:493
virtual void opFloatRound(const PcodeOp *op)=0
Emit a FLOAT_ROUND operator.
virtual void opIntSlessEqual(const PcodeOp *op)=0
Emit a INT_SLESSEQUAL operator.
Information about the FLOAT_SUB op-code.
Definition: typeop.hh:601
virtual uintb recoverInputUnary(int4 sizeout, uintb out, int4 sizein) const
Reverse the unary op-code operation, recovering the input value.
Definition: opbehavior.cc:135
TypeFactory * tlst
Pointer to data-type factory.
Definition: typeop.hh:44
virtual void opPiece(const PcodeOp *op)=0
Emit a PIECE operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:361
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:504
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:336
Information about the FLOAT_LESSEQUAL op-code.
Definition: typeop.hh:566
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:410
Information about the INT_SRIGHT op-code.
Definition: typeop.hh:466
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:284
Information about the INT_NOTEQUAL op-code.
Definition: typeop.hh:309
virtual void opCallind(const PcodeOp *op)=0
Emit a CALLIND operator.
TypeOp(TypeFactory *t, OpCode opc, const string &n)
Constructor.
Definition: typeop.cc:150
virtual void opMultiequal(const PcodeOp *op)=0
Emit a MULTIEQUAL operator.
virtual void opIntSright(const PcodeOp *op)=0
Emit a INT_SRIGHT operator.
Information about the INDIRECT op-code.
Definition: typeop.hh:679
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:520
virtual void opBranch(const PcodeOp *op)=0
Emit a BRANCH operator.
Information about the INT_DIV op-code.
Definition: typeop.hh:485
virtual void opIntSborrow(const PcodeOp *op)=0
Emit a INT_SBORROW operator.
virtual void opIntSub(const PcodeOp *op)=0
Emit a INT_SUB operator.
virtual void opFloatInt2Float(const PcodeOp *op)=0
Emit a FLOAT_INT2FLOAT operator.
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:248
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:660
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:221
virtual void setSymbol(const string &nm)
Set the display symbol associated with the op-code.
Definition: typeop.hh:52
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:667
The base class API for emitting a high-level language.
Definition: printlanguage.hh:134
Information about the FLOAT_MULT op-code.
Definition: typeop.hh:594
Information about the INT_XOR op-code.
Definition: typeop.hh:423
Information about the FLOAT_LESS op-code.
Definition: typeop.hh:559
Operator token inherits signedness from its inputs.
Definition: typeop.hh:40
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:394
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:653
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const
Push the specific PcodeOp to the emitter's RPN stack.
Definition: typeop.hh:210
virtual void opIntScarry(const PcodeOp *op)=0
Emit a INT_SCARRY operator.
virtual Datatype * getOutputLocal(const PcodeOp *op) const
Find the minimal (or suggested) data-type of an output to this op-code.
Definition: typeop.cc:178
virtual void opIntOr(const PcodeOp *op)=0
Emit a INT_OR operator.
Information about the FLOAT_EQUAL op-code.
Definition: typeop.hh:545
virtual void opIntLessEqual(const PcodeOp *op)=0
Emit a INT_LESSEQUAL operator.
virtual void opIntSrem(const PcodeOp *op)=0
Emit a INT_SREM operator.
Information about the INT_LESSEQUAL op-code.
Definition: typeop.hh:341