diff options
author | iximeow <me@iximeow.net> | 2024-06-13 15:33:21 -0700 |
---|---|---|
committer | iximeow <me@iximeow.net> | 2024-06-13 15:33:21 -0700 |
commit | 214da3dc5cbea216f5a3eb601a46e882bbf69a92 (patch) | |
tree | 0fa92a768d919c7939debb54cf8ec3c64c1d2e47 /src/long_mode/display.rs | |
parent | 050bc1c972bc69b963429753b939cefc04812321 (diff) |
use a bit of Opcode to indicate rep/repne applicability
this reduces a `slice::contains` to a single bit test, and regroups
prefix printing to deduplicate checks of the `rep` prefix
seemingly this reduces instruction counts by about 1%, cycles by 0.3% or
so.
Diffstat (limited to 'src/long_mode/display.rs')
-rw-r--r-- | src/long_mode/display.rs | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/src/long_mode/display.rs b/src/long_mode/display.rs index b6cca48..71bb1dd 100644 --- a/src/long_mode/display.rs +++ b/src/long_mode/display.rs @@ -638,6 +638,13 @@ const MNEMONICS: &[&'static str] = &[ "not", "xadd", "xchg", + "cmps", + "scas", + "movs", + "lods", + "stos", + "ins", + "outs", "invalid", "bt", "bsf", @@ -719,17 +726,10 @@ const MNEMONICS: &[&'static str] = &[ "cwd", "cdq", "cqo", - "lods", - "stos", "lahf", "sahf", - "cmps", - "scas", - "movs", "test", - "ins", "in", - "outs", "out", "imul", "jo", @@ -3613,7 +3613,7 @@ fn contextualize_intel<T: fmt::Write, Y: YaxColors>(instr: &Instruction, colors: } if instr.prefixes.rep_any() { - if [Opcode::MOVS, Opcode::CMPS, Opcode::LODS, Opcode::STOS, Opcode::INS, Opcode::OUTS].contains(&instr.opcode) { + if instr.opcode.can_rep() { if instr.prefixes.rep() { write!(out, "rep ")?; } else if instr.prefixes.repnz() { @@ -3769,7 +3769,7 @@ fn contextualize_c<T: fmt::Write, Y: YaxColors>(instr: &Instruction, colors: &Y, } if instr.prefixes.rep_any() { - if [Opcode::MOVS, Opcode::CMPS, Opcode::LODS, Opcode::STOS, Opcode::INS, Opcode::OUTS].contains(&instr.opcode) { + if instr.opcode.can_rep() { let word_str = match instr.mem_size { 1 => "byte", 2 => "word", |