Ghidra Decompiler Analysis Engine
typeop.hh
Go to the documentation of this file.
1 /* ###
2  * IP: GHIDRA
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
18 
19 #ifndef __CPUI_TYPEOP__
20 #define __CPUI_TYPEOP__
21 
22 #include "cpool.hh"
23 #include "variable.hh"
24 #include "opbehavior.hh"
25 #include "printlanguage.hh"
26 
27 class PcodeOp;
28 class Translate;
29 
37 class TypeOp {
38 public:
39  enum {
42  };
43 protected:
46  uint4 opflags;
47  uint4 addlflags;
48  string name;
50  virtual void setMetatypeIn(type_metatype val) {}
51  virtual void setMetatypeOut(type_metatype val) {}
52  virtual void setSymbol(const string &nm) { name = nm; }
53 public:
54  TypeOp(TypeFactory *t,OpCode opc,const string &n);
55  virtual ~TypeOp(void);
56  const string &getName(void) const { return name; }
57  OpCode getOpcode(void) const { return opcode; }
58  uint4 getFlags(void) const { return opflags; }
59  OpBehavior *getBehavior(void) const { return behave; }
60  bool markExplicitUnsigned(PcodeOp *op,int4 slot) const;
61 
68  uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const {
69  return behave->evaluateUnary(sizeout,sizein,in1); }
70 
78  uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const {
79  return behave->evaluateBinary(sizeout,sizein,in1,in2); }
80 
91  uintb recoverInputBinary(int4 slot,int4 sizeout,uintb out,int4 sizein,uintb in) const {
92  return behave->recoverInputBinary(slot,sizeout,out,sizein,in); }
93 
101  uintb recoverInputUnary(int4 sizeout,uintb out,int4 sizein) const {
102  return behave->recoverInputUnary(sizeout,out,sizein); }
103 
104  bool isCommutative(void) const;
105 
107  bool inheritsSign(void) const { return ((addlflags & inherits_sign)!=0); }
108 
110  virtual Datatype *getOutputLocal(const PcodeOp *op) const;
111 
113  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
114 
116  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
117 
119  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
120 
127  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const=0;
128 
133  virtual void printRaw(ostream &s,const PcodeOp *op)=0;
134 
140  virtual string getOperatorName(const PcodeOp *op) const { return name; }
141 
143  static void registerInstructions(vector<TypeOp *> &inst,TypeFactory *tlst,
144  const Translate *trans);
145 
147  static void selectJavaOperators(vector<TypeOp *> &inst,bool val);
148 };
149 
150 // Major classes of operations
151 
156 class TypeOpBinary : public TypeOp {
157  type_metatype metaout;
158  type_metatype metain;
159  virtual void setMetatypeIn(type_metatype val) { metain = val; }
160  virtual void setMetatypeOut(type_metatype val) { metaout = val; }
161 public:
162  TypeOpBinary(TypeFactory *t,OpCode opc,const string &n,type_metatype mout,type_metatype min)
163  : TypeOp(t,opc,n) { metaout = mout; metain = min; }
164  virtual Datatype *getOutputLocal(const PcodeOp *op) const;
165  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
166  virtual void printRaw(ostream &s,const PcodeOp *op);
167 };
168 
173 class TypeOpUnary : public TypeOp {
174  type_metatype metaout;
175  type_metatype metain;
176  virtual void setMetatypeIn(type_metatype val) { metain = val; }
177  virtual void setMetatypeOut(type_metatype val) { metaout = val; }
178 public:
179  TypeOpUnary(TypeFactory *t,OpCode opc,const string &n,type_metatype mout,type_metatype min)
180  : TypeOp(t,opc,n) { metaout = mout; metain = min; }
181  virtual Datatype *getOutputLocal(const PcodeOp *op) const;
182  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
183  virtual void printRaw(ostream &s,const PcodeOp *op);
184 };
185 
190 class TypeOpFunc : public TypeOp {
191  type_metatype metaout;
192  type_metatype metain;
193  virtual void setMetatypeIn(type_metatype val) { metain = val; }
194  virtual void setMetatypeOut(type_metatype val) { metaout = val; }
195 public:
196  TypeOpFunc(TypeFactory *t,OpCode opc,const string &n,type_metatype mout,type_metatype min)
197  : TypeOp(t,opc,n) { metaout = mout; metain = min; }
198  virtual Datatype *getOutputLocal(const PcodeOp *op) const;
199  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
200  virtual void printRaw(ostream &s,const PcodeOp *op);
201 };
202 
203 // A class for each op-code
204 
206 class TypeOpCopy : public TypeOp {
207 public:
208  TypeOpCopy(TypeFactory *t);
209  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
210  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
211  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opCopy(op); }
212  virtual void printRaw(ostream &s,const PcodeOp *op);
213 };
214 
216 class TypeOpLoad : public TypeOp {
217 public:
218  TypeOpLoad(TypeFactory *t);
219  // virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
220  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
221  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
222  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opLoad(op); }
223  virtual void printRaw(ostream &s,const PcodeOp *op);
224 };
225 
227 class TypeOpStore : public TypeOp {
228 public:
230  // virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
231  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
232  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opStore(op); }
233  virtual void printRaw(ostream &s,const PcodeOp *op);
234 };
235 
237 class TypeOpBranch : public TypeOp {
238 public:
240  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opBranch(op); }
241  virtual void printRaw(ostream &s,const PcodeOp *op);
242 };
243 
245 class TypeOpCbranch : public TypeOp {
246 public:
248  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
249  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opCbranch(op); }
250  virtual void printRaw(ostream &s,const PcodeOp *op);
251 };
252 
254 class TypeOpBranchind : public TypeOp {
255 public:
257  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opBranchind(op); }
258  virtual void printRaw(ostream &s,const PcodeOp *op);
259 };
260 
262 class TypeOpCall : public TypeOp {
263 public:
264  TypeOpCall(TypeFactory *t);
265  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opCall(op); }
266  virtual void printRaw(ostream &s,const PcodeOp *op);
267  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
268  virtual Datatype *getOutputLocal(const PcodeOp *op) const;
269 };
270 
272 class TypeOpCallind : public TypeOp {
273 public:
275  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opCallind(op); }
276  virtual void printRaw(ostream &s,const PcodeOp *op);
277  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
278  virtual Datatype *getOutputLocal(const PcodeOp *op) const;
279 };
280 
282 class TypeOpCallother : public TypeOp {
283 public:
285  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opCallother(op); }
286  virtual void printRaw(ostream &s,const PcodeOp *op);
287  virtual string getOperatorName(const PcodeOp *op) const;
288  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
289  virtual Datatype *getOutputLocal(const PcodeOp *op) const;
290 };
291 
293 class TypeOpReturn : public TypeOp {
294 public:
296  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opReturn(op); }
297  virtual void printRaw(ostream &s,const PcodeOp *op);
298  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
299 };
300 
302 class TypeOpEqual : public TypeOpBinary {
303 public:
305  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntEqual(op); }
306  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
307 };
308 
310 class TypeOpNotEqual : public TypeOpBinary {
311 public:
313  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntNotEqual(op); }
314  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
315 };
316 
318 class TypeOpIntSless : public TypeOpBinary {
319 public:
321  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntSless(op); }
322  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
323 };
324 
327 public:
329  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntSlessEqual(op); }
330  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
331 };
332 
334 class TypeOpIntLess : public TypeOpBinary {
335 public:
337  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntLess(op); }
338  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
339 };
340 
343 public:
345  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntLessEqual(op); }
346  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
347 };
348 
350 class TypeOpIntZext : public TypeOpFunc {
351 public:
353  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntZext(op,readOp); }
354  virtual string getOperatorName(const PcodeOp *op) const;
355  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
356 };
357 
359 class TypeOpIntSext : public TypeOpFunc {
360 public:
362  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntSext(op,readOp); }
363  virtual string getOperatorName(const PcodeOp *op) const;
364  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
365 };
366 
368 class TypeOpIntAdd : public TypeOpBinary {
369 public:
371  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntAdd(op); }
372  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
373 };
374 
376 class TypeOpIntSub : public TypeOpBinary {
377 public:
379  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntSub(op); }
380  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
381 };
382 
384 class TypeOpIntCarry : public TypeOpFunc {
385 public:
387  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntCarry(op); }
388  virtual string getOperatorName(const PcodeOp *op) const;
389 };
390 
392 class TypeOpIntScarry : public TypeOpFunc {
393 public:
395  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntScarry(op); }
396  virtual string getOperatorName(const PcodeOp *op) const;
397 };
398 
400 class TypeOpIntSborrow : public TypeOpFunc {
401 public:
403  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntSborrow(op); }
404  virtual string getOperatorName(const PcodeOp *op) const;
405 };
406 
408 class TypeOpInt2Comp : public TypeOpUnary {
409 public:
411  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opInt2Comp(op); }
412  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
413 };
414 
416 class TypeOpIntNegate : public TypeOpUnary {
417 public:
419  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntNegate(op); }
420  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
421 };
422 
424 class TypeOpIntXor : public TypeOpBinary {
425 public:
427  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntXor(op); }
428  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
429 };
430 
432 class TypeOpIntAnd : public TypeOpBinary {
433 public:
435  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntAnd(op); }
436  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
437 };
438 
440 class TypeOpIntOr : public TypeOpBinary {
441 public:
443  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntOr(op); }
444  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
445 };
446 
448 class TypeOpIntLeft : public TypeOpBinary {
449 public:
451  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntLeft(op); }
452  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
453  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
454 };
455 
457 class TypeOpIntRight : public TypeOpBinary {
458 public:
460  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntRight(op); }
461  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
462  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
463  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
464 };
465 
468 public:
470  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntSright(op); }
471  virtual void printRaw(ostream &s,const PcodeOp *op);
472  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
473  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
474  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
475 };
476 
478 class TypeOpIntMult : public TypeOpBinary {
479 public:
481  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntMult(op); }
482  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
483 };
484 
486 class TypeOpIntDiv : public TypeOpBinary {
487 public:
489  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntDiv(op); }
490  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
491 };
492 
494 class TypeOpIntSdiv : public TypeOpBinary {
495 public:
497  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntSdiv(op); }
498  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
499 };
500 
502 class TypeOpIntRem : public TypeOpBinary {
503 public:
505  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntRem(op); }
506  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
507 };
508 
510 class TypeOpIntSrem : public TypeOpBinary {
511 public:
513  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIntSrem(op); }
514  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
515 };
516 
519 public:
521  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opBoolNegate(op); }
522 };
523 
525 class TypeOpBoolXor : public TypeOpBinary {
526 public:
528  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opBoolXor(op); }
529 };
530 
532 class TypeOpBoolAnd : public TypeOpBinary {
533 public:
535  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opBoolAnd(op); }
536 };
537 
539 class TypeOpBoolOr : public TypeOpBinary {
540 public:
542  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opBoolOr(op); }
543 };
544 
547 public:
548  TypeOpFloatEqual(TypeFactory *t,const Translate *trans);
549  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatEqual(op); }
550 };
551 
554 public:
555  TypeOpFloatNotEqual(TypeFactory *t,const Translate *trans);
556  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatNotEqual(op); }
557 };
558 
561 public:
562  TypeOpFloatLess(TypeFactory *t,const Translate *trans);
563  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatLess(op); }
564 };
565 
568 public:
569  TypeOpFloatLessEqual(TypeFactory *t,const Translate *trans);
570  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatLessEqual(op); }
571 };
572 
574 class TypeOpFloatNan : public TypeOpFunc {
575 public:
576  TypeOpFloatNan(TypeFactory *t,const Translate *trans);
577  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatNan(op); }
578 };
579 
581 class TypeOpFloatAdd : public TypeOpBinary {
582 public:
583  TypeOpFloatAdd(TypeFactory *t,const Translate *trans);
584  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatAdd(op); }
585 };
586 
588 class TypeOpFloatDiv : public TypeOpBinary {
589 public:
590  TypeOpFloatDiv(TypeFactory *t,const Translate *trans);
591  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatDiv(op); }
592 };
593 
596 public:
597  TypeOpFloatMult(TypeFactory *t,const Translate *trans);
598  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatMult(op); }
599 };
600 
602 class TypeOpFloatSub : public TypeOpBinary {
603 public:
604  TypeOpFloatSub(TypeFactory *t,const Translate *trans);
605  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatSub(op); }
606 };
607 
609 class TypeOpFloatNeg : public TypeOpUnary {
610 public:
611  TypeOpFloatNeg(TypeFactory *t,const Translate *trans);
612  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatNeg(op); }
613 };
614 
616 class TypeOpFloatAbs : public TypeOpFunc {
617 public:
618  TypeOpFloatAbs(TypeFactory *t,const Translate *trans);
619  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatAbs(op); }
620 };
621 
623 class TypeOpFloatSqrt : public TypeOpFunc {
624 public:
625  TypeOpFloatSqrt(TypeFactory *t,const Translate *trans);
626  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatSqrt(op); }
627 };
628 
631 public:
632  TypeOpFloatInt2Float(TypeFactory *t,const Translate *trans);
633  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatInt2Float(op); }
634 };
635 
638 public:
639  TypeOpFloatFloat2Float(TypeFactory *t,const Translate *trans);
640  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatFloat2Float(op); }
641 };
642 
644 class TypeOpFloatTrunc : public TypeOpFunc {
645 public:
646  TypeOpFloatTrunc(TypeFactory *t,const Translate *trans);
647  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatTrunc(op); }
648 };
649 
651 class TypeOpFloatCeil : public TypeOpFunc {
652 public:
653  TypeOpFloatCeil(TypeFactory *t,const Translate *trans);
654  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatCeil(op); }
655 };
656 
658 class TypeOpFloatFloor : public TypeOpFunc {
659 public:
660  TypeOpFloatFloor(TypeFactory *t,const Translate *trans);
661  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatFloor(op); }
662 };
663 
665 class TypeOpFloatRound : public TypeOpFunc {
666 public:
667  TypeOpFloatRound(TypeFactory *t,const Translate *trans);
668  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opFloatRound(op); }
669 };
670 
672 class TypeOpMulti : public TypeOp {
673 public:
675  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opMultiequal(op); }
676  virtual void printRaw(ostream &s,const PcodeOp *op);
677 };
678 
680 class TypeOpIndirect : public TypeOp {
681 public:
683  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
684  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opIndirect(op); }
685  virtual void printRaw(ostream &s,const PcodeOp *op);
686 };
687 
689 class TypeOpPiece : public TypeOpFunc {
690 public:
692  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
693  virtual string getOperatorName(const PcodeOp *op) const;
694  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opPiece(op); }
695 };
696 
698 class TypeOpSubpiece : public TypeOpFunc {
699 public:
701  // virtual Datatype *getOutputLocal(const PcodeOp *op) const;
702  // virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
703  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
704  virtual string getOperatorName(const PcodeOp *op) const;
705  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opSubpiece(op); }
706 };
707 
709 class TypeOpCast : public TypeOp {
710 public:
711  TypeOpCast(TypeFactory *t);
712  // We don't care what types are cast
713  // So no input and output requirements
714  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opCast(op); }
715  virtual void printRaw(ostream &s,const PcodeOp *op);
716 };
717 
719 class TypeOpPtradd : public TypeOp {
720 public:
722  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
723  virtual Datatype *getOutputLocal(const PcodeOp *op) const;
724  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
725  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
726  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opPtradd(op); }
727  virtual void printRaw(ostream &s,const PcodeOp *op);
728 };
729 
731 class TypeOpPtrsub : public TypeOp {
732 public:
734  virtual Datatype *getOutputLocal(const PcodeOp *op) const;
735  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
736  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
737  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
738  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opPtrsub(op); }
739  virtual void printRaw(ostream &s,const PcodeOp *op);
740 };
741 
750 class TypeOpSegment : public TypeOp {
751 public:
753  // virtual Datatype *getOutputLocal(const PcodeOp *op) const;
754  // virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
755  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const;
756  virtual Datatype *getOutputToken(const PcodeOp *op,CastStrategy *castStrategy) const;
757  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opSegmentOp(op); }
758  virtual void printRaw(ostream &s,const PcodeOp *op);
759 };
760 
762 class TypeOpCpoolref : public TypeOp {
763  ConstantPool *cpool;
764 public:
766  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const { return (Datatype *)0; } // Never needs casting
767  virtual Datatype *getOutputLocal(const PcodeOp *op) const;
768  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
769  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opCpoolRefOp(op); }
770  virtual void printRaw(ostream &s,const PcodeOp *op);
771 };
772 
774 class TypeOpNew : public TypeOp {
775 public:
776  TypeOpNew(TypeFactory *t);
777  virtual Datatype *getInputCast(const PcodeOp *op,int4 slot,const CastStrategy *castStrategy) const { return (Datatype *)0; } // Never needs casting
778  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opNewOp(op); }
779  virtual void printRaw(ostream &s,const PcodeOp *op);
780 };
781 
783 class TypeOpInsert : public TypeOpFunc {
784 public:
786  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
787  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opInsertOp(op); }
788 };
789 
791 class TypeOpExtract : public TypeOpFunc {
792 public:
794  virtual Datatype *getInputLocal(const PcodeOp *op,int4 slot) const;
795  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opExtractOp(op); }
796 };
797 
799 class TypeOpPopcount : public TypeOpFunc {
800 public:
802  virtual void push(PrintLanguage *lng,const PcodeOp *op,const PcodeOp *readOp) const { lng->opPopcountOp(op); }
803 };
804 
805 #endif
TypeOp::inheritsSign
bool inheritsSign(void) const
Return true if the op-code inherits it signedness from its inputs.
Definition: typeop.hh:107
TypeOpIntAnd
Information about the INT_AND op-code.
Definition: typeop.hh:432
PrintLanguage::opFloatMult
virtual void opFloatMult(const PcodeOp *op)=0
Emit a FLOAT_MULT operator.
TypeOpIntLess
Information about the INT_LESS op-code.
Definition: typeop.hh:334
TypeOpCallother::getInputLocal
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:732
TypeOpFloatMult
Information about the FLOAT_MULT op-code.
Definition: typeop.hh:595
TypeOpIntCarry
Information about the INT_CARRY op-code.
Definition: typeop.hh:384
TypeOp::recoverInputUnary
uintb recoverInputUnary(int4 sizeout, uintb out, int4 sizein) const
Reverse the unary op-code operation, recovering a constant input value.
Definition: typeop.hh:101
PrintLanguage
The base class API for emitting a high-level language.
Definition: printlanguage.hh:134
TypeOpPtradd::getInputCast
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:1647
TypeOpFloatAdd::TypeOpFloatAdd
TypeOpFloatAdd(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1403
TypeOpIntSrem::getInputCast
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:1328
PrintLanguage::opIntSrem
virtual void opIntSrem(const PcodeOp *op)=0
Emit a INT_SREM operator.
PrintLanguage::opIntAnd
virtual void opIntAnd(const PcodeOp *op)=0
Emit a INT_AND operator.
TypeOpCpoolref::push
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:769
PrintLanguage::opIntScarry
virtual void opIntScarry(const PcodeOp *op)=0
Emit a INT_SCARRY operator.
TypeOpFloatFloat2Float::push
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:640
TypeOpCast::TypeOpCast
TypeOpCast(TypeFactory *t)
Constructor.
Definition: typeop.cc:1607
TypeOp::inherits_sign_zero
@ inherits_sign_zero
Only inherits sign from first operand, not the second.
Definition: typeop.hh:41
TypeOpIntSext::push
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:362
TypeOp::TypeOp
TypeOp(TypeFactory *t, OpCode opc, const string &n)
Constructor.
Definition: typeop.cc:150
TypeOpSegment::TypeOpSegment
TypeOpSegment(TypeFactory *t)
Constructor.
Definition: typeop.cc:1730
PrintLanguage::opFloatAbs
virtual void opFloatAbs(const PcodeOp *op)=0
Emit a FLOAT_ABS operator.
TypeOpIntLeft
Information about the INT_LEFT op-code.
Definition: typeop.hh:448
TypeOpIntSrem
Information about the INT_SREM op-code.
Definition: typeop.hh:510
TypeOpIntCarry::push
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:387
TypeOpIntSlessEqual::push
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:329
TypeOpFloatSub::TypeOpFloatSub
TypeOpFloatSub(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1424
TypeOpFloatDiv
Information about the FLOAT_DIV op-code.
Definition: typeop.hh:588
PrintLanguage::opFloatEqual
virtual void opFloatEqual(const PcodeOp *op)=0
Emit a FLOAT_EQUAL operator.
TypeOpExtract
Information about the EXTRACT op-code.
Definition: typeop.hh:791
PrintLanguage::opIntRight
virtual void opIntRight(const PcodeOp *op)=0
Emit a INT_RIGHT operator.
PrintLanguage::opInt2Comp
virtual void opInt2Comp(const PcodeOp *op)=0
Emit a INT_2COMP operator.
TypeOpCpoolref::getInputCast
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:766
TypeOpIntLess::getInputCast
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:908
TypeOpIndirect::getInputLocal
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:1526
TypeOpIntMult::TypeOpIntMult
TypeOpIntMult(TypeFactory *t)
Constructor.
Definition: typeop.cc:1246
TypeOpFloatTrunc::push
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:647
TypeOpMulti
Information about the MULTIEQUAL op-code.
Definition: typeop.hh:672
TypeOpStore::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:466
TypeOpSubpiece::push
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:705
TypeOp::selectJavaOperators
static void selectJavaOperators(vector< TypeOp * > &inst, bool val)
Toggle Java specific aspects of the op-code information.
Definition: typeop.cc:112
PrintLanguage::opIntSub
virtual void opIntSub(const PcodeOp *op)=0
Emit a INT_SUB operator.
TypeOpCopy::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:350
TypeOpBoolNegate
Information about the BOOL_NEGATE op-code.
Definition: typeop.hh:518
TypeOpInt2Comp::getOutputToken
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:1069
PrintLanguage::opBoolXor
virtual void opBoolXor(const PcodeOp *op)=0
Emit a BOOL_XOR operator.
TypeOpIntMult::push
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:481
TypeOpIntNegate::getOutputToken
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:1083
TypeOpFloatCeil::TypeOpFloatCeil
TypeOpFloatCeil(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1473
TypeOpPtrsub::push
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:738
TypeOpSubpiece::getOutputToken
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:1597
TypeOpMulti::TypeOpMulti
TypeOpMulti(TypeFactory *t)
Constructor.
Definition: typeop.cc:1494
TypeOpEqual::push
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:305
PrintLanguage::opCpoolRefOp
virtual void opCpoolRefOp(const PcodeOp *op)=0
Emit a CPOOLREF operator.
TypeOpIntSborrow::TypeOpIntSborrow
TypeOpIntSborrow(TypeFactory *t)
Constructor.
Definition: typeop.cc:1046
TypeOp::getOutputToken
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
PrintLanguage::opFloatDiv
virtual void opFloatDiv(const PcodeOp *op)=0
Emit a FLOAT_DIV operator.
TypeOpIntSright::getInputCast
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:1214
TypeOpExtract::getInputLocal
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:1868
TypeOpUnary::getInputLocal
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:290
TypeOpFloatRound
Information about the FLOAT_ROUND op-code.
Definition: typeop.hh:665
TypeOpBoolXor::TypeOpBoolXor
TypeOpBoolXor(TypeFactory *t)
Constructor.
Definition: typeop.cc:1347
PrintLanguage::opFloatNan
virtual void opFloatNan(const PcodeOp *op)=0
Emit a FLOAT_NAN operator.
TypeOpFloatLessEqual::TypeOpFloatLessEqual
TypeOpFloatLessEqual(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1389
TypeOpInsert::getInputLocal
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:1853
TypeOpCpoolref::TypeOpCpoolref
TypeOpCpoolref(TypeFactory *t)
Constructor.
Definition: typeop.cc:1771
TypeOpInsert::push
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:787
PrintLanguage::opIntCarry
virtual void opIntCarry(const PcodeOp *op)=0
Emit a INT_CARRY operator.
PrintLanguage::opPiece
virtual void opPiece(const PcodeOp *op)=0
Emit a PIECE operator.
PrintLanguage::opCall
virtual void opCall(const PcodeOp *op)=0
Emit a CALL operator.
TypeOpIndirect::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:1539
TypeOpFloatSqrt::push
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:626
TypeOpFloatRound::TypeOpFloatRound
TypeOpFloatRound(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1487
TypeOpBranchind::TypeOpBranchind
TypeOpBranchind(TypeFactory *t)
Constructor.
Definition: typeop.cc:523
TypeOpCall::push
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:265
TypeOpFloatNotEqual::TypeOpFloatNotEqual
TypeOpFloatNotEqual(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1375
TypeOpIntMult
Information about the INT_MULT op-code.
Definition: typeop.hh:478
TypeOpSegment
Information about the SEGMENTOP op-code.
Definition: typeop.hh:750
TypeOpPtrsub
Information about the PTRSUB op-code.
Definition: typeop.hh:731
PrintLanguage::opFloatTrunc
virtual void opFloatTrunc(const PcodeOp *op)=0
Emit a FLOAT_TRUNC operator.
TypeOpFloatInt2Float
Information about the FLOAT_INT2FLOAT op-code.
Definition: typeop.hh:630
TypeOpMulti::push
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:675
TypeOpIntScarry::push
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:395
TypeOpIntLeft::getOutputToken
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:1147
TypeOpIntAdd::getOutputToken
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:996
TypeOpCbranch::push
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:249
TypeOpSubpiece
Information about the SUBPIECE op-code.
Definition: typeop.hh:698
TypeOpEqual::getInputCast
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:830
TypeOpStore
Information about the STORE op-code.
Definition: typeop.hh:227
PrintLanguage::opIntSright
virtual void opIntSright(const PcodeOp *op)=0
Emit a INT_SRIGHT operator.
TypeOpIntSub::push
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:379
TypeOpNew::push
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:778
TypeOpIntXor::push
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:427
TypeOpIntZext::getOperatorName
virtual string getOperatorName(const PcodeOp *op) const
Get the name of the op-code as it should be displayed in context.
Definition: typeop.cc:943
TypeOpCopy::push
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:211
TypeOpFloatAbs
Information about the FLOAT_ABS op-code.
Definition: typeop.hh:616
TypeOp::behave
OpBehavior * behave
Object for emulating the behavior of the op-code.
Definition: typeop.hh:49
TypeOpNotEqual::getInputCast
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:851
TypeOpFloatMult::TypeOpFloatMult
TypeOpFloatMult(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1417
TypeOpIntLeft::TypeOpIntLeft
TypeOpIntLeft(TypeFactory *t)
Constructor.
Definition: typeop.cc:1131
TypeOpCallind
Information about the CALLIND op-code.
Definition: typeop.hh:272
TypeOpIntOr::push
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:443
TypeOpCopy
Information about the COPY op-code.
Definition: typeop.hh:206
PrintLanguage::opInsertOp
virtual void opInsertOp(const PcodeOp *op)=0
Emit an INSERT operator.
ConstantPool
An interface to the pool of constant objects for byte-code languages.
Definition: cpool.hh:92
TypeOpCallind::TypeOpCallind
TypeOpCallind(TypeFactory *t)
Constructor.
Definition: typeop.cc:615
TypeOpPiece
Information about the PIECE op-code.
Definition: typeop.hh:689
TypeOpIntSrem::TypeOpIntSrem
TypeOpIntSrem(TypeFactory *t)
Constructor.
Definition: typeop.cc:1320
TypeOpBranch
Information about the BRANCH op-code.
Definition: typeop.hh:237
cpool.hh
Definitions to support a constant pool for deferred compilation languages (i.e. java byte-code)
TypeOpBranchind::push
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:257
TypeOpCallother::TypeOpCallother
TypeOpCallother(TypeFactory *t)
Constructor.
Definition: typeop.cc:688
TypeOpFloatInt2Float::TypeOpFloatInt2Float
TypeOpFloatInt2Float(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1452
PrintLanguage::opBranch
virtual void opBranch(const PcodeOp *op)=0
Emit a BRANCH operator.
TypeOpIntDiv::TypeOpIntDiv
TypeOpIntDiv(TypeFactory *t)
Constructor.
Definition: typeop.cc:1260
PrintLanguage::opFloatSqrt
virtual void opFloatSqrt(const PcodeOp *op)=0
Emit a FLOAT_SQRT operator.
TypeOpPtrsub::getOutputToken
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:1707
TypeOpIntSless::TypeOpIntSless
TypeOpIntSless(TypeFactory *t)
Constructor.
Definition: typeop.cc:864
TypeOpCast::push
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:714
TypeOpBranchind::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:530
TypeOpIntSborrow::getOperatorName
virtual string getOperatorName(const PcodeOp *op) const
Get the name of the op-code as it should be displayed in context.
Definition: typeop.cc:1053
OpBehavior
Class encapsulating the action/behavior of specific pcode opcodes.
Definition: opbehavior.hh:42
TypeOpFloatDiv::TypeOpFloatDiv
TypeOpFloatDiv(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1410
TypeOpSubpiece::TypeOpSubpiece
TypeOpSubpiece(TypeFactory *t)
Constructor.
Definition: typeop.cc:1581
TypeOpExtract::push
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:795
TypeOpIntNegate
Information about the INT_NEGATE op-code.
Definition: typeop.hh:416
OpBehavior::evaluateBinary
virtual uintb evaluateBinary(int4 sizeout, int4 sizein, uintb in1, uintb in2) const
Emulate the binary op-code on input values.
Definition: opbehavior.cc:123
TypeOpFloatNeg
Information about the FLOAT_NEG op-code.
Definition: typeop.hh:609
TypeOpFloatNotEqual::push
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:556
PrintLanguage::opIntRem
virtual void opIntRem(const PcodeOp *op)=0
Emit a INT_REM operator.
TypeOpIntLessEqual::TypeOpIntLessEqual
TypeOpIntLessEqual(TypeFactory *t)
Constructor.
Definition: typeop.cc:918
TypeOp::name
string name
Symbol denoting this operation.
Definition: typeop.hh:48
TypeOpSegment::getOutputToken
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:1754
TypeOpPtrsub::TypeOpPtrsub
TypeOpPtrsub(TypeFactory *t)
Constructor.
Definition: typeop.cc:1672
TypeOp::opcode
OpCode opcode
The op-code value.
Definition: typeop.hh:45
TypeOpIntLessEqual::push
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:345
TypeOpCallind::getOutputLocal
virtual Datatype * getOutputLocal(const PcodeOp *op) const
Find the minimal (or suggested) data-type of an output to this op-code.
Definition: typeop.cc:653
TypeOpIntRight::getInputLocal
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:1164
TypeOpIntSub
Information about the INT_SUB op-code.
Definition: typeop.hh:376
TypeOpIntSless::push
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:321
TypeOpIntLess::TypeOpIntLess
TypeOpIntLess(TypeFactory *t)
Constructor.
Definition: typeop.cc:900
PrintLanguage::opFloatLessEqual
virtual void opFloatLessEqual(const PcodeOp *op)=0
Emit a FLOAT_LESSEQUAL operator.
PrintLanguage::opBranchind
virtual void opBranchind(const PcodeOp *op)=0
Emit a BRANCHIND operator.
TypeOpFloatSub
Information about the FLOAT_SUB op-code.
Definition: typeop.hh:602
TypeOpCbranch
Information about the CBRANCH op-code.
Definition: typeop.hh:245
PrintLanguage::opNewOp
virtual void opNewOp(const PcodeOp *op)=0
Emit a NEW operator.
TypeOpIntSext::getInputCast
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:978
TypeOpCall
Information about the CALL op-code.
Definition: typeop.hh:262
PrintLanguage::opFloatLess
virtual void opFloatLess(const PcodeOp *op)=0
Emit a FLOAT_LESS operator.
TypeOpFloatLessEqual
Information about the FLOAT_LESSEQUAL op-code.
Definition: typeop.hh:567
opbehavior.hh
Classes for describing the behavior of individual p-code operations.
PcodeOp
Lowest level operation of the p-code language.
Definition: op.hh:58
PrintLanguage::opFloatAdd
virtual void opFloatAdd(const PcodeOp *op)=0
Emit a FLOAT_ADD operator.
TypeOpPtrsub::getInputCast
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:1695
TypeOp::evaluateUnary
uintb evaluateUnary(int4 sizeout, int4 sizein, uintb in1) const
Emulate the unary op-code on an input value.
Definition: typeop.hh:68
PrintLanguage::opIntSlessEqual
virtual void opIntSlessEqual(const PcodeOp *op)=0
Emit a INT_SLESSEQUAL operator.
PrintLanguage::opFloatNeg
virtual void opFloatNeg(const PcodeOp *op)=0
Emit a FLOAT_NEG operator.
PrintLanguage::opIntOr
virtual void opIntOr(const PcodeOp *op)=0
Emit a INT_OR operator.
TypeOpIntRem::push
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:505
TypeOp::isCommutative
bool isCommutative(void) const
Return true if this op-code is commutative.
Definition: typeop.cc:169
TypeOpIntAdd::TypeOpIntAdd
TypeOpIntAdd(TypeFactory *t)
Constructor.
Definition: typeop.cc:988
TypeOpNotEqual
Information about the INT_NOTEQUAL op-code.
Definition: typeop.hh:310
variable.hh
Definitions for high-level variables.
TypeOpInsert
Information about the INSERT op-code.
Definition: typeop.hh:783
TypeOpInt2Comp::TypeOpInt2Comp
TypeOpInt2Comp(TypeFactory *t)
Constructor.
Definition: typeop.cc:1061
TypeOpStore::getInputCast
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:430
TypeOpIndirect
Information about the INDIRECT op-code.
Definition: typeop.hh:680
TypeOpIntSub::TypeOpIntSub
TypeOpIntSub(TypeFactory *t)
Constructor.
Definition: typeop.cc:1002
PrintLanguage::opIntLeft
virtual void opIntLeft(const PcodeOp *op)=0
Emit a INT_LEFT operator.
TypeOpIntSlessEqual
Information about the INT_SLESSEQUAL op-code.
Definition: typeop.hh:326
TypeOpBranchind
Information about the BRANCHIND op-code.
Definition: typeop.hh:254
TypeOpIntSright::push
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:470
TypeOpCallother
Information about the CALLOTHER op-code (user defined p-code operations)
Definition: typeop.hh:282
TypeOpInt2Comp::push
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:411
PrintLanguage::opExtractOp
virtual void opExtractOp(const PcodeOp *op)=0
Emit an EXTRACT operator.
TypeOpCopy::TypeOpCopy
TypeOpCopy(TypeFactory *t)
Constructor.
Definition: typeop.cc:329
PrintLanguage::opIntZext
virtual void opIntZext(const PcodeOp *op, const PcodeOp *readOp)=0
Emit a INT_ZEXT operator.
TypeOpBoolNegate::push
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:521
TypeOpFloatInt2Float::push
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:633
TypeOpIntRight::push
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:460
PrintLanguage::opFloatNotEqual
virtual void opFloatNotEqual(const PcodeOp *op)=0
Emit a FLOAT_NOTEQUAL operator.
TypeOpCast::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:1614
TypeOpFunc::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:316
TypeOpIntScarry
Information about the INT_SCARRY op-code.
Definition: typeop.hh:392
TypeOpBoolOr::TypeOpBoolOr
TypeOpBoolOr(TypeFactory *t)
Constructor.
Definition: typeop.cc:1361
TypeOpExtract::TypeOpExtract
TypeOpExtract(TypeFactory *t)
Constructor.
Definition: typeop.cc:1861
TypeOpReturn::push
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:296
TypeOpCast
Information about the CAST op-code.
Definition: typeop.hh:709
TypeOpIntScarry::TypeOpIntScarry
TypeOpIntScarry(TypeFactory *t)
Constructor.
Definition: typeop.cc:1031
TypeOp::getInputLocal
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
TypeOpFloatAdd::push
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:584
TypeOpFunc::getOutputLocal
virtual Datatype * getOutputLocal(const PcodeOp *op) const
Find the minimal (or suggested) data-type of an output to this op-code.
Definition: typeop.cc:304
PrintLanguage::opStore
virtual void opStore(const PcodeOp *op)=0
Emit a STORE operator.
TypeOpSegment::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:1737
TypeOpPtrsub::getOutputLocal
virtual Datatype * getOutputLocal(const PcodeOp *op) const
Find the minimal (or suggested) data-type of an output to this op-code.
Definition: typeop.cc:1683
TypeOpLoad::TypeOpLoad
TypeOpLoad(TypeFactory *t)
Constructor.
Definition: typeop.cc:358
TypeOpNotEqual::TypeOpNotEqual
TypeOpNotEqual(TypeFactory *t)
Constructor.
Definition: typeop.cc:843
PrintLanguage::opCbranch
virtual void opCbranch(const PcodeOp *op)=0
Emit a CBRANCH operator.
TypeOpBoolOr::push
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:542
TypeOpFloatCeil::push
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:654
TypeOpEqual
Information about the INT_EQUAL op-code.
Definition: typeop.hh:302
TypeOpNew
Information about the NEW op-code.
Definition: typeop.hh:774
TypeOpSegment::push
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:757
TypeOpIntZext::push
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:353
TypeOpUnary
A generic unary operator: one input and one output.
Definition: typeop.hh:173
TypeOpFloatRound::push
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:668
TypeOpCall::getOutputLocal
virtual Datatype * getOutputLocal(const PcodeOp *op) const
Find the minimal (or suggested) data-type of an output to this op-code.
Definition: typeop.cc:597
TypeOpIntZext
Information about the INT_ZEXT op-code.
Definition: typeop.hh:350
TypeOpIntSdiv::TypeOpIntSdiv
TypeOpIntSdiv(TypeFactory *t)
Constructor.
Definition: typeop.cc:1280
TypeOpIntLeft::getInputLocal
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:1139
PrintLanguage::opIntSdiv
virtual void opIntSdiv(const PcodeOp *op)=0
Emit a INT_SDIV operator.
TypeOpFunc::getInputLocal
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:310
TypeOpFloatEqual
Information about the FLOAT_EQUAL op-code.
Definition: typeop.hh:546
TypeOpIntAnd::getOutputToken
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:1111
TypeOpBoolAnd::TypeOpBoolAnd
TypeOpBoolAnd(TypeFactory *t)
Constructor.
Definition: typeop.cc:1354
TypeOpNew::TypeOpNew
TypeOpNew(TypeFactory *t)
Constructor.
Definition: typeop.cc:1822
TypeOpCallother::getOperatorName
virtual string getOperatorName(const PcodeOp *op) const
Get the name of the op-code as it should be displayed in context.
Definition: typeop.cc:714
TypeOpCall::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:544
TypeOpLoad
Information about the LOAD op-code.
Definition: typeop.hh:216
TypeOpCall::TypeOpCall
TypeOpCall(TypeFactory *t)
Constructor.
Definition: typeop.cc:537
TypeOp::evaluateBinary
uintb evaluateBinary(int4 sizeout, int4 sizein, uintb in1, uintb in2) const
Emulate the binary op-code on an input value.
Definition: typeop.hh:78
CastStrategy
A strategy for applying type casts.
Definition: cast.hh:40
PrintLanguage::opCopy
virtual void opCopy(const PcodeOp *op)=0
Emit a COPY operator.
TypeOpCallother::push
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:285
TypeOpPopcount::TypeOpPopcount
TypeOpPopcount(TypeFactory *t)
Constructor.
Definition: typeop.cc:1876
TypeOpIntRem::TypeOpIntRem
TypeOpIntRem(TypeFactory *t)
Constructor.
Definition: typeop.cc:1300
TypeOpIntOr::TypeOpIntOr
TypeOpIntOr(TypeFactory *t)
Constructor.
Definition: typeop.cc:1117
TypeOpPopcount::push
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:802
TypeOpPtrsub::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:1720
TypeOpIntSright::getInputLocal
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:1229
TypeOp::getOperatorName
virtual string getOperatorName(const PcodeOp *op) const
Get the name of the op-code as it should be displayed in context.
Definition: typeop.hh:140
TypeOpCbranch::TypeOpCbranch
TypeOpCbranch(TypeFactory *t)
Constructor.
Definition: typeop.cc:491
TypeOpStore::push
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:232
PrintLanguage::opCast
virtual void opCast(const PcodeOp *op)=0
Emit a CAST operator.
TypeOpNew::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:1829
TypeOpPtrsub::getInputLocal
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:1689
TypeOp::getInputCast
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
TypeOpFloatNan::TypeOpFloatNan
TypeOpFloatNan(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1396
TypeOpIntSborrow
Information about the INT_SBORROW op-code.
Definition: typeop.hh:400
TypeOpLoad::push
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:222
TypeOpIntLess::push
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:337
PrintLanguage::opSubpiece
virtual void opSubpiece(const PcodeOp *op)=0
Emit a SUBPIECE operator.
TypeOpIntZext::getInputCast
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:952
TypeOpFloatNan
Information about the FLOAT_NAN op-code.
Definition: typeop.hh:574
TypeOpCpoolref::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:1799
Datatype
The base datatype class for the decompiler.
Definition: type.hh:62
TypeOpNotEqual::push
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:313
TypeFactory
Container class for all Datatype objects in an Architecture.
Definition: type.hh:396
TypeOpReturn::TypeOpReturn
TypeOpReturn(TypeFactory *t)
Constructor.
Definition: typeop.cc:774
TypeOpCopy::getOutputToken
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:344
TypeOpFloatFloor::TypeOpFloatFloor
TypeOpFloatFloor(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1480
TypeOpIntXor::TypeOpIntXor
TypeOpIntXor(TypeFactory *t)
Constructor.
Definition: typeop.cc:1089
TypeOp::push
virtual void push(PrintLanguage *lng, const PcodeOp *op, const PcodeOp *readOp) const =0
Push the specific PcodeOp to the emitter's RPN stack.
TypeOpInt2Comp
Information about the INT_2COMP op-code.
Definition: typeop.hh:408
PrintLanguage::opReturn
virtual void opReturn(const PcodeOp *op)=0
Emit a RETURN operator.
TypeOpIntSdiv::getInputCast
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:1288
TypeOpFloatLessEqual::push
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:570
TypeOpFloatNeg::push
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:612
TypeOpIntLeft::push
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:451
TypeOpFloatCeil
Information about the FLOAT_CEIL op-code.
Definition: typeop.hh:651
TypeOpLoad::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:412
TypeOpIntDiv
Information about the INT_DIV op-code.
Definition: typeop.hh:486
PrintLanguage::opFloatFloat2Float
virtual void opFloatFloat2Float(const PcodeOp *op)=0
Emit a FLOAT_FLOAT2FLOAT operator.
TypeOpBinary
A generic binary operator: two inputs and one output.
Definition: typeop.hh:156
TypeOpFloatEqual::push
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:549
TypeOpFloatAbs::TypeOpFloatAbs
TypeOpFloatAbs(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1438
TypeOpBranch::TypeOpBranch
TypeOpBranch(TypeFactory *t)
Constructor.
Definition: typeop.cc:477
TypeOpEqual::TypeOpEqual
TypeOpEqual(TypeFactory *t)
Constructor.
Definition: typeop.cc:822
TypeOpPtradd::getOutputLocal
virtual Datatype * getOutputLocal(const PcodeOp *op) const
Find the minimal (or suggested) data-type of an output to this op-code.
Definition: typeop.cc:1635
TypeOpPtradd::TypeOpPtradd
TypeOpPtradd(TypeFactory *t)
Constructor.
Definition: typeop.cc:1622
TypeOpIntLessEqual::getInputCast
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:926
TypeOpIntZext::TypeOpIntZext
TypeOpIntZext(TypeFactory *t)
Constructor.
Definition: typeop.cc:936
TypeOpReturn
Information about the RETURN op-code.
Definition: typeop.hh:293
TypeOpSubpiece::getOperatorName
virtual string getOperatorName(const PcodeOp *op) const
Get the name of the op-code as it should be displayed in context.
Definition: typeop.cc:1588
PrintLanguage::opFloatRound
virtual void opFloatRound(const PcodeOp *op)=0
Emit a FLOAT_ROUND operator.
TypeOpBranch::push
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:240
Translate
The interface to a translation engine for a processor.
Definition: translate.hh:294
TypeOpPtradd::getInputLocal
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:1629
TypeOpIntSright::getOutputToken
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:1237
PrintLanguage::opIntLess
virtual void opIntLess(const PcodeOp *op)=0
Emit a INT_LESS operator.
TypeOpIntSext::TypeOpIntSext
TypeOpIntSext(TypeFactory *t)
Constructor.
Definition: typeop.cc:962
TypeOpFloatFloor::push
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:661
TypeOpBoolXor::push
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:528
TypeOp::registerInstructions
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
TypeOpFloatSqrt
Information about the FLOAT_SQRT op-code.
Definition: typeop.hh:623
TypeOpBoolXor
Information about the BOOL_XOR op-code.
Definition: typeop.hh:525
TypeOpIntNegate::push
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:419
TypeOpFloatFloat2Float::TypeOpFloatFloat2Float
TypeOpFloatFloat2Float(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1459
TypeOpIndirect::push
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:684
TypeOpIntRight::getOutputToken
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:1187
PrintLanguage::opFloatFloor
virtual void opFloatFloor(const PcodeOp *op)=0
Emit a FLOAT_FLOOR operator.
TypeOpCpoolref::getInputLocal
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:1793
PrintLanguage::opPtradd
virtual void opPtradd(const PcodeOp *op)=0
Emit a PTRADD operator.
PrintLanguage::opLoad
virtual void opLoad(const PcodeOp *op)=0
Emit a LOAD operator.
TypeOpSegment::getInputCast
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:1760
PrintLanguage::opPopcountOp
virtual void opPopcountOp(const PcodeOp *op)=0
Emit a POPCOUNT operator.
TypeOp::tlst
TypeFactory * tlst
Pointer to data-type factory.
Definition: typeop.hh:44
OpCode
OpCode
The op-code defining a specific p-code operation (PcodeOp)
Definition: opcodes.hh:35
TypeOpIntDiv::push
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:489
TypeOpFloatNeg::TypeOpFloatNeg
TypeOpFloatNeg(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1431
PrintLanguage::opIntMult
virtual void opIntMult(const PcodeOp *op)=0
Emit a INT_MULT operator.
TypeOpPiece::getOutputToken
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:1570
TypeOpIntSlessEqual::getInputCast
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:890
TypeOpFloatSqrt::TypeOpFloatSqrt
TypeOpFloatSqrt(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1445
PrintLanguage::opMultiequal
virtual void opMultiequal(const PcodeOp *op)=0
Emit a MULTIEQUAL operator.
TypeOpUnary::getOutputLocal
virtual Datatype * getOutputLocal(const PcodeOp *op) const
Find the minimal (or suggested) data-type of an output to this op-code.
Definition: typeop.cc:284
TypeOp::getOutputLocal
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
PrintLanguage::opIntSless
virtual void opIntSless(const PcodeOp *op)=0
Emit a INT_SLESS operator.
TypeOpPiece::TypeOpPiece
TypeOpPiece(TypeFactory *t)
Constructor.
Definition: typeop.cc:1554
TypeOpIntSext
Information about the INT_SEXT op-code.
Definition: typeop.hh:359
TypeOpIntSlessEqual::TypeOpIntSlessEqual
TypeOpIntSlessEqual(TypeFactory *t)
Constructor.
Definition: typeop.cc:882
PrintLanguage::opIntAdd
virtual void opIntAdd(const PcodeOp *op)=0
Emit a INT_ADD operator.
TypeOpIntAnd::TypeOpIntAnd
TypeOpIntAnd(TypeFactory *t)
Constructor.
Definition: typeop.cc:1103
TypeOpPopcount
Information about the POPCOUNT op-code.
Definition: typeop.hh:799
TypeOpBinary::getInputLocal
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:268
TypeOpCpoolref::getOutputLocal
virtual Datatype * getOutputLocal(const PcodeOp *op) const
Find the minimal (or suggested) data-type of an output to this op-code.
Definition: typeop.cc:1779
PrintLanguage::opFloatCeil
virtual void opFloatCeil(const PcodeOp *op)=0
Emit a FLOAT_CEIL operator.
TypeOpIntSub::getOutputToken
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:1010
PrintLanguage::opIntXor
virtual void opIntXor(const PcodeOp *op)=0
Emit a INT_XOR operator.
TypeOpCallind::push
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:275
PrintLanguage::opIntNotEqual
virtual void opIntNotEqual(const PcodeOp *op)=0
Emit a INT_NOTEQUAL operator.
PrintLanguage::opPtrsub
virtual void opPtrsub(const PcodeOp *op)=0
Emit a PTRSUB operator.
TypeOpIntSright::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:1204
TypeOpBoolAnd
Information about the BOOL_AND op-code.
Definition: typeop.hh:532
printlanguage.hh
Classes for printing tokens in a high-level language.
TypeOpCopy::getInputCast
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:336
TypeOpIntRight
Information about the INT_RIGHT op-code.
Definition: typeop.hh:457
TypeOpCallind::getInputLocal
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:622
PrintLanguage::opIntNegate
virtual void opIntNegate(const PcodeOp *op)=0
Emit a INT_NEGATE operator.
TypeOpFloatSub::push
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:605
PrintLanguage::opIndirect
virtual void opIndirect(const PcodeOp *op)=0
Emit a INDIRECT operator.
PrintLanguage::opFloatSub
virtual void opFloatSub(const PcodeOp *op)=0
Emit a FLOAT_SUB operator.
TypeOpFloatLess::TypeOpFloatLess
TypeOpFloatLess(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1382
TypeOpIntRight::TypeOpIntRight
TypeOpIntRight(TypeFactory *t)
Constructor.
Definition: typeop.cc:1156
TypeOpCbranch::getInputLocal
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:498
OpBehavior::evaluateUnary
virtual uintb evaluateUnary(int4 sizeout, int4 sizein, uintb in1) const
Emulate the unary op-code on an input value.
Definition: opbehavior.cc:111
TypeOpIntMult::getOutputToken
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:1254
TypeOpBoolAnd::push
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:535
TypeOpFloatNan::push
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:577
TypeOp::~TypeOp
virtual ~TypeOp(void)
Destructor.
Definition: typeop.cc:161
TypeOpPtradd
Information about the PTRADD op-code.
Definition: typeop.hh:719
TypeOpIntSless::getInputCast
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:872
TypeOp
Associate data-type and behavior information with a specific p-code op-code.
Definition: typeop.hh:37
TypeOpLoad::getOutputToken
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:397
TypeOpFloatDiv::push
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:591
TypeOpFloatAdd
Information about the FLOAT_ADD op-code.
Definition: typeop.hh:581
TypeOp::opflags
uint4 opflags
Cached pcode-op properties for this op-code.
Definition: typeop.hh:46
TypeOpIntScarry::getOperatorName
virtual string getOperatorName(const PcodeOp *op) const
Get the name of the op-code as it should be displayed in context.
Definition: typeop.cc:1038
PrintLanguage::opIntSext
virtual void opIntSext(const PcodeOp *op, const PcodeOp *readOp)=0
Emit a INT_SEXT operator.
TypeOpPtradd::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:1659
TypeOpPtradd::push
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:726
PrintLanguage::opIntEqual
virtual void opIntEqual(const PcodeOp *op)=0
Emit a INT_EQUAL operator.
TypeOpIntLessEqual
Information about the INT_LESSEQUAL op-code.
Definition: typeop.hh:342
TypeOp::addlflags
uint4 addlflags
Additional properties.
Definition: typeop.hh:47
PrintLanguage::opSegmentOp
virtual void opSegmentOp(const PcodeOp *op)=0
Emit a SEGMENTOP operator.
PrintLanguage::opBoolAnd
virtual void opBoolAnd(const PcodeOp *op)=0
Emit a BOOL_AND operator.
TypeOpIntDiv::getInputCast
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:1268
TypeOp::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)=0
Print (for debugging purposes) this specific PcodeOp to the stream.
PrintLanguage::opIntSborrow
virtual void opIntSborrow(const PcodeOp *op)=0
Emit a INT_SBORROW operator.
TypeOpCallother::getOutputLocal
virtual Datatype * getOutputLocal(const PcodeOp *op) const
Find the minimal (or suggested) data-type of an output to this op-code.
Definition: typeop.cc:753
TypeOpIntSrem::push
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:513
TypeOpIntRem::getInputCast
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:1308
TypeOpFloatEqual::TypeOpFloatEqual
TypeOpFloatEqual(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1368
TypeOpIntSright::TypeOpIntSright
TypeOpIntSright(TypeFactory *t)
Constructor.
Definition: typeop.cc:1196
TypeOpIntAdd::push
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:371
TypeOpUnary::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:296
OpBehavior::recoverInputBinary
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
TypeOpFloatTrunc
Information about the FLOAT_TRUNC op-code.
Definition: typeop.hh:644
TypeOpIntAnd::push
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:435
TypeOpIntCarry::TypeOpIntCarry
TypeOpIntCarry(TypeFactory *t)
Constructor.
Definition: typeop.cc:1016
TypeOpFloatAbs::push
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:619
TypeOp::recoverInputBinary
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
PrintLanguage::opIntDiv
virtual void opIntDiv(const PcodeOp *op)=0
Emit a INT_DIV operator.
TypeOpCall::getInputLocal
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:564
TypeOpIntRight::getInputCast
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:1172
TypeOpIntXor::getOutputToken
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:1097
TypeOpFunc
A generic functional operator.
Definition: typeop.hh:190
TypeOp::inherits_sign
@ inherits_sign
Operator token inherits signedness from its inputs.
Definition: typeop.hh:40
TypeOpFloatNotEqual
Information about the FLOAT_NOTEQUAL op-code.
Definition: typeop.hh:553
TypeOpIntSdiv
Information about the INT_SDIV op-code.
Definition: typeop.hh:494
TypeOpPiece::getOperatorName
virtual string getOperatorName(const PcodeOp *op) const
Get the name of the op-code as it should be displayed in context.
Definition: typeop.cc:1561
TypeOpBoolNegate::TypeOpBoolNegate
TypeOpBoolNegate(TypeFactory *t)
Constructor.
Definition: typeop.cc:1340
TypeOpReturn::getInputLocal
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:800
TypeOpIntNegate::TypeOpIntNegate
TypeOpIntNegate(TypeFactory *t)
Constructor.
Definition: typeop.cc:1075
TypeOpCallother::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:695
PrintLanguage::opCallother
virtual void opCallother(const PcodeOp *op)=0
Emit a CALLOTHER operator.
TypeOpIntAdd
Information about the INT_ADD op-code.
Definition: typeop.hh:368
TypeOpIntCarry::getOperatorName
virtual string getOperatorName(const PcodeOp *op) const
Get the name of the op-code as it should be displayed in context.
Definition: typeop.cc:1023
TypeOpFloatLess
Information about the FLOAT_LESS op-code.
Definition: typeop.hh:560
TypeOpStore::TypeOpStore
TypeOpStore(TypeFactory *t)
Constructor.
Definition: typeop.cc:423
TypeOpIntOr::getOutputToken
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:1125
type_metatype
type_metatype
Definition: type.hh:33
TypeOpFloatMult::push
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:598
TypeOpIntOr
Information about the INT_OR op-code.
Definition: typeop.hh:440
TypeOpBoolOr
Information about the BOOL_OR op-code.
Definition: typeop.hh:539
TypeOpPiece::push
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:694
TypeOpCpoolref
Information about the CPOOLREF op-code.
Definition: typeop.hh:762
TypeOpReturn::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:781
TypeOpIndirect::TypeOpIndirect
TypeOpIndirect(TypeFactory *t)
Constructor.
Definition: typeop.cc:1519
TypeOpBinary::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:274
PrintLanguage::opIntLessEqual
virtual void opIntLessEqual(const PcodeOp *op)=0
Emit a INT_LESSEQUAL operator.
TypeOpFloatFloat2Float
Information about the FLOAT_FLOAT2FLOAT op-code.
Definition: typeop.hh:637
TypeOpFloatTrunc::TypeOpFloatTrunc
TypeOpFloatTrunc(TypeFactory *t, const Translate *trans)
Constructor.
Definition: typeop.cc:1466
TypeOpFloatLess::push
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:563
TypeOpIntSext::getOperatorName
virtual string getOperatorName(const PcodeOp *op) const
Get the name of the op-code as it should be displayed in context.
Definition: typeop.cc:969
TypeOp::markExplicitUnsigned
bool markExplicitUnsigned(PcodeOp *op, int4 slot) const
Check if a constant input should be explicitly labeled as unsigned.
Definition: typeop.cc:230
PrintLanguage::opFloatInt2Float
virtual void opFloatInt2Float(const PcodeOp *op)=0
Emit a FLOAT_INT2FLOAT operator.
TypeOpCbranch::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:510
TypeOpBinary::getOutputLocal
virtual Datatype * getOutputLocal(const PcodeOp *op) const
Find the minimal (or suggested) data-type of an output to this op-code.
Definition: typeop.cc:262
TypeOpIntRem
Information about the INT_REM op-code.
Definition: typeop.hh:502
TypeOpIntSless
Information about the INT_SLESS op-code.
Definition: typeop.hh:318
OpBehavior::recoverInputUnary
virtual uintb recoverInputUnary(int4 sizeout, uintb out, int4 sizein) const
Reverse the unary op-code operation, recovering the input value.
Definition: opbehavior.cc:135
TypeOpInsert::TypeOpInsert
TypeOpInsert(TypeFactory *t)
Constructor.
Definition: typeop.cc:1846
TypeOpPtradd::getOutputToken
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:1641
TypeOpIntSdiv::push
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:497
TypeOpFloatFloor
Information about the FLOAT_FLOOR op-code.
Definition: typeop.hh:658
TypeOpNew::getInputCast
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:777
PrintLanguage::opBoolOr
virtual void opBoolOr(const PcodeOp *op)=0
Emit a BOOL_OR operator.
TypeOpBranch::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:484
TypeOpIntSborrow::push
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:403
TypeOpLoad::getInputCast
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:365
TypeOpMulti::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:1501
TypeOpIntXor
Information about the INT_XOR op-code.
Definition: typeop.hh:424
PrintLanguage::opBoolNegate
virtual void opBoolNegate(const PcodeOp *op)=0
Emit a BOOL_NEGATE operator.
PrintLanguage::opCallind
virtual void opCallind(const PcodeOp *op)=0
Emit a CALLIND operator.
TypeOpIntSright
Information about the INT_SRIGHT op-code.
Definition: typeop.hh:467
TypeOpCallind::printRaw
virtual void printRaw(ostream &s, const PcodeOp *op)
Print (for debugging purposes) this specific PcodeOp to the stream.
Definition: typeop.cc:668