aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoriximeow <me@iximeow.net>2021-03-21 14:09:41 -0700
committeriximeow <me@iximeow.net>2021-03-21 14:09:41 -0700
commit0591d78e5b1c1c232fd6c6e4c159fd428f19ade9 (patch)
treef70f65f47381adf06c8444711c6273aafa7d274b
parent72d1231dd24f5682b0ac752abe8233d750b397e4 (diff)
in real programs, having read_operands inlined hurts performance!
the in-repo benchmark got better with this inlined but it's probably better to leave it up to the compiler when finally stitching stuff together. i suspect that having read_operands inlined resulted in just too many live values, and the compiler was inspired to play hijinks that pipelined poorly. disas-bench shows a ~15% improvement from this change.
-rw-r--r--src/long_mode/mod.rs1
1 files changed, 0 insertions, 1 deletions
diff --git a/src/long_mode/mod.rs b/src/long_mode/mod.rs
index cb3d699..5ca6542 100644
--- a/src/long_mode/mod.rs
+++ b/src/long_mode/mod.rs
@@ -6367,7 +6367,6 @@ fn read_instr<T: Iterator<Item=u8>>(decoder: &InstDecoder, mut bytes_iter: T, in
OperandCode::ModRM_0x8f_Ev => 30
*/
-#[inline(always)]
fn read_operands<T: Iterator<Item=u8>>(decoder: &InstDecoder, mut bytes_iter: T, instruction: &mut Instruction, operand_code: OperandCode, length: &mut u8) -> Result<(), DecodeError> {
instruction.operands[0] = OperandSpec::RegRRR;
instruction.operand_count = 2;