@@ -25,6 +25,17 @@ bvt boolbvt::convert_bitwise(const exprt &expr)
25
25
expr.id ()==ID_bitnand || expr.id ()==ID_bitnor ||
26
26
expr.id ()==ID_bitxnor)
27
27
{
28
+ std::function<literalt (literalt, literalt)> f;
29
+
30
+ if (expr.id () == ID_bitand || expr.id () == ID_bitnand)
31
+ f = [this ](literalt a, literalt b) { return prop.land (a, b); };
32
+ else if (expr.id () == ID_bitor || expr.id () == ID_bitnor)
33
+ f = [this ](literalt a, literalt b) { return prop.lor (a, b); };
34
+ else if (expr.id () == ID_bitxor || expr.id () == ID_bitxnor)
35
+ f = [this ](literalt a, literalt b) { return prop.lxor (a, b); };
36
+ else
37
+ UNIMPLEMENTED;
38
+
28
39
bvt bv;
29
40
bv.resize (width);
30
41
@@ -38,25 +49,19 @@ bvt boolbvt::convert_bitwise(const exprt &expr)
38
49
{
39
50
for (std::size_t i=0 ; i<width; i++)
40
51
{
41
- if (expr.id ()==ID_bitand)
42
- bv[i]=prop.land (bv[i], op[i]);
43
- else if (expr.id ()==ID_bitor)
44
- bv[i]=prop.lor (bv[i], op[i]);
45
- else if (expr.id ()==ID_bitxor)
46
- bv[i]=prop.lxor (bv[i], op[i]);
47
- else if (expr.id ()==ID_bitnand)
48
- bv[i]=prop.lnand (bv[i], op[i]);
49
- else if (expr.id ()==ID_bitnor)
50
- bv[i]=prop.lnor (bv[i], op[i]);
51
- else if (expr.id ()==ID_bitxnor)
52
- bv[i]=prop.lequal (bv[i], op[i]);
53
- else
54
- UNIMPLEMENTED;
52
+ bv[i] = f (bv[i], op[i]);
55
53
}
56
54
}
57
55
}
58
56
59
- return bv;
57
+ if (
58
+ expr.id () == ID_bitnand || expr.id () == ID_bitnor ||
59
+ expr.id () == ID_bitxnor)
60
+ {
61
+ return bv_utils.inverted (bv);
62
+ }
63
+ else
64
+ return bv;
60
65
}
61
66
62
67
UNIMPLEMENTED;
0 commit comments