19 {
WireOpCode::ADD_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
20 {
WireOpCode::ADD_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
21 {
WireOpCode::SUB_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
22 {
WireOpCode::SUB_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
23 {
WireOpCode::MUL_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
24 {
WireOpCode::MUL_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
25 {
WireOpCode::DIV_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
26 {
WireOpCode::DIV_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
27 {
WireOpCode::FDIV_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
28 {
WireOpCode::FDIV_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
29 {
WireOpCode::EQ_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
30 {
WireOpCode::EQ_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
31 {
WireOpCode::LT_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
32 {
WireOpCode::LT_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
33 {
WireOpCode::LTE_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
34 {
WireOpCode::LTE_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
35 {
WireOpCode::AND_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
36 {
WireOpCode::AND_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
37 {
WireOpCode::OR_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
38 {
WireOpCode::OR_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
39 {
WireOpCode::XOR_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
40 {
WireOpCode::XOR_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
41 {
WireOpCode::NOT_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
42 {
WireOpCode::NOT_16, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
43 {
WireOpCode::SHL_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
44 {
WireOpCode::SHL_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
45 {
WireOpCode::SHR_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
46 {
WireOpCode::SHR_16, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
47 {
WireOpCode::CAST_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
48 {
WireOpCode::CAST_16, { 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
51 {
WireOpCode::GETENVVAR_16, { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0 } },
53 {
WireOpCode::CALLDATACOPY, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
54 {
WireOpCode::SUCCESSCOPY, { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
55 {
WireOpCode::RETURNDATASIZE, { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
56 {
WireOpCode::RETURNDATACOPY, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
60 {
WireOpCode::JUMP_32, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
61 {
WireOpCode::JUMPI_32, { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1 } },
62 {
WireOpCode::INTERNALCALL, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0 } },
63 {
WireOpCode::INTERNALRETURN, { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
65 {
WireOpCode::SET_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0 } },
66 {
WireOpCode::SET_16, { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0 } },
67 {
WireOpCode::SET_32, { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0 } },
68 {
WireOpCode::SET_64, { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0 } },
69 {
WireOpCode::SET_128, { 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0 } },
70 {
WireOpCode::SET_FF, { 0, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0 } },
71 {
WireOpCode::MOV_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
72 {
WireOpCode::MOV_16, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
75 {
WireOpCode::SLOAD, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
76 {
WireOpCode::SSTORE, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
77 {
WireOpCode::NOTEHASHEXISTS, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
78 {
WireOpCode::EMITNOTEHASH, { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
79 {
WireOpCode::NULLIFIEREXISTS, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
80 {
WireOpCode::EMITNULLIFIER, { 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
81 {
WireOpCode::L1TOL2MSGEXISTS, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
82 {
WireOpCode::GETCONTRACTINSTANCE, { 0, 0, 1, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
85 {
WireOpCode::EMITUNENCRYPTEDLOG, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
86 {
WireOpCode::SENDL2TOL1MSG, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
89 {
WireOpCode::CALL, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
90 {
WireOpCode::STATICCALL, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
91 {
WireOpCode::RETURN, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
92 {
WireOpCode::REVERT_8, { 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
93 {
WireOpCode::REVERT_16, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
96 {
WireOpCode::DEBUGLOG, { 0, 0, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
99 {
WireOpCode::POSEIDON2PERM, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
100 {
WireOpCode::SHA256COMPRESSION, { 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
101 {
WireOpCode::KECCAKF1600, { 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
102 {
WireOpCode::ECADD, { 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
104 {
WireOpCode::TORADIXBE, { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
106 return WireOpCode_DC_SELECTORS;
233 .tag_operand_idx = 3,
240 .tag_operand_idx = 3,
290 .tag_operand_idx = 2,
297 .tag_operand_idx = 2,
304 .tag_operand_idx = 2,
311 .tag_operand_idx = 2,
318 .tag_operand_idx = 2,
325 .tag_operand_idx = 2,
431 return WIRE_INSTRUCTION_SPEC;
479 { .num_addresses = 3,
486 { .num_addresses = 3,
493 { .num_addresses = 3,
500 { .num_addresses = 3,
507 { .num_addresses = 3,
514 { .num_addresses = 3,
515 .gas_cost = { .opcode_gas =
AVM_EQ_BASE_L2_GAS, .base_da = 0, .dyn_l2 = 0, .dyn_da = 0 },
521 { .num_addresses = 3,
522 .gas_cost = { .opcode_gas =
AVM_LT_BASE_L2_GAS, .base_da = 0, .dyn_l2 = 0, .dyn_da = 0 },
528 { .num_addresses = 3,
535 { .num_addresses = 3,
545 { .num_addresses = 3,
555 { .num_addresses = 3,
565 { .num_addresses = 2,
569 { .num_addresses = 3,
576 { .num_addresses = 3,
583 { .num_addresses = 2,
587 { .num_addresses = 1,
591 { .num_addresses = 3,
600 { .num_addresses = 1,
604 { .num_addresses = 1,
608 { .num_addresses = 3,
617 { .num_addresses = 0,
620 { .num_addresses = 1,
629 { .num_addresses = 0,
632 { .num_addresses = 1,
636 { .num_addresses = 2,
640 { .num_addresses = 2,
644 { .num_addresses = 2,
652 { .num_addresses = 3,
658 { .num_addresses = 1,
665 { .num_addresses = 3,
672 { .num_addresses = 1,
679 { .num_addresses = 3,
685 { .num_addresses = 2,
689 { .num_addresses = 2,
697 { .num_addresses = 2,
705 { .num_addresses = 5,
712 { .num_addresses = 5,
719 { .num_addresses = 2,
723 { .num_addresses = 2,
727 { .num_addresses = 4,
732 { .num_addresses = 2,
735 { .num_addresses = 3,
738 { .num_addresses = 2,
741 { .num_addresses = 7,
750 { .num_addresses = 5,
761 return EXEC_INSTRUCTION_SPEC;
#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_EMITUNENCRYPTEDLOG_BASE_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_EMITUNENCRYPTEDLOG_DYN_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 > & get_wire_instruction_spec()
const std::unordered_map< ExecutionOpCode, ExecInstructionSpec > & get_exec_instruction_spec()
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept