Update div and rem emu code

This commit is contained in:
de4dot 2011-10-17 20:19:17 +02:00
parent 778bc7e940
commit 122878a094
2 changed files with 20 additions and 4 deletions

View File

@ -73,6 +73,10 @@ namespace de4dot.blocks.cflow {
return hasValue(0);
}
public bool isNonZero() {
return (value & validMask) != 0;
}
public bool hasValue(int value) {
return allBitsValid() && this.value == value;
}
@ -224,6 +228,8 @@ namespace de4dot.blocks.cflow {
return createUnknown();
}
}
if (ReferenceEquals(a, b) && a.isNonZero())
return new Int32Value(1);
if (b.hasValue(1))
return a;
return createUnknown();
@ -238,6 +244,8 @@ namespace de4dot.blocks.cflow {
return createUnknown();
}
}
if (ReferenceEquals(a, b) && a.isNonZero())
return new Int32Value(1);
if (b.hasValue(1))
return a;
return createUnknown();
@ -252,7 +260,7 @@ namespace de4dot.blocks.cflow {
return createUnknown();
}
}
if (b.hasValue(1))
if ((ReferenceEquals(a, b) && a.isNonZero()) || b.hasValue(1))
return new Int32Value(0);
return createUnknown();
}
@ -266,7 +274,7 @@ namespace de4dot.blocks.cflow {
return createUnknown();
}
}
if (b.hasValue(1))
if ((ReferenceEquals(a, b) && a.isNonZero()) || b.hasValue(1))
return new Int32Value(0);
return createUnknown();
}

View File

@ -61,6 +61,10 @@ namespace de4dot.blocks.cflow {
return hasValue(0);
}
public bool isNonZero() {
return ((ulong)value & validMask) != 0;
}
public bool hasValue(long value) {
return allBitsValid() && this.value == value;
}
@ -139,6 +143,8 @@ namespace de4dot.blocks.cflow {
return createUnknown();
}
}
if (ReferenceEquals(a, b) && a.isNonZero())
return new Int64Value(1);
if (b.hasValue(1))
return a;
return createUnknown();
@ -153,6 +159,8 @@ namespace de4dot.blocks.cflow {
return createUnknown();
}
}
if (ReferenceEquals(a, b) && a.isNonZero())
return new Int64Value(1);
if (b.hasValue(1))
return a;
return createUnknown();
@ -167,7 +175,7 @@ namespace de4dot.blocks.cflow {
return createUnknown();
}
}
if (b.hasValue(1))
if ((ReferenceEquals(a, b) && a.isNonZero()) || b.hasValue(1))
return new Int64Value(0);
return createUnknown();
}
@ -181,7 +189,7 @@ namespace de4dot.blocks.cflow {
return createUnknown();
}
}
if (b.hasValue(1))
if ((ReferenceEquals(a, b) && a.isNonZero()) || b.hasValue(1))
return new Int64Value(0);
return createUnknown();
}