pub struct Simulator<'a, B, T: Tracer = ()> { /* private fields */ }Implementations§
Source§impl<'a, B, T> Simulator<'a, B, T>
impl<'a, B, T> Simulator<'a, B, T>
pub fn new( code: &'a [u8], isa: InstructionSetKind, cache_model: CacheModel, tracer: T, ) -> Self
pub fn set_force_branch_is_cheap(&mut self, value: Option<bool>)
Trait Implementations§
Source§impl<'a, B, T> GasVisitorT for Simulator<'a, B, T>
impl<'a, B, T> GasVisitorT for Simulator<'a, B, T>
fn take_block_cost(&mut self) -> Option<u32>
fn is_at_start_of_basic_block(&self) -> bool
Source§impl<'a, B, T> ParsingVisitor for Simulator<'a, B, T>
impl<'a, B, T> ParsingVisitor for Simulator<'a, B, T>
type ReturnTy = ()
fn xor( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn and( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn or( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn add_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn sub_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn add_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn sub_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn xor_imm( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, _imm: u32, ) -> Self::ReturnTy
fn and_imm( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, _imm: u32, ) -> Self::ReturnTy
fn or_imm( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, _imm: u32, ) -> Self::ReturnTy
fn add_imm_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, _imm: u32, ) -> Self::ReturnTy
fn shift_logical_right_imm_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn shift_arithmetic_right_imm_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn shift_logical_left_imm_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn rotate_right_imm_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _c: u32, ) -> Self::ReturnTy
fn reverse_byte( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, ) -> Self::ReturnTy
fn add_imm_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, _imm: u32, ) -> Self::ReturnTy
fn shift_logical_right_imm_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn shift_arithmetic_right_imm_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn shift_logical_left_imm_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn rotate_right_imm_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _c: u32, ) -> Self::ReturnTy
fn count_leading_zero_bits_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, ) -> Self::ReturnTy
fn count_leading_zero_bits_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, ) -> Self::ReturnTy
fn count_set_bits_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, ) -> Self::ReturnTy
fn count_set_bits_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, ) -> Self::ReturnTy
fn sign_extend_8( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, ) -> Self::ReturnTy
fn sign_extend_16( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, ) -> Self::ReturnTy
fn zero_extend_16( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, ) -> Self::ReturnTy
fn count_trailing_zero_bits_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, ) -> Self::ReturnTy
fn count_trailing_zero_bits_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, ) -> Self::ReturnTy
fn shift_logical_right_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn shift_arithmetic_right_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn shift_logical_left_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn rotate_left_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn rotate_right_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn shift_logical_right_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn shift_arithmetic_right_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn shift_logical_left_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn rotate_left_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn rotate_right_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn shift_logical_right_imm_alt_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s2: RawReg, _s1: u32, ) -> Self::ReturnTy
fn shift_arithmetic_right_imm_alt_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s2: RawReg, _s1: u32, ) -> Self::ReturnTy
fn shift_logical_left_imm_alt_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s2: RawReg, _s1: u32, ) -> Self::ReturnTy
fn rotate_right_imm_alt_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, _c: u32, ) -> Self::ReturnTy
fn shift_logical_right_imm_alt_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s2: RawReg, _s1: u32, ) -> Self::ReturnTy
fn shift_arithmetic_right_imm_alt_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s2: RawReg, _s1: u32, ) -> Self::ReturnTy
fn shift_logical_left_imm_alt_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s2: RawReg, _s1: u32, ) -> Self::ReturnTy
fn rotate_right_imm_alt_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, _c: u32, ) -> Self::ReturnTy
fn set_less_than_unsigned( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn set_less_than_signed( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn set_less_than_unsigned_imm( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn set_less_than_signed_imm( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn set_greater_than_unsigned_imm( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn set_greater_than_signed_imm( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn cmov_if_zero( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, c: RawReg, ) -> Self::ReturnTy
fn cmov_if_not_zero( &mut self, _offset: u32, _args_length: u32, d: RawReg, s: RawReg, c: RawReg, ) -> Self::ReturnTy
fn cmov_if_zero_imm( &mut self, _offset: u32, _args_length: u32, d: RawReg, c: RawReg, _s: u32, ) -> Self::ReturnTy
fn cmov_if_not_zero_imm( &mut self, _offset: u32, _args_length: u32, d: RawReg, c: RawReg, _s: u32, ) -> Self::ReturnTy
fn maximum( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn maximum_unsigned( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn minimum( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn minimum_unsigned( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn load_indirect_u8( &mut self, _offset: u32, _args_length: u32, dst: RawReg, base: RawReg, offset: u32, ) -> Self::ReturnTy
fn load_indirect_i8( &mut self, _offset: u32, _args_length: u32, dst: RawReg, base: RawReg, offset: u32, ) -> Self::ReturnTy
fn load_indirect_u16( &mut self, _offset: u32, _args_length: u32, dst: RawReg, base: RawReg, offset: u32, ) -> Self::ReturnTy
fn load_indirect_i16( &mut self, _offset: u32, _args_length: u32, dst: RawReg, base: RawReg, offset: u32, ) -> Self::ReturnTy
fn load_indirect_u32( &mut self, _offset: u32, _args_length: u32, dst: RawReg, base: RawReg, offset: u32, ) -> Self::ReturnTy
fn load_indirect_i32( &mut self, _offset: u32, _args_length: u32, dst: RawReg, base: RawReg, offset: u32, ) -> Self::ReturnTy
fn load_indirect_u64( &mut self, _offset: u32, _args_length: u32, dst: RawReg, base: RawReg, offset: u32, ) -> Self::ReturnTy
fn load_u8( &mut self, _offset: u32, _args_length: u32, dst: RawReg, offset: u32, ) -> Self::ReturnTy
fn load_i8( &mut self, _offset: u32, _args_length: u32, dst: RawReg, offset: u32, ) -> Self::ReturnTy
fn load_u16( &mut self, _offset: u32, _args_length: u32, dst: RawReg, offset: u32, ) -> Self::ReturnTy
fn load_i16( &mut self, _offset: u32, _args_length: u32, dst: RawReg, offset: u32, ) -> Self::ReturnTy
fn load_u32( &mut self, _offset: u32, _args_length: u32, dst: RawReg, offset: u32, ) -> Self::ReturnTy
fn load_i32( &mut self, _offset: u32, _args_length: u32, dst: RawReg, offset: u32, ) -> Self::ReturnTy
fn load_u64( &mut self, _offset: u32, _args_length: u32, dst: RawReg, offset: u32, ) -> Self::ReturnTy
fn store_imm_indirect_u8( &mut self, _offset: u32, _args_length: u32, base: RawReg, offset: u32, _value: u32, ) -> Self::ReturnTy
fn store_imm_indirect_u16( &mut self, _offset: u32, _args_length: u32, base: RawReg, offset: u32, _value: u32, ) -> Self::ReturnTy
fn store_imm_indirect_u32( &mut self, _offset: u32, _args_length: u32, base: RawReg, offset: u32, _value: u32, ) -> Self::ReturnTy
fn store_imm_indirect_u64( &mut self, _offset: u32, _args_length: u32, base: RawReg, offset: u32, _value: u32, ) -> Self::ReturnTy
fn store_indirect_u8( &mut self, _offset: u32, _args_length: u32, src: RawReg, base: RawReg, offset: u32, ) -> Self::ReturnTy
fn store_indirect_u16( &mut self, _offset: u32, _args_length: u32, src: RawReg, base: RawReg, offset: u32, ) -> Self::ReturnTy
fn store_indirect_u32( &mut self, _offset: u32, _args_length: u32, src: RawReg, base: RawReg, offset: u32, ) -> Self::ReturnTy
fn store_indirect_u64( &mut self, _offset: u32, _args_length: u32, src: RawReg, base: RawReg, offset: u32, ) -> Self::ReturnTy
fn store_imm_u8( &mut self, _offset: u32, _args_length: u32, offset: u32, _value: u32, ) -> Self::ReturnTy
fn store_imm_u16( &mut self, _offset: u32, _args_length: u32, offset: u32, _value: u32, ) -> Self::ReturnTy
fn store_imm_u32( &mut self, _offset: u32, _args_length: u32, offset: u32, _value: u32, ) -> Self::ReturnTy
fn store_imm_u64( &mut self, _offset: u32, _args_length: u32, offset: u32, _value: u32, ) -> Self::ReturnTy
fn store_u8( &mut self, _offset: u32, _args_length: u32, src: RawReg, offset: u32, ) -> Self::ReturnTy
fn store_u16( &mut self, _offset: u32, _args_length: u32, src: RawReg, offset: u32, ) -> Self::ReturnTy
fn store_u32( &mut self, _offset: u32, _args_length: u32, src: RawReg, offset: u32, ) -> Self::ReturnTy
fn store_u64( &mut self, _offset: u32, _args_length: u32, src: RawReg, offset: u32, ) -> Self::ReturnTy
fn branch_less_unsigned( &mut self, offset: u32, args_length: u32, s1: RawReg, s2: RawReg, imm: u32, ) -> Self::ReturnTy
fn branch_less_signed( &mut self, offset: u32, args_length: u32, s1: RawReg, s2: RawReg, imm: u32, ) -> Self::ReturnTy
fn branch_greater_or_equal_unsigned( &mut self, offset: u32, args_length: u32, s1: RawReg, s2: RawReg, imm: u32, ) -> Self::ReturnTy
fn branch_greater_or_equal_signed( &mut self, offset: u32, args_length: u32, s1: RawReg, s2: RawReg, imm: u32, ) -> Self::ReturnTy
fn branch_eq( &mut self, offset: u32, args_length: u32, s1: RawReg, s2: RawReg, imm: u32, ) -> Self::ReturnTy
fn branch_not_eq( &mut self, offset: u32, args_length: u32, s1: RawReg, s2: RawReg, imm: u32, ) -> Self::ReturnTy
fn branch_eq_imm( &mut self, offset: u32, args_length: u32, s1: RawReg, _s2: u32, imm: u32, ) -> Self::ReturnTy
fn branch_not_eq_imm( &mut self, offset: u32, args_length: u32, s1: RawReg, _s2: u32, imm: u32, ) -> Self::ReturnTy
fn branch_less_unsigned_imm( &mut self, offset: u32, args_length: u32, s1: RawReg, _s2: u32, imm: u32, ) -> Self::ReturnTy
fn branch_less_signed_imm( &mut self, offset: u32, args_length: u32, s1: RawReg, _s2: u32, imm: u32, ) -> Self::ReturnTy
fn branch_greater_or_equal_unsigned_imm( &mut self, offset: u32, args_length: u32, s1: RawReg, _s2: u32, imm: u32, ) -> Self::ReturnTy
fn branch_greater_or_equal_signed_imm( &mut self, offset: u32, args_length: u32, s1: RawReg, _s2: u32, imm: u32, ) -> Self::ReturnTy
fn branch_less_or_equal_unsigned_imm( &mut self, offset: u32, args_length: u32, s1: RawReg, _s2: u32, imm: u32, ) -> Self::ReturnTy
fn branch_less_or_equal_signed_imm( &mut self, offset: u32, args_length: u32, s1: RawReg, _s2: u32, imm: u32, ) -> Self::ReturnTy
fn branch_greater_unsigned_imm( &mut self, offset: u32, args_length: u32, s1: RawReg, _s2: u32, imm: u32, ) -> Self::ReturnTy
fn branch_greater_signed_imm( &mut self, offset: u32, args_length: u32, s1: RawReg, _s2: u32, imm: u32, ) -> Self::ReturnTy
fn div_unsigned_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn div_signed_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn rem_unsigned_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn rem_signed_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn div_unsigned_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn div_signed_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn rem_unsigned_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn rem_signed_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn and_inverted( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn or_inverted( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn xnor( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn negate_and_add_imm_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn negate_and_add_imm_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn move_reg( &mut self, _offset: u32, _args_length: u32, dst: RawReg, src: RawReg, ) -> Self::ReturnTy
fn load_imm( &mut self, _offset: u32, _args_length: u32, dst: RawReg, _value: u32, ) -> Self::ReturnTy
fn load_imm64( &mut self, _offset: u32, _args_length: u32, dst: RawReg, _value: u64, ) -> Self::ReturnTy
fn mul_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn mul_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn mul_imm_32( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn mul_imm_64( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, _s2: u32, ) -> Self::ReturnTy
fn mul_upper_signed_signed( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn mul_upper_unsigned_unsigned( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn mul_upper_signed_unsigned( &mut self, _offset: u32, _args_length: u32, d: RawReg, s1: RawReg, s2: RawReg, ) -> Self::ReturnTy
fn invalid(&mut self, _offset: u32, _args_length: u32) -> Self::ReturnTy
fn trap(&mut self, _offset: u32, _args_length: u32) -> Self::ReturnTy
fn fallthrough(&mut self, _offset: u32, _args_length: u32) -> Self::ReturnTy
fn unlikely(&mut self, _offset: u32, _args_length: u32) -> Self::ReturnTy
fn jump( &mut self, _offset: u32, _args_length: u32, _target: u32, ) -> Self::ReturnTy
fn load_imm_and_jump( &mut self, _offset: u32, _args_length: u32, _ra: RawReg, _value: u32, _target: u32, ) -> Self::ReturnTy
fn jump_indirect( &mut self, _offset: u32, _args_length: u32, base: RawReg, _base_offset: u32, ) -> Self::ReturnTy
fn load_imm_and_jump_indirect( &mut self, _offset: u32, _args_length: u32, _ra: RawReg, base: RawReg, _value: u32, _base_offset: u32, ) -> Self::ReturnTy
fn ecalli( &mut self, _offset: u32, _args_length: u32, _imm: u32, ) -> Self::ReturnTy
fn sbrk( &mut self, _offset: u32, _args_length: u32, dst: RawReg, src: RawReg, ) -> Self::ReturnTy
fn memset(&mut self, _offset: u32, _args_length: u32) -> Self::ReturnTy
Auto Trait Implementations§
impl<'a, B, T> Freeze for Simulator<'a, B, T>where
T: Freeze,
impl<'a, B, T> RefUnwindSafe for Simulator<'a, B, T>where
T: RefUnwindSafe,
B: RefUnwindSafe,
impl<'a, B, T> Send for Simulator<'a, B, T>
impl<'a, B, T> Sync for Simulator<'a, B, T>
impl<'a, B, T> Unpin for Simulator<'a, B, T>
impl<'a, B, T> UnwindSafe for Simulator<'a, B, T>where
T: UnwindSafe,
B: UnwindSafe,
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