Struct Z3CodeGen
pub struct Z3CodeGen<'a, 'ctx, S: SmtSolver<'ctx>> { /* private fields */ }
Expand description
A code generator that generates Z3 expressions.
Implementations§
Trait Implementations§
§impl<'ctx, S: SmtSolver<'ctx>> CodeGenerator for Z3CodeGen<'_, 'ctx, S>
impl<'ctx, S: SmtSolver<'ctx>> CodeGenerator for Z3CodeGen<'_, 'ctx, S>
§fn leaf_const(&mut self, value: i128) -> Self::T
fn leaf_const(&mut self, value: i128) -> Self::T
Create a constant value.
§fn crop(&mut self, num_bits: u8, item: Self::T) -> Self::T
fn crop(&mut self, num_bits: u8, item: Self::T) -> Self::T
Crop the expression to the lowest
num_bits
bits.§fn rol(&mut self, num_bits: u8, lhs: Self::T, rhs: Self::T) -> Self::T
fn rol(&mut self, num_bits: u8, lhs: Self::T, rhs: Self::T) -> Self::T
Crop
lhs
to num_bits
, then rotate those bits rhs
positions.§fn select(&mut self, num_skip: u8, num_take: u8, item: Self::T) -> Self::T
fn select(&mut self, num_skip: u8, num_take: u8, item: Self::T) -> Self::T
Select
num_take
bits starting at bit index num_skip
from item
.§fn sign_extend(&mut self, num_bits: u8, item: Self::T) -> Self::T
fn sign_extend(&mut self, num_bits: u8, item: Self::T) -> Self::T
Crop the expression to the lowest
num_bits
bits, then sign-extend it.§fn parity(&mut self, item: Self::T) -> Self::T
fn parity(&mut self, item: Self::T) -> Self::T
Crop the expression to the lowest 8 bits, then compute the parity.
§fn is_zero(&mut self, item: Self::T) -> Self::T
fn is_zero(&mut self, item: Self::T) -> Self::T
Return ‘1’ if the expression is zero, otherwise return ‘0’.
§fn if_zero(
&mut self,
condition: Self::T,
if_zero: Self::T,
if_nonzero: Self::T,
) -> Self::T
fn if_zero( &mut self, condition: Self::T, if_zero: Self::T, if_nonzero: Self::T, ) -> Self::T
If
condition
is zero, return if_zero
. Otherwise, return if_nonzero
.§fn cmp_lt(&mut self, lhs: Self::T, rhs: Self::T) -> Self::T
fn cmp_lt(&mut self, lhs: Self::T, rhs: Self::T) -> Self::T
Return ‘1’ if
lhs
is less than rhs
, return ‘1’ otherwise.§fn unknown_op_any(&mut self, name: &str, _args: &[Self::T]) -> Self::T
fn unknown_op_any(&mut self, name: &str, _args: &[Self::T]) -> Self::T
Generate an error for an unknown operation.
§fn trailing_zeros(&mut self, item: Self::T) -> Self::T
fn trailing_zeros(&mut self, item: Self::T) -> Self::T
Count the number of trailing zeros.
§fn leading_zeros(&mut self, item: Self::T) -> Self::T
fn leading_zeros(&mut self, item: Self::T) -> Self::T
Count the number of leading zeros.
§fn swap_bytes(&mut self, num_bits: u8, item: Self::T) -> Self::T
fn swap_bytes(&mut self, num_bits: u8, item: Self::T) -> Self::T
Reverse the order of the lowest
ceil(num_bits / 8)
bytes.§fn div_unsigned(&mut self, lhs: Self::T, rhs: Self::T) -> Self::T
fn div_unsigned(&mut self, lhs: Self::T, rhs: Self::T) -> Self::T
Perform unsigned division.
§fn rem_unsigned(&mut self, lhs: Self::T, rhs: Self::T) -> Self::T
fn rem_unsigned(&mut self, lhs: Self::T, rhs: Self::T) -> Self::T
Compute the unsigned remainder.
§fn deposit_bits(&mut self, lhs: Self::T, rhs: Self::T) -> Self::T
fn deposit_bits(&mut self, lhs: Self::T, rhs: Self::T) -> Self::T
Perform the PDEP operation.
§fn extract_bits(&mut self, lhs: Self::T, rhs: Self::T) -> Self::T
fn extract_bits(&mut self, lhs: Self::T, rhs: Self::T) -> Self::T
Perform the PEXT operation
§fn carryless_mul(&mut self, lhs: Self::T, rhs: Self::T) -> Self::T
fn carryless_mul(&mut self, lhs: Self::T, rhs: Self::T) -> Self::T
Perform carryless multiplication.
§fn unknown_op1(&mut self, name: &str, item: Self::T) -> Self::T
fn unknown_op1(&mut self, name: &str, item: Self::T) -> Self::T
Generate an error for a 1-argument unknown operation.
Auto Trait Implementations§
impl<'a, 'ctx, S> Freeze for Z3CodeGen<'a, 'ctx, S>
impl<'a, 'ctx, S> RefUnwindSafe for Z3CodeGen<'a, 'ctx, S>
impl<'a, 'ctx, S> Send for Z3CodeGen<'a, 'ctx, S>
impl<'a, 'ctx, S> Sync for Z3CodeGen<'a, 'ctx, S>
impl<'a, 'ctx, S> Unpin for Z3CodeGen<'a, 'ctx, S>
impl<'a, 'ctx, S> !UnwindSafe for Z3CodeGen<'a, 'ctx, S>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
§impl<T> Identity for Twhere
T: ?Sized,
impl<T> Identity for Twhere
T: ?Sized,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left
is true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self
into a Left
variant of Either<Self, Self>
if into_left(&self)
returns true
.
Converts self
into a Right
variant of Either<Self, Self>
otherwise. Read more