diff --git a/crates/wasmi/src/engine/executor/handler/exec.rs b/crates/wasmi/src/engine/executor/handler/exec.rs index 566c08a8f5..8ce8ac8ffb 100644 --- a/crates/wasmi/src/engine/executor/handler/exec.rs +++ b/crates/wasmi/src/engine/executor/handler/exec.rs @@ -1821,11 +1821,15 @@ macro_rules! handler_cmp_branch { let $crate::ir::decode::$decode { offset, lhs, rhs } = unsafe { args.decode_op() }; let lhs = args.get(lhs); let rhs = args.get(rhs); + // Note: we push `dispatch!` to both arms to have multiple branch sites + // which dramatically helps branch prediction. if $eval(lhs, rhs) { args.set_ip(ip); args.offset_ip(offset); + dispatch!(store, args); + } else { + dispatch!(store, args) } - dispatch!(store, args) } } )*