use super::*;
impl<const N: usize, E: VmEncodingMode<N>> DecodedOpcode<N, E> {
pub fn jump_opcode_apply<
S: zk_evm_abstractions::vm::Storage,
M: zk_evm_abstractions::vm::Memory,
EV: zk_evm_abstractions::vm::EventSink,
PP: zk_evm_abstractions::vm::PrecompilesProcessor,
DP: zk_evm_abstractions::vm::DecommittmentProcessor,
WT: crate::witness_trace::VmWitnessTracer<N, E>,
>(
&self,
vm_state: &mut VmState<S, M, EV, PP, DP, WT, N, E>,
prestate: PreState<N, E>,
) {
let PreState {
new_pc,
src0,
dst0_mem_location,
..
} = prestate;
let PrimitiveValue {
value: src0,
is_pointer: _,
} = src0;
let dest_pc = E::PcOrImm::from_u64_clipped(src0.low_u64());
vm_state.local_state.callstack.get_current_stack_mut().pc = dest_pc;
let result = U256::from(new_pc.as_u64());
let result = PrimitiveValue {
value: result,
is_pointer: false,
};
vm_state.perform_dst0_update(
vm_state.local_state.monotonic_cycle_counter,
result,
dst0_mem_location,
self,
);
}
}