diff options
author | iximeow <me@iximeow.net> | 2021-08-13 23:44:28 -0700 |
---|---|---|
committer | iximeow <me@iximeow.net> | 2021-08-21 19:08:40 -0700 |
commit | a07098315bea8b880688831f931bc5213ebb6a5f (patch) | |
tree | 67b134241aefde7919091c51e97bbc6b0f6c62b1 /src/protected_mode/vex.rs | |
parent | 9cb6967f484553d78f75113ad534a34960184db8 (diff) |
extend annotation reporting to 32- and 16-bit modes, kinda
Diffstat (limited to 'src/protected_mode/vex.rs')
-rw-r--r-- | src/protected_mode/vex.rs | 12 |
1 files changed, 10 insertions, 2 deletions
diff --git a/src/protected_mode/vex.rs b/src/protected_mode/vex.rs index 54c9d23..202aeb3 100644 --- a/src/protected_mode/vex.rs +++ b/src/protected_mode/vex.rs @@ -1,8 +1,10 @@ use yaxpeax_arch::Reader; +use yaxpeax_arch::DescriptionSink; use crate::protected_mode::Arch; use crate::protected_mode::OperandSpec; use crate::protected_mode::DecodeError; +use crate::protected_mode::FieldDescription; use crate::protected_mode::RegSpec; use crate::protected_mode::RegisterBank; use crate::protected_mode::Instruction; @@ -97,7 +99,10 @@ enum VEXOperandCode { } #[inline(never)] -pub(crate) fn three_byte_vex<T: Reader<<Arch as yaxpeax_arch::Arch>::Address, <Arch as yaxpeax_arch::Arch>::Word>>(words: &mut T, vex_byte_one: u8, instruction: &mut Instruction) -> Result<(), DecodeError> { +pub(crate) fn three_byte_vex< + T: Reader<<Arch as yaxpeax_arch::Arch>::Address, <Arch as yaxpeax_arch::Arch>::Word>, + S: DescriptionSink<FieldDescription>, +>(words: &mut T, vex_byte_one: u8, instruction: &mut Instruction, sink: &mut S) -> Result<(), DecodeError> { let vex_byte_two = words.next().ok().ok_or(DecodeError::ExhaustedInput)?; let p = vex_byte_two & 0x03; let p = match p { @@ -129,7 +134,10 @@ pub(crate) fn three_byte_vex<T: Reader<<Arch as yaxpeax_arch::Arch>::Address, <A Ok(()) } -pub(crate) fn two_byte_vex<T: Reader<<Arch as yaxpeax_arch::Arch>::Address, <Arch as yaxpeax_arch::Arch>::Word>>(words: &mut T, vex_byte: u8, instruction: &mut Instruction) -> Result<(), DecodeError> { +pub(crate) fn two_byte_vex< + T: Reader<<Arch as yaxpeax_arch::Arch>::Address, <Arch as yaxpeax_arch::Arch>::Word>, + S: DescriptionSink<FieldDescription>, +>(words: &mut T, vex_byte: u8, instruction: &mut Instruction, sink: &mut S) -> Result<(), DecodeError> { let p = vex_byte & 0x03; let p = match p { 0x00 => VEXOpcodePrefix::None, |