pub struct GroupedInstructionDecoder { /* private fields */ }Expand description
Divides instruction matching search space in groups, indexed by the most significant bits of their encoding.
Instruction matching is in O(N / (head_bit_count ^ 2)) (if instructions most significant bits
are uniformely distributed, which is not the case for Arm 32 bit encodings).
Implementations§
Source§impl GroupedInstructionDecoder
impl GroupedInstructionDecoder
pub fn new(head_bit_count: u8) -> Self
pub fn try_from_basic_decoder( head_bit_count: u8, version: ArmVersion, ) -> Result<Self, GroupingError>
Sourcepub fn try_insert(
&mut self,
pattern: &InstructionPattern,
encoding: Encoding,
f: fn(Encoding, u32, ItState) -> Result<Rc<dyn Instruction>, DecodeError>,
) -> Result<(), GroupingError>
pub fn try_insert( &mut self, pattern: &InstructionPattern, encoding: Encoding, f: fn(Encoding, u32, ItState) -> Result<Rc<dyn Instruction>, DecodeError>, ) -> Result<(), GroupingError>
Inserts an instruction decoding function given its corresponding pattern and encoding.
A group is determined from pattern and f is stored into that group for further fast
lookup.
If the group the instruction belong to cannot be determined, a GroupingError is returned.
pub fn try_insert_from_decoder_entry( &mut self, entry: &BasicDecoderEntry, ) -> Result<(), GroupingError>
Trait Implementations§
Source§impl InstructionDecode for GroupedInstructionDecoder
impl InstructionDecode for GroupedInstructionDecoder
Source§fn try_decode(
&self,
ins: u32,
size: InstructionSize,
state: ItState,
) -> Result<Rc<dyn Instruction>, InstructionDecodeError>
fn try_decode( &self, ins: u32, size: InstructionSize, state: ItState, ) -> Result<Rc<dyn Instruction>, InstructionDecodeError>
Tries to decode the given
ins instruction raw code, which can be 16 bit or 32 bit wide
depending on the size argument. Read moreAuto Trait Implementations§
impl Freeze for GroupedInstructionDecoder
impl RefUnwindSafe for GroupedInstructionDecoder
impl Send for GroupedInstructionDecoder
impl Sync for GroupedInstructionDecoder
impl Unpin for GroupedInstructionDecoder
impl UnsafeUnpin for GroupedInstructionDecoder
impl UnwindSafe for GroupedInstructionDecoder
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