My Project
opbehavior.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 #ifndef __CPUI_OPBEHAVIOR__
19 #define __CPUI_OPBEHAVIOR__
20 
21 #include "error.hh"
22 #include "opcodes.hh"
23 
24 class Translate; // Forward declaration
25 
28 struct EvaluationError : public LowlevelError {
29  EvaluationError(const string &s) : LowlevelError(s) {}
30 };
31 
42 class OpBehavior {
43  OpCode opcode;
44  bool isunary;
45  bool isspecial;
46 public:
47  OpBehavior(OpCode opc,bool isun);
48 
49  OpBehavior(OpCode opc,bool isun,bool isspec);
50 
51  virtual ~OpBehavior(void) {}
52 
54  OpCode getOpcode(void) const;
55 
57  bool isSpecial(void) const;
58 
60  bool isUnary(void) const;
61 
63  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
64 
66  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
67 
69  virtual uintb recoverInputBinary(int4 slot,int4 sizeout,uintb out,int4 sizein,uintb in) const;
70 
72  virtual uintb recoverInputUnary(int4 sizeout,uintb out,int4 sizein) const;
73 
74  static void registerInstructions(vector<OpBehavior *> &inst,const Translate *trans);
75 };
76 
80 inline OpBehavior::OpBehavior(OpCode opc,bool isun)
81 
82 {
83  opcode = opc;
84  isunary = isun;
85  isspecial = false;
86 }
87 
92 inline OpBehavior::OpBehavior(OpCode opc,bool isun,bool isspec)
93 
94 {
95  opcode = opc;
96  isunary = isun;
97  isspecial = isspec;
98 }
99 
103 inline OpCode OpBehavior::getOpcode(void) const {
104  return opcode;
105 }
106 
110 inline bool OpBehavior::isSpecial(void) const {
111  return isspecial;
112 }
113 
116 inline bool OpBehavior::isUnary(void) const {
117  return isunary;
118 }
119 
120 // A class for each opcode
121 
123 class OpBehaviorCopy : public OpBehavior {
124 public:
126  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
127  virtual uintb recoverInputUnary(int4 sizeout,uintb out,int4 sizein) const;
128 };
129 
131 class OpBehaviorEqual : public OpBehavior {
132 public:
134  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
135 };
136 
139 public:
141  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
142 };
143 
146 public:
148  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
149 };
150 
153 public:
155  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
156 };
157 
160 public:
162  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
163 };
164 
167 public:
169  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
170 };
171 
174 public:
176  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
177  virtual uintb recoverInputUnary(int4 sizeout,uintb out,int4 sizein) const;
178 };
179 
182 public:
184  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
185  virtual uintb recoverInputUnary(int4 sizeout,uintb out,int4 sizein) const;
186 };
187 
189 class OpBehaviorIntAdd : public OpBehavior {
190 public:
192  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
193  virtual uintb recoverInputBinary(int4 slot,int4 sizeout,uintb out,int4 sizein,uintb in) const;
194 };
195 
197 class OpBehaviorIntSub : public OpBehavior {
198 public:
200  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
201  virtual uintb recoverInputBinary(int4 slot,int4 sizeout,uintb out,int4 sizein,uintb in) const;
202 };
203 
206 public:
208  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
209 };
210 
213 public:
215  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
216 };
217 
220 public:
222  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
223 };
224 
227 public:
229  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
230 };
231 
234 public:
236  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
237 };
238 
240 class OpBehaviorIntXor : public OpBehavior {
241 public:
243  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
244 };
245 
247 class OpBehaviorIntAnd : public OpBehavior {
248 public:
250  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
251 };
252 
254 class OpBehaviorIntOr : public OpBehavior {
255 public:
257  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
258 };
259 
262 public:
264  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
265  virtual uintb recoverInputBinary(int4 slot,int4 sizeout,uintb out,int4 sizein,uintb in) const;
266 };
267 
270 public:
272  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
273  virtual uintb recoverInputBinary(int4 slot,int4 sizeout,uintb out,int4 sizein,uintb in) const;
274 };
275 
278 public:
280  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
281  virtual uintb recoverInputBinary(int4 slot,int4 sizeout,uintb out,int4 sizein,uintb in) const;
282 };
283 
286 public:
288  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
289 };
290 
292 class OpBehaviorIntDiv : public OpBehavior {
293 public:
295  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
296 };
297 
300 public:
302  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
303 };
304 
306 class OpBehaviorIntRem : public OpBehavior {
307 public:
309  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
310 };
311 
314 public:
316  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
317 };
318 
321 public:
323  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
324 };
325 
328 public:
330  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
331 };
332 
335 public:
337  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
338 };
339 
341 class OpBehaviorBoolOr : public OpBehavior {
342 public:
344  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
345 };
346 
349  const Translate *translate;
350 public:
351  OpBehaviorFloatEqual(const Translate *trans): OpBehavior(CPUI_FLOAT_EQUAL,false) { translate = trans; }
352  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
353 };
354 
357  const Translate *translate;
358 public:
359  OpBehaviorFloatNotEqual(const Translate *trans): OpBehavior(CPUI_FLOAT_NOTEQUAL,false) { translate = trans; }
360  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
361 };
362 
365  const Translate *translate;
366 public:
367  OpBehaviorFloatLess(const Translate *trans) : OpBehavior(CPUI_FLOAT_LESS,false) { translate = trans; }
368  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
369 };
370 
373  const Translate *translate;
374 public:
375  OpBehaviorFloatLessEqual(const Translate *trans) : OpBehavior(CPUI_FLOAT_LESSEQUAL,false) { translate = trans; }
376  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
377 };
378 
381  const Translate *translate;
382 public:
383  OpBehaviorFloatNan(const Translate *trans) : OpBehavior(CPUI_FLOAT_NAN,true) { translate = trans; }
384  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
385 };
386 
389  const Translate *translate;
390 public:
391  OpBehaviorFloatAdd(const Translate *trans) : OpBehavior(CPUI_FLOAT_ADD,false) { translate = trans; }
392  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
393 };
394 
397  const Translate *translate;
398 public:
399  OpBehaviorFloatDiv(const Translate *trans) : OpBehavior(CPUI_FLOAT_DIV,false) { translate = trans; }
400  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
401 };
402 
405  const Translate *translate;
406 public:
407  OpBehaviorFloatMult(const Translate *trans) : OpBehavior(CPUI_FLOAT_MULT,false) { translate = trans; }
408  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
409 };
410 
413  const Translate *translate;
414 public:
415  OpBehaviorFloatSub(const Translate *trans) : OpBehavior(CPUI_FLOAT_SUB,false) { translate = trans; }
416  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
417 };
418 
421  const Translate *translate;
422 public:
423  OpBehaviorFloatNeg(const Translate *trans) : OpBehavior(CPUI_FLOAT_NEG,true) { translate = trans; }
424  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
425 };
426 
429  const Translate *translate;
430 public:
431  OpBehaviorFloatAbs(const Translate *trans) : OpBehavior(CPUI_FLOAT_ABS,true) { translate = trans; }
432  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
433 };
434 
437  const Translate *translate;
438 public:
439  OpBehaviorFloatSqrt(const Translate *trans) : OpBehavior(CPUI_FLOAT_SQRT,true) { translate = trans; }
440  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
441 };
442 
445  const Translate *translate;
446 public:
447  OpBehaviorFloatInt2Float(const Translate *trans) : OpBehavior(CPUI_FLOAT_INT2FLOAT,true) { translate = trans; }
448  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
449 };
450 
453  const Translate *translate;
454 public:
455  OpBehaviorFloatFloat2Float(const Translate *trans) : OpBehavior(CPUI_FLOAT_FLOAT2FLOAT,true) { translate = trans; }
456  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
457 };
458 
461  const Translate *translate;
462 public:
463  OpBehaviorFloatTrunc(const Translate *trans) : OpBehavior(CPUI_FLOAT_TRUNC,true) { translate = trans; }
464  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
465 };
466 
469  const Translate *translate;
470 public:
471  OpBehaviorFloatCeil(const Translate *trans) : OpBehavior(CPUI_FLOAT_CEIL,true) { translate = trans; }
472  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
473 };
474 
477  const Translate *translate;
478 public:
479  OpBehaviorFloatFloor(const Translate *trans) : OpBehavior(CPUI_FLOAT_FLOOR,true) { translate = trans; }
480  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
481 };
482 
485  const Translate *translate;
486 public:
487  OpBehaviorFloatRound(const Translate *trans) : OpBehavior(CPUI_FLOAT_ROUND,true) { translate = trans; }
488  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
489 };
490 
492 class OpBehaviorPiece : public OpBehavior {
493 public:
495  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
496 };
497 
500 public:
502  virtual uintb evaluateBinary(int4 sizeout,int4 sizein,uintb in1,uintb in2) const;
503 };
504 
507 public:
509  virtual uintb evaluateUnary(int4 sizeout,int4 sizein,uintb in1) const;
510 };
511 
512 #endif
CPUI_INT_AND behavior.
Definition: opbehavior.hh:247
CPUI_INT_NEGATE behavior.
Definition: opbehavior.hh:233
Concatenate.
Definition: opcodes.hh:114
Convert between different floating-point sizes.
Definition: opcodes.hh:102
OpBehaviorFloatLessEqual(const Translate *trans)
Constructor.
Definition: opbehavior.hh:375
Convert an integer to a floating-point.
Definition: opcodes.hh:101
OpBehaviorFloatFloat2Float(const Translate *trans)
Constructor.
Definition: opbehavior.hh:455
OpBehaviorIntSborrow(void)
Constructor.
Definition: opbehavior.hh:221
CPUI_FLOAT_DIV behavior.
Definition: opbehavior.hh:396
Floating-point absolute value (abs)
Definition: opcodes.hh:98
Floating-point comparison, equality (==)
Definition: opcodes.hh:86
Test for signed borrow.
Definition: opcodes.hh:64
Integer comparison, in-equality (!=)
Definition: opcodes.hh:52
CPUI_FLOAT_NAN behavior.
Definition: opbehavior.hh:380
OpBehaviorEqual(void)
Constructor.
Definition: opbehavior.hh:133
Boolean or (||)
Definition: opcodes.hh:82
OpBehaviorIntXor(void)
Constructor.
Definition: opbehavior.hh:242
OpBehaviorNotEqual(void)
Constructor.
Definition: opbehavior.hh:140
CPUI_FLOAT_SUB behavior.
Definition: opbehavior.hh:412
OpCode
The op-code defining a specific p-code operation (PcodeOp)
Definition: opcodes.hh:35
OpBehaviorBoolNegate(void)
Constructor.
Definition: opbehavior.hh:322
CPUI_FLOAT_NOTEQUAL behavior.
Definition: opbehavior.hh:356
Boolean exclusive-or (^^)
Definition: opcodes.hh:80
CPUI_FLOAT_CEIL behavior.
Definition: opbehavior.hh:468
CPUI_INT_ZEXT behavior.
Definition: opbehavior.hh:173
OpBehaviorIntLessEqual(void)
Constructor.
Definition: opbehavior.hh:168
CPUI_INT_REM behavior.
Definition: opbehavior.hh:306
CPUI_FLOAT_FLOAT2FLOAT behavior.
Definition: opbehavior.hh:452
Boolean and (&&)
Definition: opcodes.hh:81
OpBehaviorFloatTrunc(const Translate *trans)
Constructor.
Definition: opbehavior.hh:463
Zero extension.
Definition: opcodes.hh:58
OpBehaviorIntRem(void)
Constructor.
Definition: opbehavior.hh:308
Integer division, signed (/)
Definition: opcodes.hh:75
Logical/bitwise exclusive-or (^)
Definition: opcodes.hh:67
CPUI_INT_RIGHT behavior.
Definition: opbehavior.hh:269
CPUI_INT_SDIV behavior.
Definition: opbehavior.hh:299
CPUI_INT_SREM behavior.
Definition: opbehavior.hh:313
Floating-point comparison, less-than (<)
Definition: opcodes.hh:88
OpBehaviorIntMult(void)
Constructor.
Definition: opbehavior.hh:287
CPUI_SUBPIECE behavior.
Definition: opbehavior.hh:499
CPUI_FLOAT_TRUNC behavior.
Definition: opbehavior.hh:460
Integer comparison, signed less-than-or-equal (<=)
Definition: opcodes.hh:54
CPUI_INT_SLESSEQUAL behavior.
Definition: opbehavior.hh:152
CPUI_FLOAT_LESS behavior.
Definition: opbehavior.hh:364
OpBehaviorFloatEqual(const Translate *trans)
Constructor.
Definition: opbehavior.hh:351
OpBehaviorFloatLess(const Translate *trans)
Constructor.
Definition: opbehavior.hh:367
CPUI_INT_EQUAL behavior.
Definition: opbehavior.hh:131
CPUI_BOOL_XOR behavior.
Definition: opbehavior.hh:327
OpBehaviorFloatAdd(const Translate *trans)
Constructor.
Definition: opbehavior.hh:391
CPUI_INT_OR behavior.
Definition: opbehavior.hh:254
Sign extension.
Definition: opcodes.hh:59
OpBehaviorFloatAbs(const Translate *trans)
Constructor.
Definition: opbehavior.hh:431
Round towards nearest.
Definition: opcodes.hh:106
CPUI_INT_SBORROW behavior.
Definition: opbehavior.hh:219
OpBehaviorIntLess(void)
Constructor.
Definition: opbehavior.hh:161
OpBehaviorFloatMult(const Translate *trans)
Constructor.
Definition: opbehavior.hh:407
OpBehaviorIntCarry(void)
Constructor.
Definition: opbehavior.hh:207
OpBehaviorIntSub(void)
Constructor.
Definition: opbehavior.hh:199
OpBehaviorPopcount(void)
Constructor.
Definition: opbehavior.hh:508
CPUI_FLOAT_ADD behavior.
Definition: opbehavior.hh:388
OpBehaviorFloatInt2Float(const Translate *trans)
Constructor.
Definition: opbehavior.hh:447
OpBehavior(OpCode opc, bool isun)
A behavior constructor.
Definition: opbehavior.hh:80
CPUI_INT_XOR behavior.
Definition: opbehavior.hh:240
OpBehaviorIntRight(void)
Constructor.
Definition: opbehavior.hh:271
OpBehaviorFloatSqrt(const Translate *trans)
Constructor.
Definition: opbehavior.hh:439
Floating-point comparison, less-than-or-equal (<=)
Definition: opcodes.hh:89
CPUI_FLOAT_INT2FLOAT behavior.
Definition: opbehavior.hh:444
CPUI_INT_SEXT behavior.
Definition: opbehavior.hh:181
CPUI_INT_SRIGHT behavior.
Definition: opbehavior.hh:277
Round towards +infinity.
Definition: opcodes.hh:104
bool isSpecial(void) const
Check if this is a special operator.
Definition: opbehavior.hh:110
CPUI_POPCOUNT behavior.
Definition: opbehavior.hh:506
Class encapsulating the action/behavior of specific pcode opcodes.
Definition: opbehavior.hh:42
OpBehaviorBoolXor(void)
Constructor.
Definition: opbehavior.hh:329
OpBehaviorFloatNeg(const Translate *trans)
Constructor.
Definition: opbehavior.hh:423
OpBehaviorIntSless(void)
Constructor.
Definition: opbehavior.hh:147
Test for signed carry.
Definition: opcodes.hh:63
All the individual p-code operations.
CPUI_COPY behavior.
Definition: opbehavior.hh:123
Test for unsigned carry.
Definition: opcodes.hh:62
CPUI_BOOL_AND behavior.
Definition: opbehavior.hh:334
CPUI_FLOAT_MULT behavior.
Definition: opbehavior.hh:404
Copy one operand to another.
Definition: opcodes.hh:36
CPUI_FLOAT_ABS behavior.
Definition: opbehavior.hh:428
CPUI_INT_MULT behavior.
Definition: opbehavior.hh:285
OpBehaviorIntSext(void)
Constructor.
Definition: opbehavior.hh:183
CPUI_INT_LEFT behavior.
Definition: opbehavior.hh:261
Count the 1-bits.
Definition: opcodes.hh:125
Floating-point negation (-)
Definition: opcodes.hh:97
CPUI_INT_NOTEQUAL behavior.
Definition: opbehavior.hh:138
Round towards -infinity.
Definition: opcodes.hh:105
CPUI_INT_LESSEQUAL behavior.
Definition: opbehavior.hh:166
Integer comparison, unsigned less-than (<)
Definition: opcodes.hh:55
The interface to a translation engine for a processor.
Definition: translate.hh:293
Not-a-number test (NaN)
Definition: opcodes.hh:91
Integer comparison, signed less-than (<)
Definition: opcodes.hh:53
Boolean negate (!)
Definition: opcodes.hh:79
Floating-point comparison, in-equality (!=)
Definition: opcodes.hh:87
CPUI_INT_LESS behavior.
Definition: opbehavior.hh:159
OpBehaviorBoolAnd(void)
Constructor.
Definition: opbehavior.hh:336
Truncate.
Definition: opcodes.hh:115
CPUI_PIECE behavior.
Definition: opbehavior.hh:492
EvaluationError(const string &s)
Initialize the error with an explanatory string.
Definition: opbehavior.hh:29
Right shift, logical (>>)
Definition: opcodes.hh:71
OpBehaviorIntAdd(void)
Constructor.
Definition: opbehavior.hh:191
The lowest level error generated by the decompiler.
Definition: error.hh:44
Round towards zero.
Definition: opcodes.hh:103
OpBehaviorFloatNotEqual(const Translate *trans)
Constructor.
Definition: opbehavior.hh:359
bool isUnary(void) const
Check if operator is unary.
Definition: opbehavior.hh:116
OpBehaviorIntDiv(void)
Constructor.
Definition: opbehavior.hh:294
OpBehaviorPiece(void)
Constructor.
Definition: opbehavior.hh:494
Definition: opbehavior.hh:28
Floating-point subtraction (-)
Definition: opcodes.hh:96
CPUI_INT_SLESS behavior.
Definition: opbehavior.hh:145
CPUI_INT_SUB behavior.
Definition: opbehavior.hh:197
CPUI_FLOAT_LESSEQUAL behavior.
Definition: opbehavior.hh:372
Base class for error handling facilities.
OpBehaviorIntSlessEqual(void)
Constructor.
Definition: opbehavior.hh:154
OpBehaviorIntOr(void)
Constructor.
Definition: opbehavior.hh:256
OpBehaviorInt2Comp(void)
Constructor.
Definition: opbehavior.hh:228
Integer comparison, unsigned less-than-or-equal (<=)
Definition: opcodes.hh:57
OpBehaviorFloatFloor(const Translate *trans)
Constructor.
Definition: opbehavior.hh:479
Integer division, unsigned (/)
Definition: opcodes.hh:74
CPUI_BOOL_NEGATE behavior.
Definition: opbehavior.hh:320
CPUI_FLOAT_NEG behavior.
Definition: opbehavior.hh:420
CPUI_INT_2COMP behavior.
Definition: opbehavior.hh:226
OpBehaviorFloatNan(const Translate *trans)
Constructor.
Definition: opbehavior.hh:383
Addition, signed or unsigned (+)
Definition: opcodes.hh:60
Floating-point addition (+)
Definition: opcodes.hh:93
Logical/bitwise negation (~)
Definition: opcodes.hh:66
Remainder/modulo, signed (%)
Definition: opcodes.hh:77
Subtraction, signed or unsigned (-)
Definition: opcodes.hh:61
CPUI_INT_CARRY behavior.
Definition: opbehavior.hh:205
CPUI_FLOAT_SQRT behavior.
Definition: opbehavior.hh:436
OpBehaviorIntLeft(void)
Constructor.
Definition: opbehavior.hh:263
OpBehaviorCopy(void)
Constructor.
Definition: opbehavior.hh:125
OpBehaviorIntZext(void)
Constructor.
Definition: opbehavior.hh:175
CPUI_INT_DIV behavior.
Definition: opbehavior.hh:292
Right shift, arithmetic (>>)
Definition: opcodes.hh:72
OpBehaviorIntSright(void)
Constructor.
Definition: opbehavior.hh:279
OpBehaviorFloatSub(const Translate *trans)
Constructor.
Definition: opbehavior.hh:415
OpBehaviorIntAnd(void)
Constructor.
Definition: opbehavior.hh:249
Integer comparison, equality (==)
Definition: opcodes.hh:51
OpBehaviorFloatCeil(const Translate *trans)
Constructor.
Definition: opbehavior.hh:471
OpBehaviorIntScarry(void)
Constructor.
Definition: opbehavior.hh:214
OpBehaviorFloatDiv(const Translate *trans)
Constructor.
Definition: opbehavior.hh:399
OpCode getOpcode(void) const
Get the opcode for this pcode operation.
Definition: opbehavior.hh:103
CPUI_FLOAT_ROUND behavior.
Definition: opbehavior.hh:484
OpBehaviorBoolOr(void)
Constructor.
Definition: opbehavior.hh:343
OpBehaviorIntSrem(void)
Constructor.
Definition: opbehavior.hh:315
Floating-point division (/)
Definition: opcodes.hh:94
Remainder/modulo, unsigned (%)
Definition: opcodes.hh:76
Twos complement.
Definition: opcodes.hh:65
Floating-point multiplication (*)
Definition: opcodes.hh:95
Integer multiplication, signed and unsigned (*)
Definition: opcodes.hh:73
Logical/bitwise or (|)
Definition: opcodes.hh:69
Logical/bitwise and (&)
Definition: opcodes.hh:68
Floating-point square root (sqrt)
Definition: opcodes.hh:99
CPUI_INT_ADD behavior.
Definition: opbehavior.hh:189
OpBehaviorIntNegate(void)
Constructor.
Definition: opbehavior.hh:235
CPUI_BOOL_OR behavior.
Definition: opbehavior.hh:341
OpBehaviorIntSdiv(void)
Constructor.
Definition: opbehavior.hh:301
CPUI_FLOAT_EQUAL behavior.
Definition: opbehavior.hh:348
CPUI_FLOAT_FLOOR behavior.
Definition: opbehavior.hh:476
CPUI_INT_SCARRY behavior.
Definition: opbehavior.hh:212
Left shift (<<)
Definition: opcodes.hh:70
OpBehaviorSubpiece(void)
Constructor.
Definition: opbehavior.hh:501
OpBehaviorFloatRound(const Translate *trans)
Constructor.
Definition: opbehavior.hh:487