Update div and rem emu code
This commit is contained in:
parent
778bc7e940
commit
122878a094
|
@ -73,6 +73,10 @@ namespace de4dot.blocks.cflow {
|
||||||
return hasValue(0);
|
return hasValue(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool isNonZero() {
|
||||||
|
return (value & validMask) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
public bool hasValue(int value) {
|
public bool hasValue(int value) {
|
||||||
return allBitsValid() && this.value == value;
|
return allBitsValid() && this.value == value;
|
||||||
}
|
}
|
||||||
|
@ -224,6 +228,8 @@ namespace de4dot.blocks.cflow {
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ReferenceEquals(a, b) && a.isNonZero())
|
||||||
|
return new Int32Value(1);
|
||||||
if (b.hasValue(1))
|
if (b.hasValue(1))
|
||||||
return a;
|
return a;
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
|
@ -238,6 +244,8 @@ namespace de4dot.blocks.cflow {
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ReferenceEquals(a, b) && a.isNonZero())
|
||||||
|
return new Int32Value(1);
|
||||||
if (b.hasValue(1))
|
if (b.hasValue(1))
|
||||||
return a;
|
return a;
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
|
@ -252,7 +260,7 @@ namespace de4dot.blocks.cflow {
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (b.hasValue(1))
|
if ((ReferenceEquals(a, b) && a.isNonZero()) || b.hasValue(1))
|
||||||
return new Int32Value(0);
|
return new Int32Value(0);
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
}
|
}
|
||||||
|
@ -266,7 +274,7 @@ namespace de4dot.blocks.cflow {
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (b.hasValue(1))
|
if ((ReferenceEquals(a, b) && a.isNonZero()) || b.hasValue(1))
|
||||||
return new Int32Value(0);
|
return new Int32Value(0);
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
}
|
}
|
||||||
|
|
|
@ -61,6 +61,10 @@ namespace de4dot.blocks.cflow {
|
||||||
return hasValue(0);
|
return hasValue(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public bool isNonZero() {
|
||||||
|
return ((ulong)value & validMask) != 0;
|
||||||
|
}
|
||||||
|
|
||||||
public bool hasValue(long value) {
|
public bool hasValue(long value) {
|
||||||
return allBitsValid() && this.value == value;
|
return allBitsValid() && this.value == value;
|
||||||
}
|
}
|
||||||
|
@ -139,6 +143,8 @@ namespace de4dot.blocks.cflow {
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ReferenceEquals(a, b) && a.isNonZero())
|
||||||
|
return new Int64Value(1);
|
||||||
if (b.hasValue(1))
|
if (b.hasValue(1))
|
||||||
return a;
|
return a;
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
|
@ -153,6 +159,8 @@ namespace de4dot.blocks.cflow {
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (ReferenceEquals(a, b) && a.isNonZero())
|
||||||
|
return new Int64Value(1);
|
||||||
if (b.hasValue(1))
|
if (b.hasValue(1))
|
||||||
return a;
|
return a;
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
|
@ -167,7 +175,7 @@ namespace de4dot.blocks.cflow {
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (b.hasValue(1))
|
if ((ReferenceEquals(a, b) && a.isNonZero()) || b.hasValue(1))
|
||||||
return new Int64Value(0);
|
return new Int64Value(0);
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
}
|
}
|
||||||
|
@ -181,7 +189,7 @@ namespace de4dot.blocks.cflow {
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (b.hasValue(1))
|
if ((ReferenceEquals(a, b) && a.isNonZero()) || b.hasValue(1))
|
||||||
return new Int64Value(0);
|
return new Int64Value(0);
|
||||||
return createUnknown();
|
return createUnknown();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user