Barretenberg
The ZK-SNARK library at the core of Aztec
Loading...
Searching...
No Matches
ecc_mem_impl.hpp
Go to the documentation of this file.
1// AUTOGENERATED FILE
2#pragma once
3
6
7namespace bb::avm2 {
8
9template <typename FF_>
10template <typename ContainerOverSubrelations, typename AllEntities>
11void ecc_memImpl<FF_>::accumulate(ContainerOverSubrelations& evals,
12 const AllEntities& in,
13 [[maybe_unused]] const RelationParameters<FF_>&,
14 [[maybe_unused]] const FF_& scaling_factor)
15{
16 using C = ColumnAndShifts;
17
18 const auto constants_AVM_HIGHEST_MEM_ADDRESS = FF(4294967295UL);
19 const auto ecc_INFINITY_X = FF(0);
20 const auto ecc_INFINITY_Y = FF(0);
21 const auto ecc_add_mem_P_X3 = in.get(C::ecc_add_mem_p_x) * in.get(C::ecc_add_mem_p_x) * in.get(C::ecc_add_mem_p_x);
22 const auto ecc_add_mem_P_Y2 = in.get(C::ecc_add_mem_p_y) * in.get(C::ecc_add_mem_p_y);
23 const auto ecc_add_mem_Q_X3 = in.get(C::ecc_add_mem_q_x) * in.get(C::ecc_add_mem_q_x) * in.get(C::ecc_add_mem_q_x);
24 const auto ecc_add_mem_Q_Y2 = in.get(C::ecc_add_mem_q_y) * in.get(C::ecc_add_mem_q_y);
25
26 {
27 using View = typename std::tuple_element_t<0, ContainerOverSubrelations>::View;
28 auto tmp =
29 static_cast<View>(in.get(C::ecc_add_mem_sel)) * (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel)));
30 std::get<0>(evals) += (tmp * scaling_factor);
31 }
32 { // WRITE_INCR_DST_ADDR
33 using View = typename std::tuple_element_t<1, ContainerOverSubrelations>::View;
34 auto tmp = (static_cast<View>(in.get(C::ecc_add_mem_dst_addr_1_)) -
35 static_cast<View>(in.get(C::ecc_add_mem_sel)) *
36 (static_cast<View>(in.get(C::ecc_add_mem_dst_addr_0_)) + FF(1)));
37 std::get<1>(evals) += (tmp * scaling_factor);
38 }
39 {
40 using View = typename std::tuple_element_t<2, ContainerOverSubrelations>::View;
41 auto tmp = static_cast<View>(in.get(C::ecc_add_mem_sel)) *
42 (static_cast<View>(in.get(C::ecc_add_mem_max_mem_addr)) - CView(constants_AVM_HIGHEST_MEM_ADDRESS));
43 std::get<2>(evals) += (tmp * scaling_factor);
44 }
45 {
46 using View = typename std::tuple_element_t<3, ContainerOverSubrelations>::View;
47 auto tmp = static_cast<View>(in.get(C::ecc_add_mem_sel_p_not_on_curve_err)) *
48 (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_p_not_on_curve_err)));
49 std::get<3>(evals) += (tmp * scaling_factor);
50 }
51 {
52 using View = typename std::tuple_element_t<4, ContainerOverSubrelations>::View;
53 auto tmp = static_cast<View>(in.get(C::ecc_add_mem_sel_q_not_on_curve_err)) *
54 (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_q_not_on_curve_err)));
55 std::get<4>(evals) += (tmp * scaling_factor);
56 }
57 { // P_CURVE_EQN
58 using View = typename std::tuple_element_t<5, ContainerOverSubrelations>::View;
59 auto tmp = (static_cast<View>(in.get(C::ecc_add_mem_p_is_on_curve_eqn)) -
60 static_cast<View>(in.get(C::ecc_add_mem_sel)) *
61 (CView(ecc_add_mem_P_Y2) - (CView(ecc_add_mem_P_X3) - FF(17))) *
62 (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_p_is_inf))));
63 std::get<5>(evals) += (tmp * scaling_factor);
64 }
65 { // P_ON_CURVE_CHECK
66 using View = typename std::tuple_element_t<6, ContainerOverSubrelations>::View;
67 auto tmp = static_cast<View>(in.get(C::ecc_add_mem_sel)) *
68 (static_cast<View>(in.get(C::ecc_add_mem_p_is_on_curve_eqn)) *
69 ((FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_p_not_on_curve_err))) *
70 (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_p_is_on_curve_eqn_inv))) +
71 static_cast<View>(in.get(C::ecc_add_mem_p_is_on_curve_eqn_inv))) -
72 static_cast<View>(in.get(C::ecc_add_mem_sel_p_not_on_curve_err)));
73 std::get<6>(evals) += (tmp * scaling_factor);
74 }
75 { // Q_CURVE_EQN
76 using View = typename std::tuple_element_t<7, ContainerOverSubrelations>::View;
77 auto tmp = (static_cast<View>(in.get(C::ecc_add_mem_q_is_on_curve_eqn)) -
78 static_cast<View>(in.get(C::ecc_add_mem_sel)) *
79 (CView(ecc_add_mem_Q_Y2) - (CView(ecc_add_mem_Q_X3) - FF(17))) *
80 (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_q_is_inf))));
81 std::get<7>(evals) += (tmp * scaling_factor);
82 }
83 { // Q_ON_CURVE_CHECK
84 using View = typename std::tuple_element_t<8, ContainerOverSubrelations>::View;
85 auto tmp = static_cast<View>(in.get(C::ecc_add_mem_sel)) *
86 (static_cast<View>(in.get(C::ecc_add_mem_q_is_on_curve_eqn)) *
87 ((FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_q_not_on_curve_err))) *
88 (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_q_is_on_curve_eqn_inv))) +
89 static_cast<View>(in.get(C::ecc_add_mem_q_is_on_curve_eqn_inv))) -
90 static_cast<View>(in.get(C::ecc_add_mem_sel_q_not_on_curve_err)));
91 std::get<8>(evals) += (tmp * scaling_factor);
92 }
93 {
94 using View = typename std::tuple_element_t<9, ContainerOverSubrelations>::View;
95 auto tmp = (static_cast<View>(in.get(C::ecc_add_mem_err)) -
96 (FF(1) - (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_dst_out_of_range_err))) *
97 (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_p_not_on_curve_err))) *
98 (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_sel_q_not_on_curve_err)))));
99 std::get<9>(evals) += (tmp * scaling_factor);
100 }
101 {
102 using View = typename std::tuple_element_t<10, ContainerOverSubrelations>::View;
103 auto tmp =
104 (static_cast<View>(in.get(C::ecc_add_mem_sel_should_exec)) -
105 static_cast<View>(in.get(C::ecc_add_mem_sel)) * (FF(1) - static_cast<View>(in.get(C::ecc_add_mem_err))));
106 std::get<10>(evals) += (tmp * scaling_factor);
107 }
108 { // P_INF_X_CHECK
109 using View = typename std::tuple_element_t<11, ContainerOverSubrelations>::View;
110 auto tmp = static_cast<View>(in.get(C::ecc_add_mem_sel)) * static_cast<View>(in.get(C::ecc_add_mem_p_is_inf)) *
111 (static_cast<View>(in.get(C::ecc_add_mem_p_x)) - CView(ecc_INFINITY_X));
112 std::get<11>(evals) += (tmp * scaling_factor);
113 }
114 { // P_INF_Y_CHECK
115 using View = typename std::tuple_element_t<12, ContainerOverSubrelations>::View;
116 auto tmp = static_cast<View>(in.get(C::ecc_add_mem_sel)) * static_cast<View>(in.get(C::ecc_add_mem_p_is_inf)) *
117 (static_cast<View>(in.get(C::ecc_add_mem_p_y)) - CView(ecc_INFINITY_Y));
118 std::get<12>(evals) += (tmp * scaling_factor);
119 }
120 { // Q_INF_X_CHECK
121 using View = typename std::tuple_element_t<13, ContainerOverSubrelations>::View;
122 auto tmp = static_cast<View>(in.get(C::ecc_add_mem_sel)) * static_cast<View>(in.get(C::ecc_add_mem_q_is_inf)) *
123 (static_cast<View>(in.get(C::ecc_add_mem_q_x)) - CView(ecc_INFINITY_X));
124 std::get<13>(evals) += (tmp * scaling_factor);
125 }
126 { // Q_INF_Y_CHECK
127 using View = typename std::tuple_element_t<14, ContainerOverSubrelations>::View;
128 auto tmp = static_cast<View>(in.get(C::ecc_add_mem_sel)) * static_cast<View>(in.get(C::ecc_add_mem_q_is_inf)) *
129 (static_cast<View>(in.get(C::ecc_add_mem_q_y)) - CView(ecc_INFINITY_Y));
130 std::get<14>(evals) += (tmp * scaling_factor);
131 }
132}
133
134} // namespace bb::avm2
static void accumulate(ContainerOverSubrelations &evals, const AllEntities &in, const RelationParameters< FF > &, const FF &scaling_factor)
AvmFlavorSettings::FF FF
Definition field.hpp:10
ColumnAndShifts
Definition columns.hpp:34
constexpr decltype(auto) get(::tuplet::tuple< T... > &&t) noexcept
Definition tuple.hpp:13
#define CView(v)
Container for parameters used by the grand product (permutation, lookup) Honk relations.