|
decompiler
1.0.0
|
Simplify INT_SLESS applied to 0 or -1. More...
Public Member Functions | |
| virtual Rule * | clone (const ActionGroupList &grouplist) const |
| Clone the Rule. More... | |
| virtual void | getOpList (vector< uint4 > &oplist) const |
| List of op codes this rule operates on. More... | |
| virtual int4 | applyOp (PcodeOp *op, Funcdata &data) |
| Attempt to apply this Rule. More... | |
Public Member Functions inherited from Rule | |
| Rule (const string &g, uint4 fl, const string &nm) | |
| Construct given group, properties name. More... | |
| bool | checkActionBreak (void) |
| Check if an action breakpoint is turned on. More... | |
| virtual void | reset (Funcdata &data) |
| Reset this Rule. More... | |
| virtual void | resetStats (void) |
| Reset Rule statistics. More... | |
| virtual void | printStatistics (ostream &s) const |
| Print statistics for this Rule. More... | |
Static Private Member Functions | |
| static Varnode * | getHiBit (PcodeOp *op) |
| Get the piece containing the sign-bit. More... | |
Additional Inherited Members | |
Public Types inherited from Rule | |
| enum | typeflags { type_disable = 1, rule_debug = 2, warnings_on = 4, warnings_given = 8 } |
| Properties associated with a Rule. More... | |
Simplify INT_SLESS applied to 0 or -1.
Forms include:
0 s< V * -1 => V s< 0V * -1 s< 0 => 0 s< V-1 s< SUB(V,#hi) => -1 s< VSUB(V,#hi) s< 0 => V s< 0-1 s< ~V => V s< 0~V s< 0 => -1 s< V(V & 0xf000) s< 0 => V s< 0-1 s< (V & 0xf000) => -1 s< V -CONCAT(V,W) s< 0 => V s< 0 --1 s< CONCAT(V,W) => -1 s> V`There is a second set of forms where one side of the comparison is built out of a high and low piece, where the high piece determines the sign bit:
-1 s< (hi + lo) => -1 s< hi(hi + lo) s< 0 => hi s< 0 Attempt to apply this Rule.
This method contains the main logic for applying the Rule. It must use a given PcodeOp as the point at which the Rule applies. If it does apply, changes are made directly to the function and 1 (non-zero) is returned, otherwise 0 is returned.
Reimplemented from Rule.
References calc_mask(), CPUI_INT_AND, CPUI_INT_EQUAL, CPUI_INT_MULT, CPUI_INT_NEGATE, CPUI_INT_NOTEQUAL, CPUI_PIECE, CPUI_SUBPIECE, getHiBit(), Varnode::loneDescend(), Funcdata::newConstant(), Funcdata::opSetInput(), and Funcdata::opSetOpcode().
|
inlinevirtual |
Get the piece containing the sign-bit.
If the given PcodeOp pieces together 2 Varnodes only one of which is determining the high bit, return that Varnode.
| op | is the given PcodeOp |
References calc_mask(), CPUI_INT_ADD, CPUI_INT_OR, and CPUI_INT_XOR.
Referenced by applyOp().
|
virtual |
List of op codes this rule operates on.
Populate the given array with all possible OpCodes this Rule might apply to. By default, this method returns all possible OpCodes
| oplist | is the array to populate |
Reimplemented from Rule.
References CPUI_INT_SLESS.
1.8.17