Skip to content

Commit 78285a5

Browse files
committed
feat(avm): use template engine for codegen
1 parent c5e9d4a commit 78285a5

5 files changed

Lines changed: 559 additions & 683 deletions

File tree

barretenberg/cpp/src/barretenberg/vm/generated/avm_flavor.hpp

Lines changed: 102 additions & 94 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
#pragma once
32

43
#include "barretenberg/commitment_schemes/kzg/kzg.hpp"
@@ -7,20 +6,30 @@
76
#include "barretenberg/polynomials/barycentric.hpp"
87
#include "barretenberg/polynomials/univariate.hpp"
98

10-
#include "barretenberg/relations/generic_permutation/generic_permutation_relation.hpp"
11-
129
#include "barretenberg/flavor/flavor.hpp"
1310
#include "barretenberg/flavor/flavor_macros.hpp"
1411
#include "barretenberg/polynomials/evaluation_domain.hpp"
1512
#include "barretenberg/polynomials/polynomial.hpp"
13+
#include "barretenberg/transcript/transcript.hpp"
14+
#include "barretenberg/vm/avm_trace/stats.hpp"
15+
16+
// Relations
1617
#include "barretenberg/relations/generated/avm/alu.hpp"
1718
#include "barretenberg/relations/generated/avm/binary.hpp"
1819
#include "barretenberg/relations/generated/avm/conversion.hpp"
1920
#include "barretenberg/relations/generated/avm/gas.hpp"
20-
#include "barretenberg/relations/generated/avm/incl_main_tag_err.hpp"
21-
#include "barretenberg/relations/generated/avm/incl_mem_tag_err.hpp"
2221
#include "barretenberg/relations/generated/avm/keccakf1600.hpp"
2322
#include "barretenberg/relations/generated/avm/kernel.hpp"
23+
#include "barretenberg/relations/generated/avm/main.hpp"
24+
#include "barretenberg/relations/generated/avm/mem.hpp"
25+
#include "barretenberg/relations/generated/avm/pedersen.hpp"
26+
#include "barretenberg/relations/generated/avm/poseidon2.hpp"
27+
#include "barretenberg/relations/generated/avm/powers.hpp"
28+
#include "barretenberg/relations/generated/avm/sha256.hpp"
29+
30+
// Lookup relations
31+
#include "barretenberg/relations/generated/avm/incl_main_tag_err.hpp"
32+
#include "barretenberg/relations/generated/avm/incl_mem_tag_err.hpp"
2433
#include "barretenberg/relations/generated/avm/kernel_output_lookup.hpp"
2534
#include "barretenberg/relations/generated/avm/lookup_byte_lengths.hpp"
2635
#include "barretenberg/relations/generated/avm/lookup_byte_operations.hpp"
@@ -56,9 +65,6 @@
5665
#include "barretenberg/relations/generated/avm/lookup_u16_9.hpp"
5766
#include "barretenberg/relations/generated/avm/lookup_u8_0.hpp"
5867
#include "barretenberg/relations/generated/avm/lookup_u8_1.hpp"
59-
#include "barretenberg/relations/generated/avm/main.hpp"
60-
#include "barretenberg/relations/generated/avm/mem.hpp"
61-
#include "barretenberg/relations/generated/avm/pedersen.hpp"
6268
#include "barretenberg/relations/generated/avm/perm_main_alu.hpp"
6369
#include "barretenberg/relations/generated/avm/perm_main_bin.hpp"
6470
#include "barretenberg/relations/generated/avm/perm_main_conv.hpp"
@@ -72,15 +78,11 @@
7278
#include "barretenberg/relations/generated/avm/perm_main_mem_ind_addr_d.hpp"
7379
#include "barretenberg/relations/generated/avm/perm_main_pedersen.hpp"
7480
#include "barretenberg/relations/generated/avm/perm_main_pos2_perm.hpp"
75-
#include "barretenberg/relations/generated/avm/poseidon2.hpp"
76-
#include "barretenberg/relations/generated/avm/powers.hpp"
7781
#include "barretenberg/relations/generated/avm/range_check_da_gas_hi.hpp"
7882
#include "barretenberg/relations/generated/avm/range_check_da_gas_lo.hpp"
7983
#include "barretenberg/relations/generated/avm/range_check_l2_gas_hi.hpp"
8084
#include "barretenberg/relations/generated/avm/range_check_l2_gas_lo.hpp"
81-
#include "barretenberg/relations/generated/avm/sha256.hpp"
82-
#include "barretenberg/transcript/transcript.hpp"
83-
#include "barretenberg/vm/avm_trace/stats.hpp"
85+
#include "barretenberg/relations/generic_permutation/generic_permutation_relation.hpp"
8486

8587
namespace bb {
8688

@@ -162,72 +164,75 @@ class AvmFlavor {
162164
lookup_div_u16_6_relation<FF>,
163165
lookup_div_u16_7_relation<FF>>;
164166

165-
using Relations = std::tuple<Avm_vm::alu<FF>,
166-
Avm_vm::binary<FF>,
167-
Avm_vm::conversion<FF>,
168-
Avm_vm::gas<FF>,
169-
Avm_vm::keccakf1600<FF>,
170-
Avm_vm::kernel<FF>,
171-
Avm_vm::main<FF>,
172-
Avm_vm::mem<FF>,
173-
Avm_vm::pedersen<FF>,
174-
Avm_vm::poseidon2<FF>,
175-
Avm_vm::powers<FF>,
176-
Avm_vm::sha256<FF>,
177-
perm_main_alu_relation<FF>,
178-
perm_main_bin_relation<FF>,
179-
perm_main_conv_relation<FF>,
180-
perm_main_pos2_perm_relation<FF>,
181-
perm_main_pedersen_relation<FF>,
182-
perm_main_mem_a_relation<FF>,
183-
perm_main_mem_b_relation<FF>,
184-
perm_main_mem_c_relation<FF>,
185-
perm_main_mem_d_relation<FF>,
186-
perm_main_mem_ind_addr_a_relation<FF>,
187-
perm_main_mem_ind_addr_b_relation<FF>,
188-
perm_main_mem_ind_addr_c_relation<FF>,
189-
perm_main_mem_ind_addr_d_relation<FF>,
190-
lookup_byte_lengths_relation<FF>,
191-
lookup_byte_operations_relation<FF>,
192-
lookup_opcode_gas_relation<FF>,
193-
range_check_l2_gas_hi_relation<FF>,
194-
range_check_l2_gas_lo_relation<FF>,
195-
range_check_da_gas_hi_relation<FF>,
196-
range_check_da_gas_lo_relation<FF>,
197-
kernel_output_lookup_relation<FF>,
198-
lookup_into_kernel_relation<FF>,
199-
incl_main_tag_err_relation<FF>,
200-
incl_mem_tag_err_relation<FF>,
201-
lookup_mem_rng_chk_lo_relation<FF>,
202-
lookup_mem_rng_chk_mid_relation<FF>,
203-
lookup_mem_rng_chk_hi_relation<FF>,
204-
lookup_pow_2_0_relation<FF>,
205-
lookup_pow_2_1_relation<FF>,
206-
lookup_u8_0_relation<FF>,
207-
lookup_u8_1_relation<FF>,
208-
lookup_u16_0_relation<FF>,
209-
lookup_u16_1_relation<FF>,
210-
lookup_u16_2_relation<FF>,
211-
lookup_u16_3_relation<FF>,
212-
lookup_u16_4_relation<FF>,
213-
lookup_u16_5_relation<FF>,
214-
lookup_u16_6_relation<FF>,
215-
lookup_u16_7_relation<FF>,
216-
lookup_u16_8_relation<FF>,
217-
lookup_u16_9_relation<FF>,
218-
lookup_u16_10_relation<FF>,
219-
lookup_u16_11_relation<FF>,
220-
lookup_u16_12_relation<FF>,
221-
lookup_u16_13_relation<FF>,
222-
lookup_u16_14_relation<FF>,
223-
lookup_div_u16_0_relation<FF>,
224-
lookup_div_u16_1_relation<FF>,
225-
lookup_div_u16_2_relation<FF>,
226-
lookup_div_u16_3_relation<FF>,
227-
lookup_div_u16_4_relation<FF>,
228-
lookup_div_u16_5_relation<FF>,
229-
lookup_div_u16_6_relation<FF>,
230-
lookup_div_u16_7_relation<FF>>;
167+
using Relations = std::tuple<
168+
// Relations
169+
Avm_vm::alu<FF>,
170+
Avm_vm::binary<FF>,
171+
Avm_vm::conversion<FF>,
172+
Avm_vm::gas<FF>,
173+
Avm_vm::keccakf1600<FF>,
174+
Avm_vm::kernel<FF>,
175+
Avm_vm::main<FF>,
176+
Avm_vm::mem<FF>,
177+
Avm_vm::pedersen<FF>,
178+
Avm_vm::poseidon2<FF>,
179+
Avm_vm::powers<FF>,
180+
Avm_vm::sha256<FF>,
181+
// Lookups
182+
perm_main_alu_relation<FF>,
183+
perm_main_bin_relation<FF>,
184+
perm_main_conv_relation<FF>,
185+
perm_main_pos2_perm_relation<FF>,
186+
perm_main_pedersen_relation<FF>,
187+
perm_main_mem_a_relation<FF>,
188+
perm_main_mem_b_relation<FF>,
189+
perm_main_mem_c_relation<FF>,
190+
perm_main_mem_d_relation<FF>,
191+
perm_main_mem_ind_addr_a_relation<FF>,
192+
perm_main_mem_ind_addr_b_relation<FF>,
193+
perm_main_mem_ind_addr_c_relation<FF>,
194+
perm_main_mem_ind_addr_d_relation<FF>,
195+
lookup_byte_lengths_relation<FF>,
196+
lookup_byte_operations_relation<FF>,
197+
lookup_opcode_gas_relation<FF>,
198+
range_check_l2_gas_hi_relation<FF>,
199+
range_check_l2_gas_lo_relation<FF>,
200+
range_check_da_gas_hi_relation<FF>,
201+
range_check_da_gas_lo_relation<FF>,
202+
kernel_output_lookup_relation<FF>,
203+
lookup_into_kernel_relation<FF>,
204+
incl_main_tag_err_relation<FF>,
205+
incl_mem_tag_err_relation<FF>,
206+
lookup_mem_rng_chk_lo_relation<FF>,
207+
lookup_mem_rng_chk_mid_relation<FF>,
208+
lookup_mem_rng_chk_hi_relation<FF>,
209+
lookup_pow_2_0_relation<FF>,
210+
lookup_pow_2_1_relation<FF>,
211+
lookup_u8_0_relation<FF>,
212+
lookup_u8_1_relation<FF>,
213+
lookup_u16_0_relation<FF>,
214+
lookup_u16_1_relation<FF>,
215+
lookup_u16_2_relation<FF>,
216+
lookup_u16_3_relation<FF>,
217+
lookup_u16_4_relation<FF>,
218+
lookup_u16_5_relation<FF>,
219+
lookup_u16_6_relation<FF>,
220+
lookup_u16_7_relation<FF>,
221+
lookup_u16_8_relation<FF>,
222+
lookup_u16_9_relation<FF>,
223+
lookup_u16_10_relation<FF>,
224+
lookup_u16_11_relation<FF>,
225+
lookup_u16_12_relation<FF>,
226+
lookup_u16_13_relation<FF>,
227+
lookup_u16_14_relation<FF>,
228+
lookup_div_u16_0_relation<FF>,
229+
lookup_div_u16_1_relation<FF>,
230+
lookup_div_u16_2_relation<FF>,
231+
lookup_div_u16_3_relation<FF>,
232+
lookup_div_u16_4_relation<FF>,
233+
lookup_div_u16_5_relation<FF>,
234+
lookup_div_u16_6_relation<FF>,
235+
lookup_div_u16_7_relation<FF>>;
231236

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

@@ -252,14 +257,16 @@ class AvmFlavor {
252257

253258
DEFINE_FLAVOR_MEMBERS(DataType, main_clk, main_sel_first)
254259

255-
RefVector<DataType> get_selectors() { return { main_clk, main_sel_first }; };
256-
RefVector<DataType> get_sigma_polynomials() { return {}; };
257-
RefVector<DataType> get_id_polynomials() { return {}; };
258-
RefVector<DataType> get_table_polynomials() { return {}; };
260+
RefVector<DataType> get_selectors() { return { main_clk, main_sel_first }; }
261+
RefVector<DataType> get_sigma_polynomials() { return {}; }
262+
RefVector<DataType> get_id_polynomials() { return {}; }
263+
RefVector<DataType> get_table_polynomials() { return {}; }
259264
};
260265

261-
template <typename DataType> class WitnessEntities {
266+
template <typename DataType_> class WitnessEntities {
262267
public:
268+
using DataType = DataType_;
269+
263270
DEFINE_FLAVOR_MEMBERS(DataType,
264271
kernel_kernel_inputs,
265272
kernel_kernel_value_out,
@@ -1034,11 +1041,13 @@ class AvmFlavor {
10341041
lookup_div_u16_5_counts,
10351042
lookup_div_u16_6_counts,
10361043
lookup_div_u16_7_counts };
1037-
};
1044+
}
10381045
};
10391046

1040-
template <typename DataType> class AllEntities {
1047+
template <typename DataType_> class AllEntities {
10411048
public:
1049+
using DataType = DataType_;
1050+
10421051
DEFINE_FLAVOR_MEMBERS(DataType,
10431052
main_clk,
10441053
main_sel_first,
@@ -1947,7 +1956,7 @@ class AvmFlavor {
19471956
mem_tag_shift,
19481957
mem_tsp_shift,
19491958
mem_val_shift };
1950-
};
1959+
}
19511960
RefVector<DataType> get_unshifted()
19521961
{
19531962
return { main_clk,
@@ -2337,7 +2346,7 @@ class AvmFlavor {
23372346
lookup_div_u16_5_counts,
23382347
lookup_div_u16_6_counts,
23392348
lookup_div_u16_7_counts };
2340-
};
2349+
}
23412350
RefVector<DataType> get_to_be_shifted()
23422351
{
23432352
return { alu_a_hi,
@@ -2405,7 +2414,7 @@ class AvmFlavor {
24052414
mem_tag,
24062415
mem_tsp,
24072416
mem_val };
2408-
};
2417+
}
24092418
RefVector<DataType> get_shifted()
24102419
{
24112420
return { alu_a_hi_shift,
@@ -2473,10 +2482,9 @@ class AvmFlavor {
24732482
mem_tag_shift,
24742483
mem_tsp_shift,
24752484
mem_val_shift };
2476-
};
2485+
}
24772486
};
24782487

2479-
public:
24802488
class ProvingKey
24812489
: public ProvingKeyAvm_<PrecomputedEntities<Polynomial>, WitnessEntities<Polynomial>, CommitmentKey> {
24822490
public:
@@ -2551,7 +2559,7 @@ class AvmFlavor {
25512559
mem_tag,
25522560
mem_tsp,
25532561
mem_val };
2554-
};
2562+
}
25552563

25562564
void compute_logderivative_inverses(const RelationParameters<FF>& relation_parameters)
25572565
{
@@ -3069,7 +3077,7 @@ class AvmFlavor {
30693077
Base::mem_diff_mid = "MEM_DIFF_MID";
30703078
Base::mem_glob_addr = "MEM_GLOB_ADDR";
30713079
Base::mem_last = "MEM_LAST";
3072-
Base::mem_lastAccess = "MEM_LASTACCESS";
3080+
Base::mem_lastAccess = "MEM_LAST_ACCESS";
30733081
Base::mem_one_min_inv = "MEM_ONE_MIN_INV";
30743082
Base::mem_r_in_tag = "MEM_R_IN_TAG";
30753083
Base::mem_rw = "MEM_RW";
@@ -4447,4 +4455,4 @@ class AvmFlavor {
44474455
};
44484456
};
44494457

4450-
} // namespace bb
4458+
} // namespace bb

0 commit comments

Comments
 (0)