6uint32_t
pow_num(uint32_t base, uint32_t exp)
9 for (uint32_t i = 0; i < exp; i++) {
18 uint32_t BIT_SIZE = 8;
24 for (uint32_t i = 1; i < BIT_SIZE + 1; i++) {
26 auto mask =
pow_num(2, BIT_SIZE - i);
28 auto b = (v0 & mask) >> (BIT_SIZE - i);
29 res = (r2 * two *
b) + (1 -
b) * r2;
36 auto pow2_v1 =
pow2_8(v1, solver);
42 auto pow2_v1 =
pow2_8(v1, solver);
43 auto res = v0 / pow2_v1;
49 auto shifted =
shl(v0, v1, solver);
50 auto res = shifted.truncate(63);
56 auto shifted =
shl(v0, v1, solver);
57 auto res = shifted.truncate(31);
67 auto res_sign_bit = sign_bit_v0 ^ sign_bit_v1;
68 res_sign_bit <<= bit_size - 1;
69 auto abs_value_v0 = v0.
truncate(bit_size - 2);
70 auto abs_value_v1 = v1.
truncate(bit_size - 2);
71 auto abs_res = abs_value_v0 / abs_value_v1;
80 (eq1 | eq2).assert_term();
Symbolic term element class.
STerm extract_bit(const uint32_t &bit_index)
Returns ith bit of variable.
STerm truncate(const uint32_t &to_size)
Returns last to_size bits of variable.
smt_circuit::STerm shr(smt_circuit::STerm v0, smt_circuit::STerm v1, smt_solver::Solver *solver)
Right shift operation.
smt_circuit::STerm idiv(smt_circuit::STerm v0, smt_circuit::STerm v1, uint32_t bit_size, smt_solver::Solver *solver)
Signed division in noir-style.
smt_circuit::STerm shl(smt_circuit::STerm v0, smt_circuit::STerm v1, smt_solver::Solver *solver)
Left shift operation without truncation.
uint32_t pow_num(uint32_t base, uint32_t exp)
smt_circuit::STerm shl32(smt_circuit::STerm v0, smt_circuit::STerm v1, smt_solver::Solver *solver)
Left shift operation with 32-bit truncation.
smt_circuit::STerm shl64(smt_circuit::STerm v0, smt_circuit::STerm v1, smt_solver::Solver *solver)
Left shift operation with 64-bit truncation.
smt_circuit::STerm pow2_8(smt_circuit::STerm v0, smt_solver::Solver *solver)
Calculates power of 2.
STerm BVVar(const std::string &name, Solver *slv)
STerm BVConst(const std::string &val, Solver *slv, uint32_t base)
std::string to_string(bb::avm2::ValueTag tag)