15 {
WireOpCode::ADD_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
16 {
WireOpCode::ADD_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
17 {
WireOpCode::SUB_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
18 {
WireOpCode::SUB_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
19 {
WireOpCode::MUL_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
20 {
WireOpCode::MUL_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
21 {
WireOpCode::DIV_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
22 {
WireOpCode::DIV_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
23 {
WireOpCode::FDIV_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
24 {
WireOpCode::FDIV_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
25 {
WireOpCode::EQ_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
26 {
WireOpCode::EQ_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
27 {
WireOpCode::LT_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
28 {
WireOpCode::LT_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
29 {
WireOpCode::LTE_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
30 {
WireOpCode::LTE_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
31 {
WireOpCode::AND_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
32 {
WireOpCode::AND_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
33 {
WireOpCode::OR_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
34 {
WireOpCode::OR_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
35 {
WireOpCode::XOR_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
36 {
WireOpCode::XOR_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
37 {
WireOpCode::NOT_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
38 {
WireOpCode::NOT_16, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
39 {
WireOpCode::SHL_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
40 {
WireOpCode::SHL_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
41 {
WireOpCode::SHR_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
42 {
WireOpCode::SHR_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
43 {
WireOpCode::CAST_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
44 {
WireOpCode::CAST_16, { 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
45 {
WireOpCode::GETENVVAR_16, { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 } },
46 {
WireOpCode::CALLDATACOPY, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
47 {
WireOpCode::SUCCESSCOPY, { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
48 {
WireOpCode::RETURNDATASIZE, { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
49 {
WireOpCode::RETURNDATACOPY, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
50 {
WireOpCode::JUMP_32, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
51 {
WireOpCode::JUMPI_32, { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 } },
52 {
WireOpCode::INTERNALCALL, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
53 {
WireOpCode::INTERNALRETURN, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
54 {
WireOpCode::SET_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
55 {
WireOpCode::SET_16, { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 } },
56 {
WireOpCode::SET_32, { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 } },
57 {
WireOpCode::SET_64, { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0 } },
58 {
WireOpCode::SET_128, { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0 } },
59 {
WireOpCode::SET_FF, { 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 } },
60 {
WireOpCode::MOV_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
61 {
WireOpCode::MOV_16, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
62 {
WireOpCode::SLOAD, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
63 {
WireOpCode::SSTORE, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
64 {
WireOpCode::NOTEHASHEXISTS, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
65 {
WireOpCode::EMITNOTEHASH, { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
66 {
WireOpCode::NULLIFIEREXISTS, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
67 {
WireOpCode::EMITNULLIFIER, { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
68 {
WireOpCode::L1TOL2MSGEXISTS, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
69 {
WireOpCode::GETCONTRACTINSTANCE, { 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
70 {
WireOpCode::EMITUNENCRYPTEDLOG, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
71 {
WireOpCode::SENDL2TOL1MSG, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
72 {
WireOpCode::CALL, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
73 {
WireOpCode::STATICCALL, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
74 {
WireOpCode::RETURN, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
75 {
WireOpCode::REVERT_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
76 {
WireOpCode::REVERT_16, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
77 {
WireOpCode::DEBUGLOG, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
78 {
WireOpCode::POSEIDON2PERM, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
79 {
WireOpCode::SHA256COMPRESSION, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
80 {
WireOpCode::KECCAKF1600, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
81 {
WireOpCode::ECADD, { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
82 {
WireOpCode::TORADIXBE, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
205 .tag_operand_idx = 3,
212 .tag_operand_idx = 3,
255 .tag_operand_idx = 2,
262 .tag_operand_idx = 2,
269 .tag_operand_idx = 2,
276 .tag_operand_idx = 2,
283 .tag_operand_idx = 2,
290 .tag_operand_idx = 2,
418 return index <
inputs.size() &&
inputs.at(index).has_value();
428 { .num_addresses = 3,
435 { .num_addresses = 3,
442 { .num_addresses = 3,
449 { .num_addresses = 3,
456 { .num_addresses = 3,
463 { .num_addresses = 3,
464 .gas_cost = { .opcode_gas =
AVM_EQ_BASE_L2_GAS, .base_da = 0, .dyn_l2 = 0, .dyn_da = 0 },
470 { .num_addresses = 3,
471 .gas_cost = { .opcode_gas =
AVM_LT_BASE_L2_GAS, .base_da = 0, .dyn_l2 = 0, .dyn_da = 0 },
477 { .num_addresses = 3,
484 { .num_addresses = 2,
488 { .num_addresses = 3,
495 { .num_addresses = 3,
502 { .num_addresses = 2,
506 { .num_addresses = 1,
510 { .num_addresses = 1,
514 { .num_addresses = 2,
518 { .num_addresses = 5,
525 { .num_addresses = 5,
533 { .num_addresses = 2,
537 { .num_addresses = 0,
540 { .num_addresses = 1,
544 { .num_addresses = 3,
553 { .num_addresses = 1,
557 { .num_addresses = 3,
571 { .num_addresses = 0,
574 { .num_addresses = 5,
577 { .num_addresses = 2,
581 { .num_addresses = 2,
584 { .num_addresses = 1,
588 { .num_addresses = 3,
594 { .num_addresses = 3,
601 { .num_addresses = 3,
608 { .num_addresses = 3,
615 { .num_addresses = 2,
619 { .num_addresses = 2,
627 { .num_addresses = 3,
633 { .num_addresses = 3,
640 { .num_addresses = 1,
647 { .num_addresses = 2,
651 { .num_addresses = 1,
658 { .num_addresses = 3,
664 { .num_addresses = 2,
667 { .num_addresses = 7,
676 { .num_addresses = 5,
687 { .num_addresses = 2,
695 { .num_addresses = 2,
704 { .num_addresses = 3,
#define AVM_JUMPI_BASE_L2_GAS
#define AVM_DYN_GAS_ID_RETURNDATACOPY
#define AVM_SHL_BASE_L2_GAS
#define AVM_RETURN_BASE_L2_GAS
#define AVM_MUL_BASE_L2_GAS
#define AVM_CAST_BASE_L2_GAS
#define AVM_POSEIDON2_BASE_L2_GAS
#define AVM_CALLDATACOPY_DYN_L2_GAS
#define AVM_TORADIXBE_DYN_L2_GAS
#define AVM_SUCCESSCOPY_BASE_L2_GAS
#define AVM_NOT_BASE_L2_GAS
#define AVM_GETENVVAR_BASE_L2_GAS
#define AVM_OR_BASE_L2_GAS
#define AVM_SLOAD_BASE_L2_GAS
#define AVM_DYN_GAS_ID_SSTORE
#define AVM_EMITUNENCRYPTEDLOG_DYN_DA_GAS
#define AVM_ADD_BASE_L2_GAS
#define AVM_STATICCALL_BASE_L2_GAS
#define AVM_BITWISE_DYN_L2_GAS
#define AVM_RETURNDATACOPY_DYN_L2_GAS
#define AVM_DYN_GAS_ID_TORADIX
#define AVM_INTERNALRETURN_BASE_L2_GAS
#define AVM_REVERT_BASE_L2_GAS
#define AVM_EMITUNENCRYPTEDLOG_BASE_L2_GAS
#define AVM_EMITNULLIFIER_BASE_DA_GAS
#define AVM_SENDL2TOL1MSG_BASE_L2_GAS
#define AVM_EMITNOTEHASH_BASE_L2_GAS
#define AVM_RETURNDATASIZE_BASE_L2_GAS
#define AVM_JUMP_BASE_L2_GAS
#define AVM_INTERNALCALL_BASE_L2_GAS
#define AVM_NOTEHASHEXISTS_BASE_L2_GAS
#define AVM_NULLIFIEREXISTS_BASE_L2_GAS
#define AVM_XOR_BASE_L2_GAS
#define AVM_AND_BASE_L2_GAS
#define AVM_DEBUGLOG_BASE_L2_GAS
#define AVM_EMITNULLIFIER_BASE_L2_GAS
#define AVM_DYN_GAS_ID_CALLDATACOPY
#define AVM_SET_BASE_L2_GAS
#define AVM_EQ_BASE_L2_GAS
#define AVM_DIV_BASE_L2_GAS
#define AVM_SENDL2TOL1MSG_BASE_DA_GAS
#define AVM_EMITNOTEHASH_BASE_DA_GAS
#define AVM_KECCAKF1600_BASE_L2_GAS
#define AVM_LT_BASE_L2_GAS
#define AVM_SSTORE_BASE_L2_GAS
#define AVM_DYN_GAS_ID_EMITUNENCRYPTEDLOG
#define AVM_DYN_GAS_ID_BITWISE
#define AVM_SUB_BASE_L2_GAS
#define AVM_CALLDATACOPY_BASE_L2_GAS
#define AVM_TORADIXBE_BASE_L2_GAS
#define AVM_FDIV_BASE_L2_GAS
#define AVM_CALL_BASE_L2_GAS
#define AVM_L1TOL2MSGEXISTS_BASE_L2_GAS
#define AVM_ECADD_BASE_L2_GAS
#define AVM_SSTORE_DYN_DA_GAS
#define AVM_SHA256COMPRESSION_BASE_L2_GAS
#define AVM_RETURNDATACOPY_BASE_L2_GAS
#define AVM_SHR_BASE_L2_GAS
#define AVM_LTE_BASE_L2_GAS
#define AVM_MOV_BASE_L2_GAS
#define AVM_GETCONTRACTINSTANCE_BASE_L2_GAS
bool is_active(size_t index) const
bool need_tag_check(size_t index) const
RegisterInfo & add_output()
RegisterInfo & add_inputs(const std::vector< std::optional< ValueTag > > &tags)
size_t total_registers() const
std::optional< ValueTag > expected_tag(size_t index) const
bool is_write(size_t index) const
RegisterInfo & add_input(std::optional< ValueTag > tag=std::nullopt)
static constexpr auto ANY_TAG
std::vector< std::optional< ValueTag > > inputs
const std::unordered_map< WireOpCode, WireInstructionSpec > WIRE_INSTRUCTION_SPEC
const std::unordered_map< ExecutionOpCode, ExecInstructionSpec > EXEC_INSTRUCTION_SPEC
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept