From 060fb29180f354e04ec8d48f0128433b634fa3c5 Mon Sep 17 00:00:00 2001 From: iximeow Date: Fri, 17 Dec 2021 11:03:37 -0800 Subject: write `apply_disp_scale` in a mode-agnostic way `apply_disp_scale` forgot that `wrapping_mul` exists, so we don't need to explicitly write the size of value that `mem_size` should be cast to, in casting to/from a signed integer. taken with `.into()`, we don't need per-architecture stubs to make evex decoding work. --- src/long_mode/evex.rs | 4 ---- src/protected_mode/evex.rs | 4 ---- src/real_mode/evex.rs | 4 ---- src/shared/evex.in | 2 +- 4 files changed, 1 insertion(+), 13 deletions(-) diff --git a/src/long_mode/evex.rs b/src/long_mode/evex.rs index 5c0967b..2c0d765 100644 --- a/src/long_mode/evex.rs +++ b/src/long_mode/evex.rs @@ -10,9 +10,5 @@ fn isa_has_qwords() -> bool { true } -fn apply_disp_scale(inst: &mut Instruction) { - inst.disp = ((inst.disp as i64) * (inst.mem_size as i64)) as u64; -} - include!("../shared/generated_evex.in"); include!("../shared/evex.in"); diff --git a/src/protected_mode/evex.rs b/src/protected_mode/evex.rs index 2ef91b6..b42433c 100644 --- a/src/protected_mode/evex.rs +++ b/src/protected_mode/evex.rs @@ -10,9 +10,5 @@ fn isa_has_qwords() -> bool { false } -fn apply_disp_scale(inst: &mut Instruction) { - inst.disp = ((inst.disp as i32) * (inst.mem_size as i32)) as u32; -} - include!("../shared/generated_evex.in"); include!("../shared/evex.in"); diff --git a/src/real_mode/evex.rs b/src/real_mode/evex.rs index b63c08d..8ab1c77 100644 --- a/src/real_mode/evex.rs +++ b/src/real_mode/evex.rs @@ -10,9 +10,5 @@ fn isa_has_qwords() -> bool { false } -fn apply_disp_scale(inst: &mut Instruction) { - inst.disp = ((inst.disp as i32) * (inst.mem_size as i32)) as u32; -} - include!("../shared/generated_evex.in"); include!("../shared/evex.in"); diff --git a/src/shared/evex.in b/src/shared/evex.in index 5d3b053..31fc3a7 100644 --- a/src/shared/evex.in +++ b/src/shared/evex.in @@ -240,7 +240,7 @@ pub(crate) fn read_evex< if let Some(size) = overridden_size { instruction.disp = instruction.disp.wrapping_mul(size); } else { - apply_disp_scale(instruction); + instruction.disp = instruction.disp.wrapping_mul(instruction.mem_size.into()); } instruction.prefixes.apply_compressed_disp(false); } -- cgit v1.1