mirror of
https://github.com/Z3Prover/z3
synced 2025-11-08 15:25:07 +00:00
fixup bv operators
Signed-off-by: Nikolaj Bjorner <nbjorner@microsoft.com>
This commit is contained in:
parent
919ac515bc
commit
88269edd4b
3 changed files with 43 additions and 10 deletions
|
|
@ -1600,8 +1600,13 @@ br_status arith_rewriter::mk_lshr_core(unsigned sz, expr* arg1, expr* arg2, expr
|
|||
N = rational::power_of_two(sz);
|
||||
if (is_num_x)
|
||||
x = mod(x, N);
|
||||
if (is_num_y && y >= sz) {
|
||||
result = m_util.mk_int(0);
|
||||
return BR_DONE;
|
||||
}
|
||||
if (is_num_y)
|
||||
y = mod(y, N);
|
||||
|
||||
if (is_num_x && x == 0) {
|
||||
result = m_util.mk_int(0);
|
||||
return BR_DONE;
|
||||
|
|
@ -1619,6 +1624,13 @@ br_status arith_rewriter::mk_lshr_core(unsigned sz, expr* arg1, expr* arg2, expr
|
|||
}
|
||||
return BR_DONE;
|
||||
}
|
||||
|
||||
if (is_num_y) {
|
||||
result = m_util.mk_mod(arg1, m_util.mk_int(N));
|
||||
//result = arg1; // unsound
|
||||
result = m_util.mk_idiv(result, m_util.mk_int(rational::power_of_two(y.get_unsigned())));
|
||||
return BR_DONE;
|
||||
}
|
||||
return BR_FAILED;
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue