Skip to content

Commit

Permalink
feat(avm): use template engine for codegen
Browse files Browse the repository at this point in the history
  • Loading branch information
fcarreiro committed Jul 3, 2024
1 parent c5e9d4a commit f42a05e
Show file tree
Hide file tree
Showing 5 changed files with 559 additions and 686 deletions.
195 changes: 102 additions & 93 deletions barretenberg/cpp/src/barretenberg/vm/generated/avm_flavor.hpp
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

#pragma once

#include "barretenberg/commitment_schemes/kzg/kzg.hpp"
Expand All @@ -7,20 +6,30 @@
#include "barretenberg/polynomials/barycentric.hpp"
#include "barretenberg/polynomials/univariate.hpp"

#include "barretenberg/relations/generic_permutation/generic_permutation_relation.hpp"

#include "barretenberg/flavor/flavor.hpp"
#include "barretenberg/flavor/flavor_macros.hpp"
#include "barretenberg/polynomials/evaluation_domain.hpp"
#include "barretenberg/polynomials/polynomial.hpp"
#include "barretenberg/transcript/transcript.hpp"
#include "barretenberg/vm/avm_trace/stats.hpp"

// Relations
#include "barretenberg/relations/generated/avm/alu.hpp"
#include "barretenberg/relations/generated/avm/binary.hpp"
#include "barretenberg/relations/generated/avm/conversion.hpp"
#include "barretenberg/relations/generated/avm/gas.hpp"
#include "barretenberg/relations/generated/avm/incl_main_tag_err.hpp"
#include "barretenberg/relations/generated/avm/incl_mem_tag_err.hpp"
#include "barretenberg/relations/generated/avm/keccakf1600.hpp"
#include "barretenberg/relations/generated/avm/kernel.hpp"
#include "barretenberg/relations/generated/avm/main.hpp"
#include "barretenberg/relations/generated/avm/mem.hpp"
#include "barretenberg/relations/generated/avm/pedersen.hpp"
#include "barretenberg/relations/generated/avm/poseidon2.hpp"
#include "barretenberg/relations/generated/avm/powers.hpp"
#include "barretenberg/relations/generated/avm/sha256.hpp"

// Lookup relations
#include "barretenberg/relations/generated/avm/incl_main_tag_err.hpp"
#include "barretenberg/relations/generated/avm/incl_mem_tag_err.hpp"
#include "barretenberg/relations/generated/avm/kernel_output_lookup.hpp"
#include "barretenberg/relations/generated/avm/lookup_byte_lengths.hpp"
#include "barretenberg/relations/generated/avm/lookup_byte_operations.hpp"
Expand Down Expand Up @@ -56,9 +65,6 @@
#include "barretenberg/relations/generated/avm/lookup_u16_9.hpp"
#include "barretenberg/relations/generated/avm/lookup_u8_0.hpp"
#include "barretenberg/relations/generated/avm/lookup_u8_1.hpp"
#include "barretenberg/relations/generated/avm/main.hpp"
#include "barretenberg/relations/generated/avm/mem.hpp"
#include "barretenberg/relations/generated/avm/pedersen.hpp"
#include "barretenberg/relations/generated/avm/perm_main_alu.hpp"
#include "barretenberg/relations/generated/avm/perm_main_bin.hpp"
#include "barretenberg/relations/generated/avm/perm_main_conv.hpp"
Expand All @@ -72,15 +78,11 @@
#include "barretenberg/relations/generated/avm/perm_main_mem_ind_addr_d.hpp"
#include "barretenberg/relations/generated/avm/perm_main_pedersen.hpp"
#include "barretenberg/relations/generated/avm/perm_main_pos2_perm.hpp"
#include "barretenberg/relations/generated/avm/poseidon2.hpp"
#include "barretenberg/relations/generated/avm/powers.hpp"
#include "barretenberg/relations/generated/avm/range_check_da_gas_hi.hpp"
#include "barretenberg/relations/generated/avm/range_check_da_gas_lo.hpp"
#include "barretenberg/relations/generated/avm/range_check_l2_gas_hi.hpp"
#include "barretenberg/relations/generated/avm/range_check_l2_gas_lo.hpp"
#include "barretenberg/relations/generated/avm/sha256.hpp"
#include "barretenberg/transcript/transcript.hpp"
#include "barretenberg/vm/avm_trace/stats.hpp"
#include "barretenberg/relations/generic_permutation/generic_permutation_relation.hpp"

namespace bb {

Expand Down Expand Up @@ -162,72 +164,75 @@ class AvmFlavor {
lookup_div_u16_6_relation<FF>,
lookup_div_u16_7_relation<FF>>;

using Relations = std::tuple<Avm_vm::alu<FF>,
Avm_vm::binary<FF>,
Avm_vm::conversion<FF>,
Avm_vm::gas<FF>,
Avm_vm::keccakf1600<FF>,
Avm_vm::kernel<FF>,
Avm_vm::main<FF>,
Avm_vm::mem<FF>,
Avm_vm::pedersen<FF>,
Avm_vm::poseidon2<FF>,
Avm_vm::powers<FF>,
Avm_vm::sha256<FF>,
perm_main_alu_relation<FF>,
perm_main_bin_relation<FF>,
perm_main_conv_relation<FF>,
perm_main_pos2_perm_relation<FF>,
perm_main_pedersen_relation<FF>,
perm_main_mem_a_relation<FF>,
perm_main_mem_b_relation<FF>,
perm_main_mem_c_relation<FF>,
perm_main_mem_d_relation<FF>,
perm_main_mem_ind_addr_a_relation<FF>,
perm_main_mem_ind_addr_b_relation<FF>,
perm_main_mem_ind_addr_c_relation<FF>,
perm_main_mem_ind_addr_d_relation<FF>,
lookup_byte_lengths_relation<FF>,
lookup_byte_operations_relation<FF>,
lookup_opcode_gas_relation<FF>,
range_check_l2_gas_hi_relation<FF>,
range_check_l2_gas_lo_relation<FF>,
range_check_da_gas_hi_relation<FF>,
range_check_da_gas_lo_relation<FF>,
kernel_output_lookup_relation<FF>,
lookup_into_kernel_relation<FF>,
incl_main_tag_err_relation<FF>,
incl_mem_tag_err_relation<FF>,
lookup_mem_rng_chk_lo_relation<FF>,
lookup_mem_rng_chk_mid_relation<FF>,
lookup_mem_rng_chk_hi_relation<FF>,
lookup_pow_2_0_relation<FF>,
lookup_pow_2_1_relation<FF>,
lookup_u8_0_relation<FF>,
lookup_u8_1_relation<FF>,
lookup_u16_0_relation<FF>,
lookup_u16_1_relation<FF>,
lookup_u16_2_relation<FF>,
lookup_u16_3_relation<FF>,
lookup_u16_4_relation<FF>,
lookup_u16_5_relation<FF>,
lookup_u16_6_relation<FF>,
lookup_u16_7_relation<FF>,
lookup_u16_8_relation<FF>,
lookup_u16_9_relation<FF>,
lookup_u16_10_relation<FF>,
lookup_u16_11_relation<FF>,
lookup_u16_12_relation<FF>,
lookup_u16_13_relation<FF>,
lookup_u16_14_relation<FF>,
lookup_div_u16_0_relation<FF>,
lookup_div_u16_1_relation<FF>,
lookup_div_u16_2_relation<FF>,
lookup_div_u16_3_relation<FF>,
lookup_div_u16_4_relation<FF>,
lookup_div_u16_5_relation<FF>,
lookup_div_u16_6_relation<FF>,
lookup_div_u16_7_relation<FF>>;
using Relations = std::tuple<
// Relations
Avm_vm::alu<FF>,
Avm_vm::binary<FF>,
Avm_vm::conversion<FF>,
Avm_vm::gas<FF>,
Avm_vm::keccakf1600<FF>,
Avm_vm::kernel<FF>,
Avm_vm::main<FF>,
Avm_vm::mem<FF>,
Avm_vm::pedersen<FF>,
Avm_vm::poseidon2<FF>,
Avm_vm::powers<FF>,
Avm_vm::sha256<FF>,
// Lookups
perm_main_alu_relation<FF>,
perm_main_bin_relation<FF>,
perm_main_conv_relation<FF>,
perm_main_pos2_perm_relation<FF>,
perm_main_pedersen_relation<FF>,
perm_main_mem_a_relation<FF>,
perm_main_mem_b_relation<FF>,
perm_main_mem_c_relation<FF>,
perm_main_mem_d_relation<FF>,
perm_main_mem_ind_addr_a_relation<FF>,
perm_main_mem_ind_addr_b_relation<FF>,
perm_main_mem_ind_addr_c_relation<FF>,
perm_main_mem_ind_addr_d_relation<FF>,
lookup_byte_lengths_relation<FF>,
lookup_byte_operations_relation<FF>,
lookup_opcode_gas_relation<FF>,
range_check_l2_gas_hi_relation<FF>,
range_check_l2_gas_lo_relation<FF>,
range_check_da_gas_hi_relation<FF>,
range_check_da_gas_lo_relation<FF>,
kernel_output_lookup_relation<FF>,
lookup_into_kernel_relation<FF>,
incl_main_tag_err_relation<FF>,
incl_mem_tag_err_relation<FF>,
lookup_mem_rng_chk_lo_relation<FF>,
lookup_mem_rng_chk_mid_relation<FF>,
lookup_mem_rng_chk_hi_relation<FF>,
lookup_pow_2_0_relation<FF>,
lookup_pow_2_1_relation<FF>,
lookup_u8_0_relation<FF>,
lookup_u8_1_relation<FF>,
lookup_u16_0_relation<FF>,
lookup_u16_1_relation<FF>,
lookup_u16_2_relation<FF>,
lookup_u16_3_relation<FF>,
lookup_u16_4_relation<FF>,
lookup_u16_5_relation<FF>,
lookup_u16_6_relation<FF>,
lookup_u16_7_relation<FF>,
lookup_u16_8_relation<FF>,
lookup_u16_9_relation<FF>,
lookup_u16_10_relation<FF>,
lookup_u16_11_relation<FF>,
lookup_u16_12_relation<FF>,
lookup_u16_13_relation<FF>,
lookup_u16_14_relation<FF>,
lookup_div_u16_0_relation<FF>,
lookup_div_u16_1_relation<FF>,
lookup_div_u16_2_relation<FF>,
lookup_div_u16_3_relation<FF>,
lookup_div_u16_4_relation<FF>,
lookup_div_u16_5_relation<FF>,
lookup_div_u16_6_relation<FF>,
lookup_div_u16_7_relation<FF>>;

static constexpr size_t MAX_PARTIAL_RELATION_LENGTH = compute_max_partial_relation_length<Relations>();

Expand All @@ -252,14 +257,16 @@ class AvmFlavor {

DEFINE_FLAVOR_MEMBERS(DataType, main_clk, main_sel_first)

RefVector<DataType> get_selectors() { return { main_clk, main_sel_first }; };
RefVector<DataType> get_sigma_polynomials() { return {}; };
RefVector<DataType> get_id_polynomials() { return {}; };
RefVector<DataType> get_table_polynomials() { return {}; };
RefVector<DataType> get_selectors() { return { main_clk, main_sel_first }; }
RefVector<DataType> get_sigma_polynomials() { return {}; }
RefVector<DataType> get_id_polynomials() { return {}; }
RefVector<DataType> get_table_polynomials() { return {}; }
};

template <typename DataType> class WitnessEntities {
template <typename DataType_> class WitnessEntities {
public:
using DataType = DataType_;

DEFINE_FLAVOR_MEMBERS(DataType,
kernel_kernel_inputs,
kernel_kernel_value_out,
Expand Down Expand Up @@ -1034,11 +1041,13 @@ class AvmFlavor {
lookup_div_u16_5_counts,
lookup_div_u16_6_counts,
lookup_div_u16_7_counts };
};
}
};

template <typename DataType> class AllEntities {
template <typename DataType_> class AllEntities {
public:
using DataType = DataType_;

DEFINE_FLAVOR_MEMBERS(DataType,
main_clk,
main_sel_first,
Expand Down Expand Up @@ -1947,7 +1956,7 @@ class AvmFlavor {
mem_tag_shift,
mem_tsp_shift,
mem_val_shift };
};
}
RefVector<DataType> get_unshifted()
{
return { main_clk,
Expand Down Expand Up @@ -2337,7 +2346,7 @@ class AvmFlavor {
lookup_div_u16_5_counts,
lookup_div_u16_6_counts,
lookup_div_u16_7_counts };
};
}
RefVector<DataType> get_to_be_shifted()
{
return { alu_a_hi,
Expand Down Expand Up @@ -2405,7 +2414,7 @@ class AvmFlavor {
mem_tag,
mem_tsp,
mem_val };
};
}
RefVector<DataType> get_shifted()
{
return { alu_a_hi_shift,
Expand Down Expand Up @@ -2473,7 +2482,7 @@ class AvmFlavor {
mem_tag_shift,
mem_tsp_shift,
mem_val_shift };
};
}
};

public:
Expand Down Expand Up @@ -2551,7 +2560,7 @@ class AvmFlavor {
mem_tag,
mem_tsp,
mem_val };
};
}

void compute_logderivative_inverses(const RelationParameters<FF>& relation_parameters)
{
Expand Down Expand Up @@ -3069,7 +3078,7 @@ class AvmFlavor {
Base::mem_diff_mid = "MEM_DIFF_MID";
Base::mem_glob_addr = "MEM_GLOB_ADDR";
Base::mem_last = "MEM_LAST";
Base::mem_lastAccess = "MEM_LASTACCESS";
Base::mem_lastAccess = "MEM_LAST_ACCESS";
Base::mem_one_min_inv = "MEM_ONE_MIN_INV";
Base::mem_r_in_tag = "MEM_R_IN_TAG";
Base::mem_rw = "MEM_RW";
Expand Down Expand Up @@ -4447,4 +4456,4 @@ class AvmFlavor {
};
};

} // namespace bb
} // namespace bb
Loading

0 comments on commit f42a05e

Please sign in to comment.