From c549f10115e727a6c0694e1ca59704826910e165 Mon Sep 17 00:00:00 2001 From: iximeow Date: Sat, 3 Dec 2022 14:12:38 -0800 Subject: apply 2444de11 to 16-bit and 32-bit decoders these don't need the extra `rex`-supporting index space, so they don't have it. --- src/protected_mode/mod.rs | 15 +++++++++------ src/real_mode/mod.rs | 15 +++++++++------ 2 files changed, 18 insertions(+), 12 deletions(-) diff --git a/src/protected_mode/mod.rs b/src/protected_mode/mod.rs index 5457b9d..71ddf37 100644 --- a/src/protected_mode/mod.rs +++ b/src/protected_mode/mod.rs @@ -6087,12 +6087,15 @@ fn read_M< #[inline] fn width_to_gp_reg_bank(width: u8) -> RegisterBank { - match width { - 1 => return RegisterBank::B, - 2 => return RegisterBank::W, - 4 => return RegisterBank::D, - _ => unsafe { unreachable_unchecked(); } - } + let index = width.trailing_zeros(); + + const BANK_LUT: [RegisterBank; 3] = [ + RegisterBank::B, + RegisterBank::W, + RegisterBank::D, + ]; + + *BANK_LUT.get(index as usize).unwrap_or_else(|| unsafe { unreachable_unchecked() }) } fn read_0f_opcode(opcode: u8, prefixes: &mut Prefixes) -> OpcodeRecord { diff --git a/src/real_mode/mod.rs b/src/real_mode/mod.rs index 8749ae2..bff00ad 100644 --- a/src/real_mode/mod.rs +++ b/src/real_mode/mod.rs @@ -6089,12 +6089,15 @@ fn read_M< #[inline] fn width_to_gp_reg_bank(width: u8) -> RegisterBank { - match width { - 1 => return RegisterBank::B, - 2 => return RegisterBank::W, - 4 => return RegisterBank::D, - _ => unsafe { unreachable_unchecked(); } - } + let index = width.trailing_zeros(); + + const BANK_LUT: [RegisterBank; 3] = [ + RegisterBank::B, + RegisterBank::W, + RegisterBank::D, + ]; + + *BANK_LUT.get(index as usize).unwrap_or_else(|| unsafe { unreachable_unchecked() }) } fn read_0f_opcode(opcode: u8, prefixes: &mut Prefixes) -> OpcodeRecord { -- cgit v1.1