# `EEVM.Interpreter.Instructions.ControlFlow`
[🔗](https://github.com/mw2000/eevm/blob/main/lib/eevm/interpreter/instructions/control_flow.ex#L1)

Opcodes for program counter manipulation and stack data loading.

Covers:

- **Branching**: JUMP (0x56), JUMPI (0x57) — destination must land on a
  JUMPDEST (0x5B) byte.
- **PUSH**: PUSH0 (0x5F, EIP-3855), PUSH1-PUSH32 (0x60-0x7F).
- **DUP**: DUP1-DUP16 (0x80-0x8F).
- **SWAP**: SWAP1-SWAP16 (0x90-0x9F).
- **PC** (0x58) and **JUMPDEST** (0x5B).

# `execute`

```elixir
@spec execute(non_neg_integer(), EEVM.Interpreter.MachineState.t()) ::
  {:ok, EEVM.Interpreter.MachineState.t()}
  | {:error, atom(), EEVM.Interpreter.MachineState.t()}
```

Dispatches a control flow opcode to its implementation.

Called by the executor for JUMP, JUMPI, PC, JUMPDEST, PUSH0, PUSH1-PUSH32,
DUP1-DUP16, and SWAP1-SWAP16. Returns `{:ok, new_state}` on success or
`{:error, reason, state}` on failure.

---

*Consult [api-reference.md](api-reference.md) for complete listing*
